赞
踩
1,安装与设置
1,Ubuntu18.04安装
git clone https://github.com/HIT-SCIR/pyltp
git submodule init
git submodule update
python setup.py install
1.2,win10安装
git clone https://github.com/hit-scir/pyltp # 下载pyltp源码
git clone https://github.com/hit-scir/ltp # 下载ltp
# 已下载的ltp替换pyltp的ltp文件
cd pyltp
python setup.py build
python setup.py install
2,下载模型
下载地址:https://github.com/hit-scir/ltp
3,应用
句子:自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
3.1 分句
>>> from pyltp import SentenceSplitter
>>> sentences = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。\
... 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。"
>>> sents = SentenceSplitter.split(sentences)
>>> sents
<pyltp.VectorOfString object at 0x0000018D23343570>
>>> print('\n'.join(sents))
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
3.2,分词
>>> import os
>>> from pyltp import Segmentor
>>> LTP_DATA_DIR = r"C:\Software\ltp_data_v3.4.0" # ltp模型路径
>>> cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径
>>> segmentor = Segmentor()
>>> segmentor.load(cws_model_path)
>>> sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。"
>>> words = segmentor.segment(sentence)
>>> type(words)
<class 'pyltp.VectorOfString'>
>>> " ".join(words)
'自然 语言 处理 是 计算机 科学 领域 与 人工智能 领域 中 的 一个 重要 方向 。'
>>> segmentor.release()
3.3,使用自定义词典
D:\server\userdict.txt
人工智能
>>> import os
>>> from pyltp import Segmentor
>>> LTP_DATA_DIR = r"C:\Software\ltp_data_v3.4.0" # ltp模型路径
>>> cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径
>>> segmentor = Segmentor()
>>> segmentor.load_with_lexicon(cws_model_path, r'D:\server\userdict.txt')
[INFO] 2019-10-14 13:59:41 loaded 1 lexicon entries
>>> sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。"
>>> words = segmentor.segment(sentence)
>>> type(words)
<class 'pyltp.VectorOfString'>
>>> " ".join(words)
'自然 语言 处理 是 计算机 科学 领域 与 人工智能 领域 中 的 一个 重要 方向 。'
>>> segmentor.release()
3.4,词性标注
>>> import os >>> from pyltp import Postagger >>> from pyltp import Segmentor >>> LTP_DATA_DIR = r"C:\Software\ltp_data_v3.4.0" # ltp模型路径 >>> cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径 >>> pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model') # 词性标注路径 >>> sentence = "自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。" >>> segmentor = Segmentor() # 分词 >>> segmentor.load(cws_model_path) >>> words = list(segmentor.segment(sentence)) >>> words ['自然', '语言', '处理', '是', '计算机', '科学', '领域', '与', \ '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。'] >>> postagger = Postagger() # 词性标注 >>> postagger.load(pos_model_path) >>> postags = postagger.postag(words) >>> list(postags) ['n', 'n', 'v', 'v', 'n', 'n', 'n', 'p', 'n', 'n', 'nd', 'u', 'm', 'a', 'n', 'wp'] >>> segmentor.release() >>> postagger.release()
3.5,命名实体识别
>>> import os
>>> LTP_DATA_DIR = r"C:\Software\ltp_data_v3.4.0"
>>> ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')
>>> from pyltp import NamedEntityRecognizer
>>> recognizer = NamedEntityRecognizer()
>>> recognizer.load(ner_model_path)
>>> words = ['自然', '语言', '处理', '是', '计算机', '科学', '领域', '与', \
... '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']
>>> postags = ['n', 'n', 'v', 'v', 'n', 'n', 'n', 'p', 'n', 'n', 'nd', 'u', 'm', 'a', 'n', 'wp']
>>> nertags = recognizer.recognize(words, postags)
>>> list(nertags)
['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
>>> recognizer.release()
3.6,依存句法分析
>>> import os
>>> from pyltp import Parser
>>> LTP_DATA_DIR = r"C:\Software\ltp_data_v3.4.0"
>>> par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')
>>> parser = Parser()
>>> parser.load(par_model_path)
>>> words = ['自然', '语言', '处理', '是', '计算机', '科学', '领域', '与', \
... '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']
>>> postags = ['n', 'n', 'v', 'v', 'n', 'n', 'n', 'p', 'n', 'n', 'nd', 'u', 'm', 'a', 'n', 'wp']
>>> arcs = parser.parse(words, postags)
>>> print("\t".join("%d:%s" %(arc.head, arc.relation)for arc in arcs))
2:ATT 3:ATT 4:SBV 0:HED 7:ATT 7:ATT 4:VOB 15:LAD
10:ATT 11:ATT 15:ATT 11:RAD 15:ATT 15:ATT 7:COO 4:WP
>>> parser.release()
3.7,语义角色标注
>>> import os >>> LTP_DATA_DIR = r"C:\Software\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])) [dynet] random seed: 1676210130 [dynet] allocating memory: 2000MB [dynet] memory allocation done. 3 A0:(1,1)ADV:(2,2) >>> labeller.release() # 释放模
4,参考链接
4.1 简书
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。