哈工大語言技術平台LTP的用法
簡介:哈工大的語言技術平台 (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]))推薦閱讀: