簡介:哈工大的語言技術平台 (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.0
er.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 (" ".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]))

推薦閱讀:

相关文章