【NLP】LTP中文工具集使用

举报
野猪佩奇996 发表于 2022/01/22 23:28:59 2022/01/22
【摘要】 学习总结 上次的NLTK是英文工具集,LTP则是中文工具集。同样能用于词法分析(分词、词性标注、命名实体识别)、句法分析(依存句法分析)和语义分析(语义角色标注和语义依存分析)等。 文章目录 ...

学习总结

上次的NLTK是英文工具集,LTP则是中文工具集。同样能用于词法分析(分词、词性标注、命名实体识别)、句法分析(依存句法分析)和语义分析(语义角色标注和语义依存分析)等。

一、中文分词

中文词语之间不像英语一样,没有空格进行分割,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)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

LTP能够获得正确的分词结果,如不会分词为:南京,市长,结果为:

[['南京市', '长江大桥', '。']]

  
 
  • 1

二、分句和词性标注

分词:

# 分词
segment, hidden = ltp.seg(sentences)
print(segment)

  
 
  • 1
  • 2
  • 3
# [['南京市', '长江大桥', '。'], ['汤姆', '生病', '了', '。'], 
# ['他', '去', '了', '医院', '。']]

  
 
  • 1
  • 2

词性标注:

# 词性标注 
pos_tags = ltp.pos(hidden)
print(pos_tags)

  
 
  • 1
  • 2
  • 3
# [['ns', 'ns', 'wp'], ['nh', 'v', 'u', 'wp'], 
# ['r', 'v', 'u', 'n', 'wp']]

  
 
  • 1
  • 2

三、命名实体识别任务

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 : 汤姆

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

四、依存句法分析

注意:在依存句法当中,虚节点ROOT占据了0位置,因此节点的下标从1开始。

from ltp import LTP

ltp = LTP()

seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
dep = ltp.dep(hidden)
print(dep)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果:

# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
#     [
#         (1, 2, 'SBV'),
#         (2, 0, 'HED'),    # 叫 --|HED|--> ROOT
#         (3, 2, 'DBL'),
#         (4, 2, 'VOB'),
#         (5, 4, 'COO'),
#         (6, 5, 'VOB'),
#         (7, 2, 'WP')
#     ]
# ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(1)上面结果的第1、2行为例:(1, 2, 'SBV')(2, 0, 'HED'),依存句法树会有默认的虚拟root节点,其索引为0,分词后的索引是从1开始的:

汤姆 外衣
1 2 3 4 5 6

(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
  • 3
  • 4
  • 5
  • 6
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
#     [
#         (1, 2, 'Agt'),
#         (2, 0, 'Root'),   # 叫 --|Root|--> ROOT
#         (3, 2, 'Datv'),
#         (4, 2, 'eEfft'),
#         (5, 4, 'eEfft'),
#         (6, 5, 'Pat'),
#         (7, 2, 'mPunc')
#     ]
# ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.2 图

from ltp import LTP

ltp = LTP()

seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, mode='graph')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
#     [
#         (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')
#     ]
# ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

Reference

哈工大的LTP语言技术平台:http://ltp.ai/docs/index.html

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/121570633

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。