一、看到相关教程,有一个添加字典的方法,亲测无效:
1 # -*- coding:utf-8 -*- 2 # Author:hankcs 3 # Date: 2018-05-24 22:11 4 # 《自然语言处理入门》2.2.2 词典的加载 5 # 配套书籍:http://nlp.hankcs.com/book.php 6 # 讨论答疑:https://bbs.hankcs.com/ 7 from pyhanlp import * 8 9 10 def load_dictionary(): 11 """ 12 加载HanLP中的mini词库 13 :return: 一个set形式的词库 14 """ 15 IOUtil = JClass('com.hankcs.hanlp.corpus.io.IOUtil') 16 path = HanLP.Config.CoreDictionaryPath.replace('.txt', '.mini.txt') 17 print(path) 18 dic = IOUtil.loadDictionary([path]) 19 return set(dic.keySet()) 20 21 22 if __name__ == '__main__': 23 dic = load_dictionary() 24 print(len(dic)) 25 print(list(dic)[0])
其实也不是没有效果,运行这个代码,是可行的,但是换到自定义的字典就无效,稍后解释其中的原因。
二:解决办法:
第一步:
更改hanlp.properties文件配置:
值得注意的是:
1 CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf;data/dictionary/Tinghua/animal.txt nz; area.txt ns; car.txt nz; chengyu.txt nz; finance.txt nf; food.txt nz; history_people.txt nr; it.txt nz; law.txt nz; medical.txt nz; poem.txt nz;
同一路径,只用分号空格相隔,不同路径,需要重新写
然后删除CustomDictionary.txt.bin文件
删除之后,在运行就可以了
同时要注意,字典有个格式,一定是空格间隔,千万不要有\t间隔。
总结:解释原因
为什么官网给的就可以用,而我们自定义的就不能用了呢?
主要原因是他已经配置过了,所以才可以用,只要按照上面的路数,走一遍,就也可以了。
这里还有一些动态的方法:
1 def demo_custom_dictionary(text): 2 """ 演示用户词典的动态增删 3 TO-DO: 4 DoubleArrayTrie分词 5 首字哈希之后二分的trie树分词 6 7 [攻城/vi, 狮/ng, 逆袭/nz, 单身/n, 狗/n, ,/w, 迎娶/v, 白富美/nr, ,/w, 走上/v, 人生/n, 巅峰/n] 8 [攻城狮/nz, 逆袭/nz, 单身狗/nz, ,/w, 迎娶/v, 白富美/nz, ,/w, 走上/v, 人生/n, 巅峰/n] 9 """ 10 #print(HanLP.segment(text)) 11 12 #CustomDictionary = JClass("com.hankcs.hanlp.dictionary.CustomDictionary") 13 #CustomDictionary.add("Android图片处理") # 动态增加 14 # CustomDictionary.insert("白富美", "nz 1024") # 强行插入 15 # #CustomDictionary.remove("攻城狮"); # 删除词语(注释掉试试) 16 # CustomDictionary.add("单身狗", "nz 1024 n 1") 17 # #print(CustomDictionary.get("单身狗")) 18 print(HanLP.segment(text))