在之前的 從零開始學自然語言處理(六)—— 命名實體識別 文章中,我們使用了 standford CoreNLP 工具,本文中,我們繼續會使用 standford CoreNLP 進行句法分析。
句法分析分為句法結構分析(syntactic structure parsing)和依存關係分析(dependency parsing)。
以獲取整個句子的句法結構為目的的稱為完全句法分析,而以獲得局部成分為目的的語法分析稱為局部分析,依存關係分析簡稱依存分析。
今天我們看看句法結構分析。
簡單的講,句法結構分析方法可以分為基於規則的分析方法和基於統計的分析方法兩大類。
顧名思義,句法結構分析可以幫我們分析出句子的句法結構信息(如:主謂賓、定狀補)。
from nltk.parse.stanford import StanfordParser
chi_parser = StanfordParser(r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser.jar",r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser-3.9.2-models.jar",r"F:\stanford-parser-3.9.2-models\edu\stanford\nlp\models\lexparser\chinesePCFG.ser.gz")
其中,用到的內容在 從零開始學自然語言處理(六)—— 命名實體識別 文章中提過,用到的chinesePCFG.ser.gz在stanford-corenlp-full-2018-10-05中的stanford-corenlp-3.9.2-models.jar解壓後的內容中。
文末掃碼關注公眾號「數據科學雜談」,公眾號後臺回復「NER」,即可獲取本文所需相關安裝文件~
#分析指定數據,返回一個generator
sent = '我 愛 北京 天安門'
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
#需要注意的是line類型為<class 'nltk.tree.Tree'>
print(line)
#畫樹
line.draw()
#樹會彈出來顯示
句法分析縮寫語含義
ROOT:要處理文本的語句
IP:簡單從句
NP:名詞短語
VP:動詞短語
PU:斷句符,通常是句號、問號、感嘆號等標點符號
LCP:方位詞短語
PP:介詞短語
CP:由『的』構成的表示修飾性關係的短語
DNP:由『的』構成的表示所屬關係的短語
ADVP:副詞短語
ADJP:形容詞短語
DP:限定詞短語
QP:量詞短語
NN:常用名詞
NR:固有名詞
NT:時間名詞
PN:代詞
VV:動詞
VC:是
CC:表示連詞
VE:有
VA:表語形容詞
AS:內容標記(如:了)
VRD:動補複合詞
CD: 表示基數詞
DT: determiner 表示限定詞
EX: existential there 存在句
FW: foreign word 外來詞
IN: preposition or conjunction, subordinating 介詞或從屬連詞
JJ: adjective or numeral, ordinal 形容詞或序數詞
JJR: adjective, comparative 形容詞比較級
JJS: adjective, superlative 形容詞最高級
LS: list item marker 列表標識
MD: modal auxiliary 情態助動詞
PDT: pre-determiner 前位限定詞
POS: genitive marker 所有格標記
PRP: pronoun, personal 人稱代詞
RB: adverb 副詞
RBR: adverb, comparative 副詞比較級
RBS: adverb, superlative 副詞最高級
RP: particle 小品詞
SYM: symbol 符號
TO:」to」 as preposition or infinitive marker 作為介詞或不定式標記
WDT: WH-determiner WH限定詞
WP: WH-pronoun WH代詞
WP$: WH-pronoun, possessive WH所有格代詞
WRB:Wh-adverb WH副詞
我們試試其他的句子:
sent = u'關注 公眾號 數據科學雜談 手把手 帶 你 學習 自然語言處理'
print(list(chi_parser.parse(sent.split())))
[Tree('ROOT', [Tree('IP', [Tree('NP', [Tree('NN', ['關注']), Tree('NN', ['公眾號']), Tree('NN', ['數據科學雜談']), Tree('NN', ['手把手'])]), Tree('VP', [Tree('VV', ['帶']), Tree('IP', [Tree('NP', [Tree('PN', ['你'])]), Tree('VP', [Tree('VV', ['學習']), Tree('NP', [Tree('NN', ['自然語言處理'])])])])])])])]
#分析指定數據,返回一個generator
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
#需要注意的是line類型為<class 'nltk.tree.Tree'>
print(line)
#畫樹
line.draw()
#樹會彈出來顯示
接下來我們看看英文的句法結構分析:
#英文句法分析
eng_parser = StanfordParser(r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser.jar",r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser-3.9.2-models.jar")
print(list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split())))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
#分析指定數據,返回一個generator
sent = r"the quick brown fox jumps over the lazy dog"
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
#需要注意的是line類型為<class 'nltk.tree.Tree'>
print(line)
#畫樹
line.draw()
#樹會彈出來顯示