学习总结
上次的NLTK是英文工具集,LTP则是中文工具集。同样能用于词法分析(分词、词性标注、命名实体识别)、句法分析(依存句法分析)和语义分析(语义角色标注和语义依存分析)等。
一、中文分词
中文词语之间不像英语一样,没有空格进行分割,NLP一般以词为最小处理单位,需要对中文分词处理。
"""
Created on Fri Nov 26 22:06:23 2021
@author: 86493
"""
from ltp import LTP
ltp = LTP()
segment, hidden = ltp.seg(["南京市长江大桥。"])
print(segment)
LTP能够获得正确的分词结果,如不会分词为:南京,市长,结果为:
[['南京市', '长江大桥', '。']]
二、分句和词性标注
分词:
segment, hidden = ltp.seg(sentences)
print(segment)
# [['南京市', '长江大桥', '。'], ['汤姆', '生病', '了', '。'],
# ['他', '去', '了', '医院', '。']]
词性标注:
pos_tags = ltp.pos(hidden)
print(pos_tags)
# [['ns', 'ns', 'wp'], ['nh', 'v', 'u', 'wp'],
# ['r', 'v', 'u', 'n', 'wp']]
三、命名实体识别任务
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
ner = ltp.ner(hidden)
tag, start, end = ner[0][0]
print(tag,":", "".join(seg[0][start:end + 1]))
四、依存句法分析
注意:在依存句法当中,虚节点ROOT占据了0位置,因此节点的下标从1开始。
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
dep = ltp.dep(hidden)
结果:
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'SBV'),
# (2, 0, 'HED'), # 叫 --|HED|--> ROOT
# (3, 2, 'DBL'),
# (4, 2, 'VOB'),
# (5, 4, 'COO'),
# (6, 5, 'VOB'),
# (7, 2, 'WP')
# ]
# ]
五、语义依存分析
与依存句法类似的,这里的下标也是从1开始。
5.1 树
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, mode='tree')
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'Agt'),
# (2, 0, 'Root'), # 叫 --|Root|--> ROOT
# (3, 2, 'Datv'),
# (4, 2, 'eEfft'),
# (5, 4, 'eEfft'),
# (6, 5, 'Pat'),
# (7, 2, 'mPunc')
# ]
# ]
5.2 图
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, mode='graph')
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'Agt'),
# (2, 0, 'Root'), # 叫 --|Root|--> ROOT
# (3, 2, 'Datv'),
# (3, 4, 'Agt'),
# (3, 5, 'Agt'),
# (4, 2, 'eEfft'),
# (5, 4, 'eEfft'),
# (6, 5, 'Pat'),
# (7, 2, 'mPunc')
# ]
# ]
Reference
哈工大的LTP语言技术平台:http://ltp.ai/docs/index.html
|