一,下载 ltp 模型 ltp_data_v3.4.0、pyltp
1,ltp模型下载地址如下:
https://download.youkuaiyun.com/download/TFATS/12758993
2,下载pyltp如下:
pip install pyltp
二,ltp
1,什么是ltp
语言技术平台(Language Technology Platform,LTP)提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。从应用角度来看,LTP 为用户提供了下列组件:
- 针对单一自然语言处理任务,生成统计机器学习模型的工具
- 针对单一自然语言处理任务,调用模型进行分析的编程接口
- 系统可调用的,用于中文语言处理的模型文件
- 针对单一自然语言处理任务,基于云端的编程接口
LTP 是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP 制定了基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块 (包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口,可视化工具,并且能够以网络服务(Web Service)的形式进行使用。
LTP 系统框架图如下所示:

2,注意事项
1)注意版本对应
请确保下载的模型版本与当前版本的 pyltp 对应,否则会导致程序无法正确加载模型。
2)注意编码
pyltp 的所有输入的分析文本和输出的结果的编码均为 UTF-8。
如果您以非 UTF-8 编码的文本输入进行分析,结果可能为空。请注意源代码文件的默认编码。
由于 Windows 终端采用 GBK 编码显示,直接输出 pyltp 的分析结果会在终端显示为乱码。您可以将标准输出重定向到文件,以 UTF8 方式查看文件,就可以解决显示乱码的问题。
三,分句子
# 分句子
from pyltp import SentenceSplitter
sents = SentenceSplitter.split('元芳你怎么看?我就趴窗口上看呗!') # 分句
print ('\n'.join(sents))
# -------output--------
元芳你怎么看?
我就趴窗口上看呗!
四,分词
import os
from pyltp import Segmentor
LTP_DATA_DIR = './ltp_data_v3.4.0' # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径,模型名称为`cws.model`
segmentor = Segmentor() # 初始化实例
segmentor.load(cws_model_path) # 加载模型
word1 = segmentor.segment('中信建投证券投资有限公司') # 分词
word2 = segmentor.segment('中信今天投资了一款游戏') # 分词
print(type(word1))
print ('\t'.join(word1))
print ('\t'.join(word2))
segmentor.release() # 释放模型
# -------output--------
<class 'pyltp.VectorOfString'>
中信 建投 证券 投资 有限公司
中信 今天 投资 了 一 款 游戏
五,分词-外部词典 (只能处理小于5个字的词典)
1,自定义词典
pyltp 分词支持用户使用自定义词典。分词外部词典本身是一个文本文件(plain text),每行指定一个词,编码同样须为 UTF-8,样例如下所示:
# ./substantive_word.txt
中信建投
资有限公司
一款游戏
一款
2,分词-外部词典
import os
from pyltp import Segmentor
LTP_DATA_DIR = './ltp_data_v3.4.0' # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model') # 分词模型路径,模型名称为`cws.model`
segmentor = Segmentor() # 初始化实例
segmentor.load_with_lexicon(cws_model_path, './substantive_word.txt') # 加载模型,第二个参数是您的外部词典文件路径
word1 = segmentor.segment('中信建投证券投资有限公司') # 分词
word2 = segmentor.segment('中信今天投资了一款游戏') # 分词
print ('\t'.join(word1))
print ('\t'.join(word2))
segmentor.release

最低0.47元/天 解锁文章
1738





