1、文本分析与分词

文本分析(Analysis)是把全文本转换一系列单词(term/token)的过程,也称为分词。

当一个文档被索引时,每个Term都可能会创建一个倒排索引。倒排索引的过程就是将文档通过分词器(Analyzer)分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。

2、分析器组成

分析器(Analyzer)都由三部分组成的:character filters, tokenizers, token filters。

2.1、字符过滤器(character filter )

在一段文本进行分词之前,先进行预处理,比如说最常见的就是过滤html标签。

2.2、分词器(tokenizers)

英文分词可以根据空格将单词分开,而中文分词比较复杂,可以采用机器学习算法来分词。

2.3、Token过滤器(token filters)

将切分的单词进行加工,例如:大小写转换,去掉词等。

三者顺序:Character Filters--->Tokenizer--->Token Filter

三者个数:analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)

3、Elasticsearch的内置分词器

Standard Analyzer - 默认分词器,按词切分,小写处理

Simple Analyzer - 按照非字母切分(符号被过滤), 小写处理

Stop Analyzer - 小写处理,停用词过滤(the,a,is)

Whitespace Analyzer - 按照空格切分,不转小写

Keyword Analyzer - 不分词,直接将输入当作输出

Patter Analyzer - 正则表达式,默认W+(非字符分割)

Language - 提供了30多种常见语言的分词器

Customer Analyzer 自定义分词器

4、Elasticsearch的内置分词器用法

4.1、生成索引:

curl -X PUT -H 'Content-Type: application/json' 'localhost:9200/my_index'

4.2、分词API:

curl 'localhost:9200/my_index/_analyze?pretty'  -H 'Content-Type: application/json' -d '{
  "analyzer": "standard",
  "text": "Hello World!"
}'

4.3、分词结果:

{
  "tokens" : [
    {
      "token" : "hello",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "world",
      "start_offset" : 6,
      "end_offset" : 11,
      "type" : "<ALPHANUM>",
      "position" : 1
    }
  ]
}

标签: none

添加新评论