刚开始接触 hanlp2,有些词典问题请教

第一次使用 hanlp2,目前主要出于技术调研阶段,对相关技术并不是太了解。
有几个问题需要咨询一下,望大佬给解答一下,搜索后也没发现太具体的结果。

PKU_NAME_MERGED_SIX_MONTHS_CONVSEG 模型的自定义词典是使用如下方式吗?
先通过 trie.update({‘自定义’: ‘custom’, ‘词典’: ‘dict’, ‘聪明人’: ‘smart’})导入词典
然后通过
tokenizer = hanlp.pipeline()
.append(split_sents, output_key=(‘parts’, ‘offsets’, ‘words’), trie=trie)
.append(tokenizer, input_key=‘parts’, output_key=‘tokens’)
.append(merge_parts, input_key=(‘tokens’, ‘offsets’, ‘words’), output_key=‘merged’)
将词典进行加载。

2.0字典的格式是啥样的?这里的的自定义词典格式具体是什么含义?
如果有上百万的词典是否也是通过这种方式写入?
或者是否有关于自定义词典更加详细一点的说明?因为我们作为应用使用者可能对相应的一些行内规则并不是特别了解。

是的,但不仅仅是。

在这个例子里,dict就是格式,键是词条,值是任何类型对象,视你的业务逻辑所需。但不仅仅是。

是,hashmap驱动的trie树查询复杂度与词条数无关,内存复杂度较高。但不仅仅是。

HanLP的目标不是把业务逻辑做进去,让程序员无事可做;而是做一个在算法和设计上领先的项目。像自定义词典这种与下游业务密切相关的东西,不是HanLP关注的层面。HanLP已经通过pipeline机制约定好接口,任意函数都可作为pipeline的一级,下游聪明的业务员通过任意函数(包括但不限于demo中提供的trie树合并函数、正则表达式等)实现任意业务逻辑(自定义词典合并、各种优先级的词典)。

如果将这种分层设计视作操作系统生态的话,HanLP就是Linux内核,包括自定义词典在内的下游业务逻辑相当于用户界面。很明显Linus是不会去做用户界面、软件发行的事情,要不然Ubuntu的公司就没事干了。

3 Likes

明白了,多谢解答。