当前位置:   article > 正文

【python】pyltp的安装_[info] 2024-04-28 07:57:29 loaded 4 lexicon entrie

[info] 2024-04-28 07:57:29 loaded 4 lexicon entries

1,安装与设置
1,Ubuntu18.04安装

git clone https://github.com/HIT-SCIR/pyltp
git submodule init
git submodule update
python setup.py install
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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))
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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()  # 释放模
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4,参考链接
4.1 简书

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/637533
推荐阅读
相关标签
  

闽ICP备14008679号