安装和如何使用
PyHanLP 使用指南
Hanlp简介
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。
HanLP主要功能包括分词、词性标注、关键词提取、自动摘要、依存句法分析、命名实体识别、短语提取、拼音转换、简繁转换等等。
Github地址:https://github.com/hankcs/HanLP
官网地址:http://hanlp.linrunsoft.com/
PyHanLP安装
1 |
|
1 |
|
如果下载速度只有几十K,可以尝试这个链接手动下载:http://download.hanlp.com/
可能会报错: ValueError: 配置错误: 数据包 …/Python36/lib/site-packages/pyhanlp/static\data 不存在,请修改配置文件中的root
解决方案:
建议提前准备好data、jar与配置文件,并使用环境变量进行配置
解压之后,放入
pyhanlp
安装目录的static
目录中:1
2
3
4
5
6
7
8
9pyhanlp
├── main.py
└── static
├── data
├── data-for-1.7.5.zip
├── hanlp-1.7.5.jar
├── hanlp.properties
└── hanlp-1.7.5-release.zip保证 hanlp.properties 中的 root 是指向正确的data路径。 比如:
1
2
3
4
5export HANLP_JAR_PATH=/hanlp/hanlp-1.6.0.jar
export HANLP_STATIC_ROOT=/hanlp
tree $HANLP_STATIC_ROOT -L 2
ll $HANLP_JAR_PATH
cat $HANLP_STATIC_ROOT/hanlp.properties | grep rootPS: windows可忽略
使用指南
1.标准分词和词性标注
1 |
|
说明
- HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。
- HanLP.segment其实是对StandardTokenizer.segmen的包装。
- 分词结果包含词性,每个词性的意思请查阅《HanLP词性标注集》。
算法详解
2.依存句法分析
它将句子分析成一颗依存句法树,描述出各个词语之间的依存关系。也即指出了词语之间在句法上的搭配关系,这种搭配关系是和语义相关联的。
1 |
|
算法详解
- HanLP在线句法分析并可视化:http://hanlp.hankcs.com/
南京大学开发的Dependency Viewer的Windows客户端工具
- 下载:DependencyViewer.exe.zip
- 加载CoNLL格式的txt文件
web端推荐conllu.js,斯坦福大学也在用这个
Tag | 关系 | Description | Example |
---|---|---|---|
SBV | 主谓关系 | subject-verb | 我送她一束花 (我 <– 送) |
VOB | 动宾关系 | 直接宾语,verb-object | 我送她一束花 (送 –> 花) |
IOB | 间宾关系 | 间接宾语,indirect-object | 我送她一束花 (送 –> 她) |
FOB | 前置宾语 | 前置宾语,fronting-object | 他什么书都读 (书 <– 读) |
DBL | 兼语 | double | 他请我吃饭 (请 –> 我) |
ATT | 定中关系 | attribute | 红苹果 (红 <– 苹果) |
ADV | 状中结构 | adverbial | 非常美丽 (非常 <– 美丽) |
CMP | 动补结构 | complement | 做完了作业 (做 –> 完) |
COO | 并列关系 | coordinate | 大山和大海 (大山 –> 大海) |
POB | 介宾关系 | preposition-object | 在贸易区内 (在 –> 内) |
LAD | 左附加关系 | left adjunct | 大山和大海 (和 <– 大海) |
RAD | 右附加关系 | right adjunct | 孩子们 (孩子 –> 们) |
IS | 独立结构 | independent structure | 两个单句在结构上彼此独立 |
WP | 标点符号 | punctuation | 标点符号 |
HED | 核心关系 | head | 指整个句子的核心 |
3.关键词提取
1 |
|
4.摘要抽取
1 |
|
5.1感知机词法分析器
1 |
|
说明
- NLP分词NLPTokenizer会执行词性标注和命名实体识别,由结构化感知机序列标注框架支撑。
- 默认模型训练自9970万字的大型综合语料库,是已知范围内全世界最大的中文分词语料库。语料库规模决定实际效果,面向生产环境的语料库应当在千万字量级。用户可以在自己的语料上训练新模型以适应新领域、识别新的命名实体。
5.2 CRF 词法分析器
1 |
|
说明
- 调用更底层的API需要参考Java语法用JClass引入更深的类路径。以感知机词法分析器为例,CRF分词的类位于包名com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer下,先用JClass得到类,然后就可以调用了
- CRF对新词有很好的识别能力,但是开销较大。
算法详解
5.3 极速词典分词
1 |
|
说明
- 调用更底层的API需要参考Java语法用JClass引入更深的类路径。以感知机词法分析器为例,极速字典分词的类位于包名com.hankcs.hanlp.tokenizer.SpeedTokenizer下,先用JClass得到类,然后就可以调用了
- 极速分词是词典最长分词,速度极其快,精度一般。
- 在i7-6700K上跑出了4500万字每秒的速度。
算法详解
6.中国人名识别
1 |
|
说明
- 目前分词器基本上都默认开启了中国人名识别,比如HanLP.segment()接口中使用的分词器等等,用户不必手动开启;上面的代码只是为了强调。
- 有一定的误命中率,比如误命中关键年,则可以通过在data/dictionary/person/nr.txt加入一条关键年 A 1来排除关键年作为人名的可能性,也可以将关键年作为新词登记到自定义词典中。
- 建议NLP用户使用感知机或CRF词法分析器,精度更高。
算法详解
7.音译人名识别
1 |
|
说明
- 目前分词器基本上都默认开启了音译人名识别,用户不必手动开启
算法详解
8.短语提取
1 |
|
9.1 汉字转拼音
1 |
|
9.2 拼音转汉字
1 |
|
10.繁简转换
1 |
|
说明
- HanLP能够识别简繁分歧词,比如打印机=印表機。
- 支持香港繁体和台湾繁体
算法详解
11. 用户自定义词典
1 |
|
说明
- CustomDictionary是一份全局的用户自定义词典,可以随时增删,影响全部分词器。另外可以在任何分词器中关闭它。通过代码动态增删不会保存到词典文件。
- 中文分词≠词典,词典无法解决中文分词,Segment提供高低优先级应对不同场景,请参考FAQ。
追加词典
- CustomDictionary主词典文本路径是data/dictionary/custom/CustomDictionary.txt,用户可以在此增加自己的词语(不推荐);也可以单独新建一个文本文件,通过配置文件CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 我的词典.txt;来追加词典(推荐)。
- 始终建议将相同词性的词语放到同一个词典文件里,便于维护和分享。
词典格式
- 每一行代表一个单词,格式遵从[单词] [词性A] [A的频次] [词性B] [B的频次] … 如果不填词性则表示采用词典的默认词性。
- 词典的默认词性默认是名词n,可以通过配置文件修改:全国地名大全.txt ns;如果词典路径后面空格紧接着词性,则该词典默认是该词性。
算法详解
12. 数词和数量词识别
1 |
|
13. 同义改写
1 |
|
14. 情感分析
1 |
|
15. 聚类
1 |
|
16. 语义距离
1 |
|
说明
- 可以得到给出的词汇之间语义的相似度
- word2vec文档
- 《word2vec原理推导与代码分析》
17. 文本推荐(类似搜索引擎功能)
1 |
|
参考
PyHanLP工具包使用指南
http://example.com/2019/11/13/2019-11-13-PyHanLP使用指南/