简介:哈工大的语言技术平台 (LTP)提供了中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术。
用法:官方提供了Java、C++、python、C#、Ruby接口,这篇使用方法是关于python接口pyltp的。首先需要下载模型文件,然后就是安装pyltp
安装:pip install pyltp
1.分词
import pyltp
from pyltp import Segmentor#导入Segmentor库
math_path = "D:ltp3.4.0cws.model"#LTP分词模型库
segmentor = Segmentor()#实例化分词模块
segmentor.load(math_path)#加载分词库
words = segmentor.segment("中国是一个自由、和平的国家")
print(' '.join(words).split())#分割分词后的结果
分词结果:['中国', '是', '一个', '自由', '、', '和平', '的', '国家']
2.词性标记
import pyltp
from pyltp import Postagger#导入Postagger库
math_path = "D:ltp3.4.0pos.model"#LTP词性标注模型库
postagger = Postagger() #实例化词性模块
postagger.load(math_path)#加载词性库
postags = postagger.postag(words)#这里的words是分词后的结果
print(' '.join(postags).split())#分割标注后的结果
标注结果:['ns', 'v', 'm', 'a', 'wp', 'a', 'u', 'n']
3.命名实体识别
import pyltp
from pyltp import NamedEntityRecognizer#导入库NamedEntityRecognizer
math_path = "D:ltp3.4.0ner.model"#LTP命名实体识别模型库
recognizer = NamedEntityRecognizer() # 初始化实例
recognizer.load(math_path)#加载实体识别库
words = ['中国', '是', '一个', '自由', '、', '和平', '的', '国家']
postags = ['ns', 'v', 'm', 'a', 'wp', 'a', 'u', 'n']
netags = recognizer.recognize(words, postags) # 命名实体识别,这里的words是分词的结果,postags是词性标注的结果
print(' '.join(netags).split())#分割识别后的结果
结果:
S-Ns O O O O O O O
4.依存句法分析
import pyltp
from pyltp import Parser#导入库Parser
math_path = "D:ltp3.4.0parser.model"#LTP依存分析模型库
parser = Parser() # 初始化实例
parser.load(math_path)#加载依存分析库
words = ['中国', '是', '一个', '自由', '、', '和平', '的', '国家']
postags = ['ns', 'v', 'm', 'a', 'wp', 'a', 'u', 'n']
arcs = parser.parse(words, postags) # 句法分析,这里的words是分词的结果,postags是词性标注的结果
print ("t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs) ) # 依存分析,
结果:
2:SBV 0:HED 8:ATT 8:ATT 6:WP 4:COO 4:RAD 2:VOB
注:arc.head
表示依存弧的父节点词的索引。ROOT节点的索引是0,第一个词开始的索引依次为1、2、3…
arc.relation
表示依存弧的关系。
arc.head
表示依存弧的父节点词的索引,arc.relation
表示依存弧的关系。
5.语义角色标注
import pyltp
from pyltp import SementicRoleLabeller#导入库SementicRoleLabeller
math_path = "D:ltp3.4.0pisrl.model"#LTP语义角色标注模型库
labeller = SementicRoleLabeller() # 初始化实例
labeller.load(math_path)#加载语义标注库
words = ['中国', '是', '一个', '自由', '、', '和平', '的', '国家']
postags = ['ns', 'v', 'm', 'a', 'wp', 'a', 'u', 'n']
roles = labeller.label(words, postags, arcs) # 语义角色标注,这里的words是分词结果,postags是词性标注结果,arcs是依存句法分析结果
# 打印结果
for role in roles:
print (role.index, "".join(
["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments]))