NLP入门学习3——句法分析(基于LTP4)
NLP入門學習3——句法分析(基于LTP4)
- 0.簡介
- 1.LTP介紹
- 2.安裝
- 2.1 模塊安裝
- 2.2 模型下載
- 3.使用
- 3.1 分句
- 3.2 分詞
- 3.3 詞性標注
- 3.4 命名實體識別
- 3.5 依存句法分析
- 4.說明
- 4.1 詞性標注
- 4.2 依存句法分析
0.簡介
本篇將介紹NLP中的句法結構分析,主要基于LTP工具實現,在過程中也會介紹LTP其他功能的使用。
1.LTP介紹
LTP(Language Technology Platform) 提供了一系列中文自然語言處理工具,用戶可以使用這些工具對于中文文本進行分詞、詞性標注、句法分析等等工作。
git:https://github.com/HIT-SCIR/ltp
2.安裝
2.1 模塊安裝
舊版的ltp安裝上有點問題,linux下執行pip,默認安裝0.2.1版本。
pip install pyltpwindows下會存在問題,可參考https://github.com/HIT-SCIR/pyltp/issues/125
建議安裝ltp4,一鍵安裝:
2.2 模型下載
官方git中有模型的下載鏈接,包括V1和V2兩個版本,又包括base,small和tiny三個模型。
同時,官方git上給出了兩個版本的各項指標。
3.使用
3.1 分句
from ltp import LTP ltp = LTP('../ltp_model/base') # 加載模型,路徑是模型文件解壓后的文件夾 # 后面的代碼全都省略了模型加載這一步sents = ltp.sent_split(["吃葡萄不吐葡萄皮。不吃葡萄倒吐葡萄皮。"]) sents# [out]: ['吃葡萄不吐葡萄皮。', '不吃葡萄倒吐葡萄皮。']3.2 分詞
segment, hidden = ltp.seg(["南京市長江大橋"]) segment# [out]: [['南京市', '長江', '大橋']]與其他分詞工具類似,LTP也提供自定義詞典的功能,可以指定加載自定義詞典的路徑。
ltp.init_dict(path="user_dict.txt", max_window=4)也可以直接輸入自定義的詞匯,加入自定義之后的分詞結果:
ltp.add_words(words=["市長", "江大橋"], max_window=4)segment, hidden = ltp.seg(["南京市長江大橋"]) segment# [out]: [['南京', '市長', '江大橋']]3.3 詞性標注
pos = ltp.pos(hidden) pos# [out]: [['ns', 'ns', 'n']] # 這個結果對應的是 [['南京市', '長江', '大橋']]詞性標注的結果與分詞結果相對應,結果中的ns等,會在第4部分進行備注。
3.4 命名實體識別
ltp也可以完成命名實體識別的任務,不過對于復雜任務最好還是用更加復雜的模型去做,畢竟ltp的參數量在這擺著呢。
ner = ltp.ner(hidden) ner# [out]: [[('Nh', 0, 0), ('Ns', 1, 1), ('Nh', 2, 2)]]for i in range(len(ner[0])): # 因為只有一個句子,所以直接取了ner[0]print("{}:".format(ner[0][i][0]), segment[0][ner[0][i][1]: ner[0][i][2]+1]) # [out]: Nh: ['南京'] # Ns: ['市長'] # Nh: ['江大橋']唉,果然結果不是很準,南京給認成了人名。在詞性標注方面,ltp劃分的太細了,在實際應用的過程中其實只需要去判斷動詞名詞之類就好,如果要對人名地點進行標注,最好還是用專門的NER模型去完成。
3.5 依存句法分析
ltp.add_words(words=["市長", "江大橋"], max_window=4) segment, hidden = ltp.seg(["南京市長江大橋是南京市的市長"]) print(segment) dep = ltp.dep(hidden) dep# [out]: [['南京', '市長', '江大橋', '是', '南京市', '的', '市長']] # [out]: [[(1, 2, 'ATT'), # (2, 3, 'ATT'), # (3, 4, 'SBV'), # (4, 0, 'HED'), # (5, 7, 'ATT'), # (6, 5, 'RAD'), # (7, 4, 'VOB')]]舉個栗子,ATT代表定中關系,也就是定語和中心詞,南京是市長的定語,市長是江大橋的定語。這些關系有很多實際的應用,例如基于這些關系,在命名實體識別中,找到實體后,將實體的修飾詞補全等等。
4.說明
4.1 詞性標注
| a | adjective:形容詞 | 美麗 |
| b | other noun-modifier:其他的修飾名詞 | 大型, 西式 |
| c | conjunction:連詞 | 和, 雖然 |
| d | adverb:副詞 | 很 |
| e | exclamation:感嘆詞 | 哎 |
| g | morpheme | 茨, 甥 |
| h | prefix:前綴 | 阿, 偽 |
| i | idiom:成語 | 百花齊放 |
| j | abbreviation:縮寫 | 公檢法 |
| k | suffix:后綴 | 界, 率 |
| m | number:數字 | 一, 第一 |
| n | general noun:一般名詞 | 蘋果 |
| nd | direction noun:方向名詞 | 右側 |
| nh | person name:人名 | 杜甫, 湯姆 |
| ni | organization name:公司名 | 保險公司 |
| nl | location noun:地點名詞 | 城郊 |
| ns | geographical name:地理名詞 | 北京 |
| nt | temporal noun:時間名詞 | 近日, 明代 |
| nz | other proper noun:其他名詞 | 諾貝爾獎 |
| o | onomatopoeia:擬聲詞 | 嘩啦 |
| p | preposition:介詞 | 在, 把 |
| q | quantity:量詞 | 個 |
| r | pronoun:代詞 | 我們 |
| u | auxiliary:助詞 | 的, 地 |
| v | verb:動詞 | 跑, 學習 |
| wp | punctuation:標點 | ,。! |
| ws | foreign words:國外詞 | CPU |
| x | non-lexeme:不構成詞 | 萄, 翱 |
4.2 依存句法分析
| 主謂關系 | SBV | subject-verb | 我送她一束花 (我 <– 送) |
| 動賓關系 | VOB | 直接賓語,verb-object | 我送她一束花 (送 –> 花) |
| 間賓關系 | IOB | 間接賓語,indirect-object | 我送她一束花 (送 –> 她) |
| 前置賓語 | FOB | 前置賓語,fronting-object | 他什么書都讀 (書 <– 讀) |
| 兼語 | DBL | double | 他請我吃飯 (請 –> 我) |
| 定中關系 | ATT | attribute | 紅蘋果 (紅 <– 蘋果) |
| 狀中結構 | ADV | adverbial | 非常美麗 (非常 <– 美麗) |
| 動補結構 | CMP | complement | 做完了作業 (做 –> 完) |
| 并列關系 | COO | coordinate | 大山和大海 (大山 –> 大海) |
| 介賓關系 | POB | preposition-object | 在貿易區內 (在 –> 內) |
| 左附加關系 | LAD | left adjunct | 大山和大海 (和 <– 大海) |
| 右附加關系 | RAD | right adjunct | 孩子們 (孩子 –> 們) |
| 獨立結構 | IS | independent structure | 兩個單句在結構上彼此獨立 |
| 核心關系 | HED | head | 指整個句子的核心 |
總結
以上是生活随笔為你收集整理的NLP入门学习3——句法分析(基于LTP4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式-开宝箱
- 下一篇: 每日一题_447.回旋镖的数量