NLP中文分词工具包
Posted 机器学习点数成金
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP中文分词工具包相关的知识,希望对你有一定的参考价值。
导语
分词属于中文自然语言处理的技术范畴,是其它中文信息处理的基础。中文分词是指将一个汉字序列切分成一个个单独的词的过程,将连续的字序列按照一定的规范重新组合成词序列的过程。本文主要对中文自然语言处理中常用的开源分词工具进行整理、汇总,包括jieba、NLPIR、THULAC、pkuseg、HITLTP及HanLP,所有工具都已在Github上开源,后续会附上相应链接。
1jieba
jieba分词是目前国内使用最多的中文分词工具,是基于Python技术的中文分词库,jieba提供了三种分词模式:精确模式、全模式和搜索引擎模式。
安装
pip install jieba
分词模式示例
jieba.cut方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型(HMM可识别未登录词)。
# 导入jieba分词包
import jieba
# 默认为精确模式,将句子最精确的切分,适合做文本分析
text1 = ' '.join(jieba.cut('我来到北京清华大学'))
print('【精确模式】:',text1)
# 全模式,cut_all=True
# 能够将句子中所有可以成词的词语都扫描出来,速度非常快,但无法解决歧义
text2 = ' '.join(jieba.cut('我来到北京清华大学',cut_all=True))
print('【全模式】:',text2)
# 搜索引擎模式,在精确的基础上对长词再切分,提高召回率,适合用于搜索引擎分词
text3 = ' '.join(jieba.cut_for_search('我来到北京清华大学'))
print('【搜索引擎模式】:',text3)
三种模式分词结果:
【精确模式】: 我 来到 北京 清华大学
【全模式】: 我 来到 北京 清华 清华大学 华大 大学
【搜索引擎模式】:我 来到 北京 清华 华大 大学 清华大学
用户自定义词典
对于jieba词库中没有的词,支持用户指定自定义词典,对于专有名词较多的语料而言可以大大提高分词准确率。
# add_word方法添加单个词,包含三个参数:词、词频(可省略)、词性(可省略)
jieba.add_word('云计算',20,n)
# load_userdict方法词典以文件形式添加多个词
# 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略)
jieba.load_userdict('userdict.txt')
# 添加结果
云计算 20 n
创新办 3 i
# 添加自定义词库之前
李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家
# 添加自定义词库之后
李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家
除分词功能外,jieba还可进行词性标注、关键词提取等,具体使用可自行尝试。
2中科院NLPIR(ictclas)
NLPIR是由中科院计算所张华平博士经十余年不断开发完善的中文分词系统,拥有强大丰富的功能,主要包括中英文分词、词性标注、命名实体识别、新词识别、关键词提取、支持用户专业词典与微博分析。
在线演示demo:http://ictclas.nlpir.org/nlpir/
安装
1. pip install pynlpir
2. 下载组合包编译,功能强大但安装困难
分词示例
# 接口参数
pynlpir.segment(s, pos_tagging=True, pos_names='parent', pos_english=True)
S: 句子
pos_tagging:是否进行词性标注
pos_names:显示词性的父类(parent)还是子类(child) 或者全部(all)
pos_english:词性显示英语还是中文
import pynlpir
# 启动pynlpir分词器
pynlpir.open()
pynlpir.segment('我爱北京天安门')
[('我', 'pronoun'), ('爱', 'verb'), ('北京', 'noun'), ('天安门', 'noun')]
添加自定义词典
from ctypes import c_char_p
# 添加单个字典,返回1表示添加成功
pynlpir.nlpir.AddUserWord(c_char_p("北京天安门".encode()))
# 以文件形式添加字典
nlpir.ImportUserDict(dict_path)
3清华THULAC
THULAC (THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。
在线演示demo:http://thulac.thunlp.org/demo
安装
1. pip install thulac(自带模型文件)
2. 从github下载(需下载模型文件)
将thulac文件放到目录下,通过 import thulac 来引用
thulac需要模型的支持,需要将下载的模型放到thulac目录下。
分词示例
# 接口参数
thulac(user_dict=None,model_path=None, T2S=False, seg_only=False, filt=False, deli='_') 初始化程序,进行自定义设置
user_dict 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
T2S 默认False, 是否将句子从繁体转化为简体
seg_only 默认False, 时候只进行分词,不进行词性标注
filt 默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
model_path 设置模型文件所在文件夹,默认为models/
deli 默认为‘_’, 设置词与词性之间的分隔符
# 导入thulac
import thulac
thu1 = thulac.thulac() #默认模式
thu1.cut("我爱北京天安门", text=True) #对一句话进行分词,text 默认为False, 是否返回文本,不返回文本则返回一个二维数组([[word, tag]..]),seg_only模式下tag为空字符。
'我_r 爱_v 北京_ns 天安门_ns'
# 只进行分词,不进行词性标注
thu2=thulac.thulac(seg_only=True)
thu2.cut("我爱北京天安门", text=True)
'我 爱 北京 天安门'
# 对input.txt文件内容进行分词,输出到output.txt
thu3.cut_f("input.txt", "output.txt")
4北大pkuseg
pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。它简单易用,支持多领域分词,在不同领域的数据上都大幅提高了分词的准确率。
安装
1. pip install pkeseg(自带模型文件)
2. 从github下载(需下载模型文件)
将pkuseg文件放到目录下,通过import pkuseg使用
分词示例
import pkuseg
# 以默认配置加载模型,不明确分词领域时使用
seg = pkuseg.pkuseg()
seg.cut('我爱北京天安门')
['我', '爱', '北京', '天安门']
# 细领域分词,用户明确分词领域
# 程序会自动下载所对应的细领域模型
seg = pkuseg.pkuseg(model_name='medicine')
seg.cut('慢阻肺与慢性支气管炎和肺气肿有密切关系。')
['慢阻', '肺', '与', '慢性', '支气管炎', '和', '肺气肿', '有', '密切', '关系', '。']
用户自定义词典
import pkuseg
seg = pkuseg.pkuseg(user_dict='my_dict.txt') # 给定用户词典为当前目录下的"my_dict.txt"
seg.cut('我爱北京天安门') # 进行分词
['我', '爱', '北京天安门'] # 词典中包含'北京天安门'
除上述功能外,pkuseg还支持对文件分词(可设置多进程)、词性标注、支持用户自训练模型等,详细信息可参考https://github.com/lancopku/PKUSeg-python。
5哈工大HIT LTP
LTP(Language Technology Platform)是哈尔滨工业大学开发的中文自然语言处理工具。目前最新版本是3.4.0,代码开源,商业使用付费。LTP支持中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注(中文)等。
在线演示demo:http://www.ltp-cloud.com/
安装
pip install pyltp;下载模型文件:http://ltp.ai/download.html
分词示例
from pyltp import Segmentor
s='我来到北京清华大学'
# 启动分词器
segmentor=Segmentor()
# 加载下载好的分词模型
segmentor.load('./cws.model')
result = list(segmentor.segment(s))
['我', '来到', '北京', '清华大学']
命名实体识别、依存句法分析、语义角色标注等使用方法参考在线文档(http://ltp.ai/docs/index.html)。
6HanLP
HanLP(汉语言处理包)是一款开源的使用Java进行开发的中文自然语言处理工具,支持python调用,提供的功能包括中文分词、词性标注、命名实体识别、依存句法分析、自动摘要、拼音转换等。
在线演示demo:http://hanlp.com/
安装
pip install pyhanlp;下载数据文件(词典和模型)放在./site-packages/
分词示例
from pyhanlp import HanLP
print(HanLP.segment('你好,欢迎在Python中调用HanLP的API'))
[你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1, API/nx]
# 获取单词与词性
for term in HanLP.segment('你好,欢迎在python中调用HanLP的API'):
print('{}\t{}'.format(term.word,term.nature))
你好 vl
, w
欢迎 v
在 p
python nx
中 f
调用 v
HanLP nx
的 ude1
API nx
添加自定义词典
# 单个插入
from pyhanlp import *
CustomDictionary = JClass("com.hanks.hanlp.dictionary.CustomDictionary")
# 动态增加
CustomDictionary.add("攻城狮")
# 强行插入
CustomDictionary.insert("白富美", "nz 1024")
# 删除词语
CustomDictionary.remove("攻城狮");
# 展示该单词词典中的词频统计
print(CustomDictionary.get("白富美"))
# 以文件形式添加,每行为词、词性(默认为n)、词频
# 找到 ../site-packages/pyhanlp/static/hanlp.properties文件,
# 在CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt;路径下添加自己的词典,如:我的词典.txt;
更多功能详细操作详见官方文档http://hanlp.linrunsoft.com/。
结语
上述介绍的每个分词工具均有自身优势及特色,因此在选择使用何种分词工具时应综合考虑具体任务的需求和特点。
以上是关于NLP中文分词工具包的主要内容,如果未能解决你的问题,请参考以下文章