Press "Enter" to skip to content

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:分词

 

同义词、词根、拼写错误,多语言,拼音这些都是分词要解决的,而算分不是分词解决的。

 

自己也感受了下,分词结合算分不是那幺好理解的,可能需要不断的调试和感知。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注