一、中文分词
中文词语之间不像英语一样,没有空格进行分割,NLP一般以词为最小处理单位,需要对中文分词处理。
# -*- coding: utf-8 -*- """ Created on Fri Nov 26 22:06:23 2021 @author: 86493 """ from ltp import LTP # 默认加载small模型,首次使用时会自动下载并加载模型 ltp = LTP() # 对句子进行分词,结果使用segment访问 # hidden用于访问每个词的隐含层向量,用于后续分析步骤 segment, hidden = ltp.seg(["南京市长江大桥。"]) # LTP能够获得正确的分词结果,如不会分词为:南京,市长 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) # [['他', '叫', '汤姆', '去', '拿', '外衣', '。']] # [[('Nh', 2, 2)]] tag, start, end = ner[0][0] print(tag,":", "".join(seg[0][start:end + 1])) # Nh : 汤姆
四、依存句法分析
注意:在依存句法当中,虚节点ROOT占据了0位置,因此节点的下标从1开始。
from ltp import LTP ltp = LTP() seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"]) dep = ltp.dep(hidden) print(dep)
结果:
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']] # [ # [ # (1, 2, 'SBV'), # (2, 0, 'HED'), # 叫 --|HED|--> ROOT # (3, 2, 'DBL'), # (4, 2, 'VOB'), # (5, 4, 'COO'), # (6, 5, 'VOB'), # (7, 2, 'WP') # ] # ]
(1)上面结果的第1、2行为例:(1, 2, 'SBV')
,(2, 0, 'HED')
,依存句法树会有默认的虚拟root节点,其索引为0,分词后的索引是从1开始的:
(2)第二行的(2, 0, 'HED')第二列为0,代表索引为2的结点(叫)的父节点是索引为0的虚拟root节点。
(3)第一行的(1, 2, 'SBV')的SBV是表示两个节点的依存关系是主谓关系,即“叫”和“他”是主谓关系。
五、语义依存分析
与依存句法类似的,这里的下标也是从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') # ] # ]