Elasticsearch中文分词之Thulac和IK

一、背景

Elasticsearch(文中简称ES)对于结构化和非结构化的文档来说,一直是受欢迎的NoSQL存储、索引和搜索工具。它的底层实现基于Apache Lucene,将所有信息组织为倒排索引(Inverted Index)的结构形式,倒排索引是一种将词项映射到文档的数据结构,可以把倒排索引理解成面向词项而不是面向文档的数据结构。

无论在创建索引,还是在查询时,都需要进行分词。在ES中通过Analyzer进行分词,可使用ES内置分词器,也可以自定义扩展。

Analyzer是ES中专门处理分词的组件,它由三部分组成:

  • Character Filters:针对原始文本处理。
  • Tokenizer:按照规则切分为单词。
  • Token Filter:将切分的单词进行加工,转为小写,删除stopwords,增加同义词等。

Elasticsearch中文分词之Thulac和IK_第1张图片

图一:分词示例(应用 icu_analyzer 插件分词)

ES有较多内置分词器,但是针对中文分词并不友好,中文分词要按词组,上下文语义分隔,实现起来有很多难点,如:

  • 中文句子要切分为一个一个词,而不是一个一个字。
  • 英文中,单词有空格作为分隔,中文则没有。
  • 在不同的上下文中,有不同的理解。

实现ES中文分词的开源插件有较多,这里介绍IK和THULAC。

二、安装IK

IK分词插件整合了Lucene IK分词器,支持自定义字典和热更新分词字典。安装步骤:

  • 进入到IK主页
  • 选择同ES版本相匹配的IK版本
  • 下载IK版本
  • cd ${ES_HOME}/plugins  && mkdir ik
  • unzip 【IK版本.zip】 到 ${ES_HOME}/plugins/ik
  • 重启ES , cd ${ES_HOME} && ./bin/elasticsearch
  • 利用kibana dev tools测试,analyzer为 ik_smart
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "他说的确实在理,我爱你中国,美丽的蒙娜丽莎的眼泪"
}

 

三、安装Thulac

 Thulac是清华大学自然语言处理和社会人文计算实验室的一套中文分词器。安装步骤:

  • 进入到Github下Thulac
  • 编译打包,截止到当前时间(2021.09.25),thulac打包最新版本是7.9.1,源码内部依赖的也是7.9.1,本实验应用的ES版本是7.15.0,所以下载代码后,需要将源码中依赖的ES版本修改为7.15.0,打包的产出版本也修改为7.15.0,否则启动ES会报版本不兼容的错误。修改文件有2个(build.gradle和plugin-descriptor.properties),修改点如下截图所示:

Elasticsearch中文分词之Thulac和IK_第2张图片

Elasticsearch中文分词之Thulac和IK_第3张图片

 下载&编译:

git clone [email protected]:microbun/elasticsearch-thulac-plugin.git
cd elasticsearch-thulac-plugin
./gradlew release_lite
  • 安装到ES
cp build/distributions/elasticsearch-thulac-plugin-7.15.0.zip ${ES_HOME}/plugins
cd ${ES_HOME}/plugins
unzip elasticsearch-thulac-plugin-7.15.0.zip
rm elasticsearch-thulac-plugin-7.15.0.zip
  • 解压后在plugins下面会有个thulac目录,目录内容:
thulac
 |-elasticsearch-thulac-plugin-7.9.1.jar
 |-models 
 |-plugin-descriptor.properties
 |-plugin.xml
  • 下载模型并拷贝到models
    • 在THULAC 下载模型(lite)
    • 进入到Lite环境,输入个人信息后,即可下载,本文下载:

Elasticsearch中文分词之Thulac和IK_第4张图片

  •     下载后,解压到  ${ES_HOME}/plugins/thulac/models , 文件包括:

  • Elasticsearch中文分词之Thulac和IK_第5张图片
  •  利用kibana dev tools测试,analyzer为 thulac
POST _analyze
{
  "analyzer": "thulac",
  "text": "他说的确实在理,我爱你中国,美丽的蒙娜丽莎的眼泪"
}

四、总结

本文安装了ES中文分词插件IK和Thulac,两者都是开源的实现,用起来各有优劣,不同的环境需要不断调试找到自己适合的分词器。

后续会有文章详细总结下使用两者分词细节配置的差异,以及应用的场景。

你可能感兴趣的:(ES,elasticsearch,自然语言处理)