elasticsearch-analysis-hanlp中文分词器的一点心得

在搜索项目中,对于中文语境必须选择一个中文分词器,目前选择的是hanlp,选择它来源于官方介绍:
HanLP希望兼顾学术界的精准与工业界的效率,在两者之间取一个平衡,真正将自然语言处理普及到生产环境中去。
1:英语因为有空格分隔,而中文如果不分词,基本上每个单词都会被拆分,这是分词的难点。
我们不是搞学术研究的(也不会),所以拿来应用是最重要的,但能多了解一点原理,对于应用会有帮助。
2:可以通过手动和远程更新自定义词典,但对于我们手动更新就足够了,但如果参数配置不符合规则,不会成功加载词典,而且也不报错,折腾了好一会,所以要好好看文档。
如果不想折腾,核心词典就足够使用了,自定义词典是比较大的。
另外如果配置参数有误,会自动杀死elasticsearch,今天就遇到了。
安装新的插件,需要重新启动elasticsearch,为避免影响线上,专门起了个节点,而且后续有硬盘了,需要单独存储。

3:注意,自定义词典添加新词(比如西五街),以前索引的文档需要 重新
构建索引(分词),所以没有太大的需求,轻易不要添加自定义词。
4:自定义分词配置
如果没有特殊需求,轻易不要动,但如果了解,能更好的使用。
1)是否识别中国人名
enable_name_recognize 默认开启,如果不开启,”张朝阳是sohu公司总裁”就分不出“张朝阳”这个词了。而**这样的核心词,默认就会分词。
2) 是否加载用户自定义词典
enable_custom_dictionary默认开启,比如OrganizationName.txt中包含“BBC报道小组”,则能分词出来;否则会分词出(bbc,报道,小组)
3)日本名识别
enable_japanese_name_recognize 默认是关闭的,不代表日本人名分词

PUT testy
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_hanlp_analyzer": {
          "tokenizer": "my_hanlp"
        }
      },
      "tokenizer": {
        "my_hanlp": {
          "type": "hanlp",

          "enable_custom_config": true,
          "enable_name_recognize":true,
          "enable_organization_recognize":true,
          "enable_japanese_name_recognize":true
        }
      }
    }
  }
}

GET _analyze
{
  "text": "波多野结衣 BBC报道小组",
  "analyzer": "my_hanlp_analyzer"
}

4)地名识别,机构名识别

  • enable_place_recognize,place目录
  • enable_organization_recognize,organization目录

默认都是关闭的,因为大部分词在核心词、自定义词典中都有,同时里面的词很多也不是机构名和地名。
5) 是否识别数字和量词
enable_number_quantifier_recognize默认应该是开启的,但不知道如何测试
6)繁体识别
enable_traditional_chinese_mode默认是关闭的,建议开启。

POST testy/_analyze
{
  "text": "中華人民共和國",
  "analyzer": "my_hanlp_analyzer"
}

5:分词
同义词、词根、拼写错误,多语言,拼音这些都是分词要解决的,而算分不是分词解决的。
自己也感受了下,分词结合算分不是那么好理解的,可能需要不断的调试和感知。