Skip to content
hankcs edited this page Oct 13, 2019 · 20 revisions

FAQ

这里收录了一些常见问题,在盲目发issue之前,请善用CTRL+F来寻找你感兴趣的问题,其很有可能就在下面。社区不再回复重复的提问,谢谢合作。


为什么修改了词典还是没有效果?

  • 修改了任何词典都必须删除缓存才能生效,请仔细阅读文档!
  • 请遵循首页文档HanLP词典格式,目前该txt格式不支持含有空格的词条,csv才支持
  • 算法不保证词典中的词语一定分出来,世界上不存在这样的算法。很多人不理解这个问题,以为用户词典中的词语一定会分出来。事实上,这个需求是自相矛盾的,稍微思考一下就能明白。假如用户词典中一共3个词语:商品和服服务,那么“商品和服务”到底怎么分才能满足这些用户呢?无论怎么分词,这3个词语都不可能同时出现。
  • 中文分词≠词典,词典无法解决中文分词。也许你以为往词典中添加“川普”,并且用户词典优先级最高的话,就可以解决眼前的“普京与川普 通话”这个句子。但在你没注意到的地方,有更多类似“四川普通话”“银川普通高考”“唐纳德·川普”(本该是一个词)的句子会发生错误。HanLP坚持的是以统计为主,规则词典为辅的思路,力争做到即使用户加入“川普”这样的词条,仍然能区分“四川普通人”这样的效果。
  • v1.3.5之后有一个com.hankcs.hanlp.seg.Segment#enableCustomDictionaryForcing方法,可在充分理解上述几点之后开启。

为什么自定义词典加载失败?

  • 参考上一个问题。
  • 词语、词性、词频之间的分隔符为空格,所以词语本身不能含有空格,否则词语的某个部分会被视作词性,引发上一个问题。如果你的词语包含空格,用.csv作为词典的文件名后缀。

官网演示与本地运行结果不同?

为什么加载我自己训练的CRF++模型失败了?

HanLP只兼容文本格式的CRF++模型,只有文本才是世界通用的,这是最初的设计宗旨之一。请阅读《CRF++模型格式说明》以了解如何训练文本格式的CRF++模型。

分词器是按最长词切分的吗?可以配置吗?

  1. 请先学习“词典分词”与“统计模型分词”的区别(必须)!
  2. HanLP中有许多分词器,实现了几乎所有的分词算法 image其中一些是前者,一些是后者,可以从继承关系区别
  3. 所以不要用“最大词”“最长词”之类的描述以偏概全,两大类分词器的原理完全不同。
  4. 如果你能区分“词典分词”与“统计模型分词”的话,那么你的问题就全明白了。否则,我只能简单地告诉你,词典分词是按最长词,统计分词可以调整模型来达到你的目的。

配置文件太麻烦了,我也不懂什么是classpath

  1. 这是Java程序员的基础
  2. 多种方式,请挑一个。
  3. https://github.com/hankcs/HanLP/issues/419

为什么某某分词器可以分出这个词而某某分词器不能?为什么不能按我的分词标准来?

  1. 分词标准取决于语料库标准,在开发分词器之前就一切都确定了。
  2. HanLP附带了训练工具,欢迎按你的标准自备语料,然后用此工具训练。

有没有客服?QQ群?

  1. 没有,所有人都是平等的。
  2. https://github.com/hankcs/HanLP/issues/445

Solr\ElasticSearch集成报错、自定义词典、停用词?

  1. 我只开发过Lucene插件。Solr\ElasticSearch理论上应该基于Lucene。
  2. 但其他插件作者可能有自己的实现,并没有调用HanLP的自定义词典、停用词功能。所以推荐不依赖插件,直接用Lucene\Solr\ES自带的filter机制实现停用词。
  3. 这实际上是一种业务逻辑的分离,分词和过滤本来就应该是两个不同的业务。既然Lucene官方都是将其分离开来,我们为何要越俎代庖呢?
  4. 不过我可以提供额外帮助,只需你fork一份,用JUnit复现你的问题,提供友好的开发测试环境。

项目打包,如何把hanlp.properties打包进jar?

https://github.com/hankcs/HanLP/issues/448

自定义词典报错java.lang.NumberFormatException: For input string

https://github.com/hankcs/HanLP/issues/444

某个句子分词结果错误

  1. 可以通过增删改BiGram、CoreDictionary相应词条纠正错误。这种纠正方式类似于一种“增量训练”,对统计模型的破坏最小。
  2. 参考实例:https://github.com/hankcs/HanLP/issues/384

人名、地名、机构名识别错误

https://github.com/hankcs/HanLP/issues/407

如何把自己的词典打包进Portable的jar包?如何替换jar包中的词典?

  1. HanLP已经留有完善的IO接口、配置文件,不推荐使用如此丑陋的方法破坏类库的完整性。
  2. 一意孤行的用户请参考如下资料:
  3. https://github.com/hankcs/HanLP/issues/380
  4. https://github.com/hankcs/HanLP/issues/182

如何读取jar包中的文件?

  1. 实现com.hankcs.hanlp.corpus.io.IIOAdapter接口即可在不同的平台(HDFS、Redis等)上运行HanLP
  2. 这些“平台”包括且不限于jar包,如果你写一个TapeIOAdapter,你甚至可以从磁带中加载HanLP的data。

默认的停用词过滤器不满意

  1. 参考com.hankcs.demo.DemoStopWord写个自己的FILTER就行了。
  2. https://github.com/hankcs/HanLP/issues?utf8=%E2%9C%93&q=filter

同义词\语义距离算法原理

  1. https://github.com/hankcs/HanLP/issues/468
  2. https://github.com/hankcs/HanLP/issues/91
Clone this wiki locally