pyhanlp使用自定义词典进行分词

本文介绍如何在PyHanLP环境下通过自定义词典实现更精准的中文分词,包括创建词典、编辑配置文件、删除缓存及临时添加词汇的方法。
  • ubuntu 18.04.4 LTS
  • python 3.6.9
  • pyhanlp 0.1.66
  • hanlp jar 1.7.8
  • hanlp data 1.7.8

在没有使用自定义词典时:

>>> from pyhanlp import HanLP
>>> print(pyhanlp.HanLP.segment('大数据技术'))
[/a, 数据/n, 技术/n]

可以发现’大’和’数据’被分开了,而我们希望’大数据’是一个词,这时就需要我们自定义词典,将’大数据’放在词典中

通过自定义词典

创建词典

# 为了后面方便,这里我放在pyhanlp的默认字典路径下,其他路径也是可以的
>>> vim /home/microfat/.local/lib/python3.6/site-packages/pyhanlp/static/data/dictionary/custom/my.txt
大数据
数据
据

编辑配置文件

>>> hanlp --version
jar  1.7.8: /home/microfat/.local/lib/python3.6/site-packages/pyhanlp/static/hanlp-1.7.8.jar
data 1.7.8: /home/microfat/.local/lib/python3.6/site-packages/pyhanlp/static/data
config    : /home/microfat/.local/lib/python3.6/site-packages/pyhanlp/static/hanlp.properties

上面输出的最后一行就是config文件的路径
编辑config文件

>>> vim /home/microfat/.local/lib/python3.6/site-packages/pyhanlp/static/hanlp.properties
CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns; my.txt IT;data/dictionary/person/nrf.txt nrf;

词典路径用分号分割,并且一定注意,词典路径前有空格代表与上一个词典在同意目录下.词典后可自定义词性,这里我自定义成IT这个词性

删除缓存文件

>>> rm CustomDictionary.txt.bin 

测试

>>> from pyhanlp import HanLP
>>> print(pyhanlp.HanLP.segment('大数据技术'))
[大数据/IT, 技术/n]

由于最长匹配算法,所以并没有按照词典中的’数据’和’据’进行分词

通过命令

如果只是想临时添加一些词,不想修改文件,可以用下面的方法:

>>> from pyhanlp import HanLP JClass
>>> CustomDictionary = JClass("com.hankcs.hanlp.dictionary.CustomDictionary")
>>> CustomDictionary.add("大数据", "IT 1024")
True
# insert方法会覆盖已经存在的词, add方法会跳过已经存在的词
# CustomDictionary.remove("大数据");
>>> print(CustomDictionary.get('大数据'))
IT 1024
>>> print(HanLP.segment('大数据技术'))
[大数据/IT, 技术/n]

临时添加不会永久修改默认的字典,所以程序关闭后添加的词也就消失了

### 自定义词典实现文本分词的方法 #### 方法概述 为了提高分词准确性,许多自然语言处理工具支持通过自定义词典的方式扩展内置词库。以下是几种常见中文分词工具(如 `jieba` 和 `pkuseg`)中使用自定义词典的具体方法。 --- #### jieba 分词自定义词典实现方式 1. **创建自定义词典文件** 创建一个名为 `userdict.txt` 的文件,并按照指定格式填写词条。每行由三个部分组成:词语、词频和词性(可选)。各部分内容之间用空格隔开[^3]。 示例内容如下: ```txt 创新办 3 i 云计算 5 n 瑟琳娜 10 nz ``` 2. **加载自定义词典** 使用 `jieba.load_userdict()` 函数加载上述词典文件。参数可以是一个字符串形式的路径或者文件对象[^4]。 示例代码: ```python import jieba # 加载自定义词典 jieba.load_userdict("path/to/userdict.txt") # 替换为实际路径 text = "创新办致力于推动云计算的发展" result = jieba.lcut(text) print(result) ``` 3. **验证效果** 对比未加载自定义词典前后的分词结果,确认新增词汇是否被正确识别。 --- #### HanLP自定义词典实现方式 HanLP 提供了一个专门用于存储用户自定义词典的位置。通常位于安装目录下的子路径中: ``` D:\anaconda1\Lib\site-packages\pyhanlp\static\data\dictionary\custom\ ``` 在此位置添加新的 `.txt` 文件作为自定义词典[^2]。同样遵循三列结构(词语、频率、词性),具体操作流程类似于 `jieba`。 示例代码展示如何利用汉语言处理平台完成任务: ```python from pyhanlp import * # 初始化分词器 segmenter = HanLP.newSegment() text = "瑟琳娜是一位研究云计算的技术专家" result = segmenter.seg(text).toString() print(result) ``` 注意:如果需要动态更新内存中的字典而非修改硬盘上的静态资源,则需调用相应 API 接口函数来注册临时条目。 --- #### pkuseg 的自定义词典集成方案 对于更复杂的场景需求来说,推荐采用高性能开源项目——PKUSEG。它允许开发者直接传入列表类型的变量作为外部补充材料的一部分参与计算过程[^5]。 实例演示如下所示: ```python import pkuseg # 定义个性化术语集合 lexicon = ["大数据", "人工智能"] # 构建基于额外输入源的新实例化对象 seg = pkuseg.pkuseg(user_dict=lexicon) sentence = "探讨关于大数据与人工智能之间的关系" output = seg.cut(sentence) print(output) ``` 以上三种主流框架均提供了灵活便捷的功能选项让用户能够轻松定制专属解决方案满足特定业务逻辑的要求。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值