HanLP: Han Language Processing
面向生产环境的多语种自然语言处理工具包(由一系列模型与算法组成的Java工具包),基于 TensorFlow 2.0,目标是普及落地最前沿的NLP技术。目前,基于深度学习的HanLP 2.0正处于alpha测试阶段,未来将实现知识图谱、问答系统、自动摘要、文本语义相似度、指代消解、三元组抽取、实体链接等功能。
HanLP有如下功能:
中文分词
词性标注
命名实体识别
依存句法分析
关键词提取新词发现
短语提取
自动摘要
文本分类
拼音简繁
pip install pyhanlp
要求Python 3.6以上,支持Windows,可以在CPU上运行,推荐GPU/TPU。
HanLP-doc-zh.zip
参考 pyhanlp的安装与使用
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,然后自动下载并解压。由于巨大的用户量,万一下载失败请重试或参考提示手动下载。
from pyhanlp import *
document = "南非奥委会说,3名的足球队成员中,有两名是足球队员,一名为球队官员,他们均已在东京被隔离。而在南非橄榄球队集训地日本的鹿儿岛,球队教练尼尔·鲍威尔在检测中结果为阳性。"
# 提取ducument中的3个关键句作为摘要
print(HanLP.extractSummary(document, 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, "如果真想用食物解压,建议可以食用燕麦")
情感分析和文本分类的默认分类模型一样,也是朴素贝叶斯模型,首先我们需要准备训练数据,这里使用谭松波的酒店评论语料
下载之后将文件放到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, "可利用文本分类实现情感分析,效果不是不行")
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 状态词