中文分词好用的pyhanLP包

HanLP: Han Language Processing
面向生产环境的多语种自然语言处理工具包(由一系列模型与算法组成的Java工具包),基于 TensorFlow 2.0,目标是普及落地最前沿的NLP技术。目前,基于深度学习的HanLP 2.0正处于alpha测试阶段,未来将实现知识图谱、问答系统、自动摘要、文本语义相似度、指代消解、三元组抽取、实体链接等功能。

HanLP有如下功能:

中文分词
词性标注
命名实体识别
依存句法分析
关键词提取新词发现
短语提取
自动摘要
文本分类
拼音简繁

1 安装

pip install pyhanlp

要求Python 3.6以上,支持Windows,可以在CPU上运行,推荐GPU/TPU。

HanLP-doc-zh.zip

参考 pyhanlp的安装与使用

2 使用场景

2.1 分词(中文分词、中文斷詞、英文分词、任意语种分词)

pyhanlp可以自定义多种分词规则和模型,也可以加入自定义词典,经测试,默认的分词方法效果就不错,而且兼备词性标注以及命名实体识别,可以识别人名、地名、机构名等信息。

from pyhanlp import *
sentence = "下雨天地面积水"

# 返回的list中,每个元素是一个分词后的Term对象,可以获取词(word属性)和词性(nature属性)
term_list = HanLP.segment(sentence)  
for term in term_list:
	print(term.word,term.nature)

作为终端用户,第一步需要从磁盘或网络加载预训练模型。比如,此处用两行代码加载一个名为 PKU_NAME_MERGED_SIX_MONTHS_CONVSEG 的分词模型。

import hanlp
tokenizer = hanlp.load('PKU_NAME_MERGED_SIX_MONTHS_CONVSEG')
tokenizer('商品和服务')
# ['商品', '和', '服务']

HanLP 会自动将 PKU_NAME_MERGED_SIX_MONTHS_CONVSEG 解析为一个URL,然后自动下载并解压。由于巨大的用户量,万一下载失败请重试或参考提示手动下载。

2.2 关键词提取与自动摘要

from pyhanlp import *

document = "南非奥委会说,3名的足球队成员中,有两名是足球队员,一名为球队官员,他们均已在东京被隔离。而在南非橄榄球队集训地日本的鹿儿岛,球队教练尼尔·鲍威尔在检测中结果为阳性。" 

# 提取ducument中的3个关键句作为摘要
print(HanLP.extractSummary(document, 3))

2.3 文本分类

pyhanlp自带的文本分类器选用朴素贝叶斯模型,训练语料需要自己收集,这里使用搜狗文本分类语料迷你版

载之后将文件放到pyhanlp包的pyhanlp/static/data/test文件夹下,即:

C:\Anaconda3\Lib\site-packages\pyhanlp\static\data\test
import os
from pyhanlp import SafeJClass
from tests.test_utility import ensure_data

NaiveBayesClassifier=SafeJClass('com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier')
IOUtil = SafeJClass('com.hankcs.hanlp.corpus.io.IOUtil')
sogou_corpus_path = ensure_data('搜狗文本分类语料库迷你版',
     'http://file.hankcs.com/corpus/sogou-text-classification-corpus-mini.zip')

def train_or_load_classifier():
    model_path = sogou_corpus_path + '.ser'
    if os.path.isfile(model_path):
        return NaiveBayesClassifier(IOUtil.readObjectFrom(model_path))
    classifier = NaiveBayesClassifier()
    classifier.train(sogou_corpus_path)
    model = classifier.getModel()
    IOUtil.saveObjectTo(model, model_path)
    return NaiveBayesClassifier(model)

def predict(classifier, text):
    print("《%16s》\t属于分类\t【%s】" % (text, classifier.classify(text)))
    # 如需获取离散型随机变量的分布,请使用predict接口
    # print("《%16s》\t属于分类\t【%s】" % (text, classifier.predict(text)))

if __name__ == '__main__':
    classifier = train_or_load_classifier()
    predict(classifier, "研究生考录模式亟待进一步专业化")
    predict(classifier, "如果真想用食物解压,建议可以食用燕麦")

2.4 情感分析

情感分析和文本分类的默认分类模型一样,也是朴素贝叶斯模型,首先我们需要准备训练数据,这里使用谭松波的酒店评论语料
下载之后将文件放到pyhanlp包的pyhanlp/static/data/test文件夹下,即:

C:\Anaconda3\Lib\site-packages\pyhanlp\static\data\test
from pyhanlp import *
from tests.test_utility import ensure_data

IClassifier=JClass('com.hankcs.hanlp.classification.classifiers.IClassifier')
NaiveBayesClassifier=JClass('com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier')
# 中文情感挖掘语料-ChnSentiCorp 谭松波
chn_senti_corp = ensure_data("ChnSentiCorp情感分析酒店评论", "http://file.hankcs.com/corpus/ChnSentiCorp.zip")

def predict(classifier, text):
    print(text, classifier.classify(text))
    
if __name__ == '__main__':
    classifier = NaiveBayesClassifier()
    #  创建分类器,更高级的功能请参考IClassifier的接口定义
    classifier.train(chn_senti_corp)
    #  训练后的模型支持持久化,下次就不必训练了
    predict(classifier, "前台客房服务态度非常好!早餐很丰富,房价很干净。再接再厉!")
    predict(classifier, "结果大失所望,灯光昏暗,空间极其狭小,床垫质量恶劣,房间还伴着一股霉味。")
predict(classifier, "可利用文本分类实现情感分析,效果不是不行")

2.5 Hanlp.segment的使用

from pyhanlp import *
print HanLP.segment("今天开心了吗?")
# 输出:[今天/t, 开心/a, 了/ule, 吗/y, ?/w]

hanlp词性对照表

a 	形容词
ad 	副形词
ag 	形容词性语素
al 	形容词性惯用语
an 	名形词
b 	区别词
	begin
bg 	区别语素
bl 	区别词性惯用语
c 	连词
cc 	并列连词
d 	副词
dg 	辄,俱,复之类的副词
dl 	连语
e 	叹词
end 	仅用于终##终
f 	方位词
g 	学术词汇
gb 	生物相关词汇
gbc 	生物类别
gc 	化学相关词汇
gg 	地理地质相关词汇
gi 	计算机相关词汇
gm 	数学相关词汇
gp 	物理相关词汇
h 	前缀
i 	成语
j 	简称略语
k 	后缀
l 	习用语
m 	数词
mg 	数语素
Mg 	甲乙丙丁之类的数词
mq 	数量词
n 	名词
nb 	生物名
nba 	动物名
nbc 	动物纲目
nbp 	植物名
nf 	食品,比如“薯片”
ng 	名词性语素
nh 	医药疾病等健康相关名词
nhd 	疾病
nhm 	药品
ni 	机构相关(不是独立机构名)
nic 	下属机构
nis 	机构后缀
nit 	教育相关机构
nl 	名词性惯用语
nm 	物品名
nmc 	化学品名
nn 	工作相关名词
nnd 	职业
nnt 	职务职称
nr 	人名
nr1 	复姓
nr2 	蒙古姓名
nrf 	音译人名
nrj 	日语人名
ns 	地名
nsf 	音译地名
nt 	机构团体名
ntc 	公司名
ntcb 	银行
ntcf 	工厂
ntch 	酒店宾馆
nth 	医院
nto 	政府机构
nts 	中小学
ntu 	大学
nx 	字母专名
nz 	其他专名
o 	拟声词
p 	介词
pba 	介词“把”
pbei 	介词“被”
q 	量词
qg 	量词语素
qt 	时量词
qv 	动量词
r 	代词
rg 	代词性语素
Rg 	古汉语代词性语素
rr 	人称代词
ry 	疑问代词
rys 	处所疑问代词
ryt 	时间疑问代词
ryv 	谓词性疑问代词
rz 	指示代词
rzs 	处所指示代词
rzt 	时间指示代词
rzv 	谓词性指示代词
s 	处所词
t 	时间词
tg 	时间词性语素
u 	助词
ud 	助词
ude1 	的 底
ude2 	地
ude3 	得
udeng 	等 等等 云云
udh 	的话
ug 	过
uguo 	过
uj 	助词
ul 	连词
ule 	了 喽
ulian 	连 (“连小学生都会”)
uls 	来讲 来说 而言 说来
usuo 	所
uv 	连词
uyy 	一样 一般 似的 般
uz 	着
uzhe 	着
uzhi 	之
v 	动词
vd 	副动词
vf 	趋向动词
vg 	动词性语素
vi 	不及物动词(内动词)
vl 	动词性惯用语
vn 	名动词
vshi 	动词“是”
vx 	形式动词
vyou 	动词“有”
w 	标点符号
wb 	百分号千分号,全角:% ‰ 半角:%
wd 	逗号,全角:, 半角:,
wf 	分号,全角:; 半角: ;
wh 	单位符号,全角:¥ $ £ ° ℃ 半角:$
wj 	句号,全角:。
wky 	右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
wkz 	左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
wm 	冒号,全角:: 半角: :
wn 	顿号,全角:、
wp 	破折号,全角:—— -- ——- 半角:— —-
ws 	省略号,全角:…… …
wt 	叹号,全角:!
ww 	问号,全角:?
wyy 	右引号,全角:” ’ 』
wyz 	左引号,全角:“ ‘ 『
x 	字符串
xu 	网址URL
xx 	非语素字
y 	语气词(delete yg)
yg 	语气语素
z 	状态词
zg 	状态词

你可能感兴趣的:(nlp,nlp)