一、环境
win10,python 3.6,vs2017
二、离线安装
pip install pyltp未安装成功
1、下载:
https://github.com/hit-scir/pyltp
https://github.com/hit-scir/ltp
2、将下载后的ltp文件夹,复制并覆盖pyltp文件夹里面的ltp文件夹
3、cd到pyltp文件夹
执行:
python setup.py build(需要较长时间)
python setup.py install
在cmd中 pip list 可查看是否安装成功
三、下载ltp模型(3.4.0)
ltp_data_v3.4.0.zip
解压后1G多
四、使用
import os
from pyltp import NamedEntityRecognizer
from pyltp import Segmentor
from pyltp import Postagger
ROOT_PATH = "D:/model/ltp-model/ltp_data_v3.4.0/"
# LTP 采用 BIESO 标注体系。
# B 表示实体开始词,I表示实体中间词,E表示实体结束词,S表示单独成实体,O表示不构成命名实体。
# LTP 提供的命名实体类型为:人名(Nh)、地名(Ns)、机构名(Ni)。
# B、I、E、S位置标签和实体类型标签之间用一个横线 - 相连;O标签后没有类型标签。
# https://pyltp.readthedocs.io/zh_CN/latest/api.html#id21
def ltp_ner(sentence):
print("句子长度:{0}".format(len(sentence)))
seg_model = os.path.join(ROOT_PATH,"cws.model")
pos_model = os.path.join(ROOT_PATH,"pos.model")
ner_model = os.path.join(ROOT_PATH,"ner.model")
# 分词
segmentor = Segmentor()
segmentor.load(seg_model)
words = segmentor.segment(sentence)
segmentor.release()
word_list = list(words)
print(word_list)
# 词性标注
postagger = Postagger()
postagger.load(pos_model)
postags = postagger.postag(words)
postagger.release()
# 实体识别
recognizer = NamedEntityRecognizer()
recognizer.load(ner_model)
netags = recognizer.recognize(words,postags)
recognizer.release()
tag_list = list(netags)
print(tag_list)
# 人名
nh_list = []
# 地名
ns_list = []
# 机构名
ni_list = []
flag = False
entity = ""
for i,tag in enumerate(tag_list):
# 单独实体
if tag[0] == 'S':
tag_type = tag.split('-')[1]
if tag_type == 'Nh':
nh_list.append(word_list[i])
if tag_type == 'Ns':
ns_list.append(word_list[i])
if tag_type == 'Ni':
ni_list.append(word_list[i])
# 非单独实体
if tag[0] == 'B':
flag = True
entity += word_list[i]
if tag[0] == 'I':
entity += word_list[i]
if tag[0] == 'E':
entity += word_list[i]
tag_type = tag.split('-')[1]
if tag_type == 'Nh':
nh_list.append(entity)
if tag_type == 'Ns':
ns_list.append(entity)
if tag_type == 'Ni':
ni_list.append(entity)
flag = False
entity = ""
print(nh_list)
print(ns_list)
print(ni_list)
if __name__ == "__main__":
sentence = "《流浪地球》是由中国电影股份有限公司、北京京西文化旅游股份有限公司、北京登峰国际文化传播有限公司、郭帆文化传媒(北京)有限公司出品的科幻片,由郭帆执导,吴京特别出演,屈楚萧、李光洁、吴孟达、赵今麦领衔主演。该片于2019年2月5日(农历大年初一)在中国内地上映。"
ltp_ner(sentence)
结果:
['《', '流浪', '地球', '》', '是', '由', '中国', '电影', '股份', '有限公司', '、', '北京', '京西', '文化', '旅游', '股份', '有限公司', '、', '北京
', '登峰', '国际', '文化', '传播', '有限公司', '、', '郭帆', '文化', '传媒', '(', '北京', ')', '有限公司', '出品', '的', '科幻片', ',', '由', '郭帆', '执导', ',', '吴', '京', '特别', '出演', ',', '屈楚萧', '、', '李光洁', '、', '吴孟达', '、', '赵今麦', '领衔', '主演', '。', '该片', '于
', '2019年', '2月', '5日', '(', '农历', '大年初一', ')', '在', '中国', '内地', '上映', '。']
['O', 'O', 'O', 'O', 'O', 'O', 'B-Ni', 'I-Ni', 'I-Ni', 'E-Ni', 'O', 'B-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'E-Ni', 'O', 'B-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'E-Ni', 'O', 'B-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'I-Ni', 'E-Ni', 'O', 'O', 'O', 'O', 'O', 'S-Nh', 'O', 'O', 'S-Nh', 'O', 'O', 'O', 'O', 'S-Nh', 'O', 'S-Nh', 'O', 'S-Nh', 'O', 'S-Nh', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'S-Ns', 'O', 'O', 'O']
['郭帆', '吴', '屈楚萧', '李光洁', '吴孟达', '赵今麦']
['中国']
['中国电影股份有限公司', '北京京西文化旅游股份有限公司', '北京登峰国际文化传播有限公司', '郭帆文化传媒(北京)有限公司']
五、参考:
安装:
https://blog.csdn.net/weixin_40899194/article/details/79702468
词性:
https://ltp.readthedocs.io/zh_CN/latest/appendix.html#id4
使用方法:
https://pyltp.readthedocs.io/zh_CN/latest/api.html#id21
下载: