python3调用哈工大ltp

运行环境ubuntu+python3

安装pyltp
sudo pip3 install pyltp 
下载ltp_data_v3.4.0模型
http://ltp.ai/
分句
from pyltp import SentenceSplitter #分句,对句子进行切分
sentence = SentenceSplitter.split("我是逗号,我是句号。我是问好?我是感叹号!")
print("\n".join(sentence))
打印结果:
我是逗号,我是句号。
我是问好?
我是感叹号!
分词
import os

LTP_DATA_DIR = "/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0" #ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, "cws.model") #分词模型路径,模型名称为“cws.model”
from pyltp import Segmentor #分词
segmentor = Segmentor() #初始化实例
segmentor.load(cws_model_path) #加载模型
words = segmentor.segment("上海明天天气怎么样?") #进行分词
print(type(words))
print("  ".join(words))
segmentor.release() #释放模型
打印结果:
<class 'pyltp.VectorOfString'>
上海  明天  天气  怎么样  ?
添加自定义词典

自定义词典lexicon.txt

苯丙胺
亚硝酸盐
import os
LTP_DATA_DIR='/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0'  # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`

from pyltp import Segmentor
segmentor = Segmentor()  # 初始化实例
segmentor.load_with_lexicon(cws_model_path, 'lexicon.txt') # 加载模型,第二个参数是您的外部词典文件路径
words = segmentor.segment('亚硝酸盐是一种化学物质')
print('\t'.join(words))
segmentor.release()
打印结果:
[INFO] 2018-08-16 19:18:03 loaded 2 lexicon entries
亚硝酸盐        是      一      种      化学    物质
词性标注
import os
LTP_DATA_DIR = "/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0" #ltp模型目录的路径
pos_model_path = os.path.join(LTP_DATA_DIR, "pos.model") # 词性标注模型路径,>模型名称为`pos.model`
from pyltp import Postagger #词性标注

postagger = Postagger() #初始化实例
postagger.load(pos_model_path) #加载模型
words = ['上海','明天','天气','怎么样'] #分词结果
postages = postagger.postag(words) #词性标注
print(" ".join(postages))
postagger.release() #释放模型
打印结果:
ns nt n r
命名实体识别
import os
LTP_DATA_DIR = "/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0" #ltp模型目录的路径
ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')  # 命名实体识别模型路径,模型名称为`pos.model`

from pyltp import NamedEntityRecognizer
recognizer = NamedEntityRecognizer() # 初始化实例
recognizer.load(ner_model_path)  # 加载模型

words = ['元芳', '你', '怎么', '看']
postags = ['nh', 'r', 'r', 'v']
netags = recognizer.recognize(words, postags)  # 命名实体识别

print('\t'.join(netags))
recognizer.release()  # 释放模型
打印结果:
S-Nh    O   O   O
依存句法分析
mport os
LTP_DATA_DIR='/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0'  # ltp模型目录的路径
par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`

from pyltp import Parser
parser = Parser() # 初始化实例
parser.load(par_model_path)  # 加载模型

words = ['元芳', '你', '怎么', '看']
postags = ['nh', 'r', 'r', 'v']
arcs = parser.parse(words, postags)  # 句法分析

print(" ".join("%d:%s" % (arc.head, arc.relation) for arc in arcs))
parser.release()  # 释放模型
打印结果:
4:SBV   4:SBV   4:ADV   0:HED
语义角色标注
import os
LTP_DATA_DIR='/home/lizhenlong/pyltp/ltp_data_v3.4.0/ltp_data_v3.4.0'  # ltp模型目录的路径
srl_model_path = os.path.join(LTP_DATA_DIR, 'pisrl_win.model')  # 语义角色标注模型目录路径,模型目录为`srl`。注意该模型路径是一个目录,而不是一个文件。

from pyltp import SementicRoleLabeller
labeller = SementicRoleLabeller() # 初始化实例
labeller.load(srl_model_path)  # 加载模型

words = ['元芳', '你', '怎么', '看']
postags = ['nh', 'r', 'r', 'v']
# arcs 使用依存句法分析的结果
roles = labeller.label(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]))
labeller.release()  # 释放模型
打印结果:
[dynet] random seed: 1676210130
[dynet] allocating memory: 2000MB
[dynet] memory allocation done.
3 A0:(1,1)ADV:(2,2)

例如上面的例子,由于结果输出一行,所以“元芳你怎么看”有一组语义角色。 其谓词索引为3,即“看”。这个谓词有三个语义角色,范围分别是(0,0)即“元芳”,(1,1)即“你”,(2,2)即“怎么”,类型分别是A0、A0、ADV。

角色关系参考:https://ltp.readthedocs.io/zh_CN/latest/appendix.html#id6

猜你喜欢

转载自www.cnblogs.com/spmt/p/12305791.html