Python社区  »  Elasticsearch

999 - Elasticsearch Analysis 03 - Tokenizer

歌哥 • 1 周前 • 18 次点击  
阅读 3

999 - Elasticsearch Analysis 03 - Tokenizer

Word Oriented Tokenizers

下面的tokenizer主要用来切分文本为单个单词。

Standard Tokenizer

  • 默认的analyzer,适合大多数语言。
  • 根据Unicode Text Segmentation算法的定义,将文本切分成词元。
  • 示例
POST _analyze
{
  "tokenizer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
复制代码

产生[ The, 2, QUICK, Brown, Foxes, jumped, over, the, lazy, dog's, bone ]

  • 配置参数
参数 说明
max_token_length 词元的长度,超过会被分割。默认255。

示例

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "standard",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
复制代码

产生[ The, 2, QUICK, Brown, Foxes, jumpe, d, over, the, lazy, dog's, bone ]

Letter Tokenizer

  • 按非字母的切分。
  • 示例
POST _analyze
{
  "tokenizer": "letter",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
复制代码

产生[ The, QUICK, Brown, Foxes, jumped, over, the, lazy, dog, s, bone ]

Lowercase Tokenizer

  • 相当于letter tokenizer+lowercase token filter
  • 示例
POST _analyze
{
  "tokenizer": "lowercase",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
复制代码

产生[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

Whitespace Tokenizer

  • 按空格切分。
  • 示例
POST _analyze
{
  "tokenizer": "whitespace",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
复制代码
  • 配置参数
参数 说明
max_token_length 词元的长度,超过会被分割。默认255。

UAX URL Email Tokenizer

  • 类似standard tokenizer,只是能够识别邮件地址、URL。
  • 示例
POST _analyze
{
  "tokenizer": "uax_url_email",
  "text": "Email me at john.smith@global-international.com"
}
复制代码

产生[ Email, me, at, john.smith@global-international.com ]

如果是standard tokenizer将产生[ Email, me, at, john.smith, global, international.com ]

  • 配置参数
参数 说明
max_token_length 词元的长度,超过会被分割。默认255。

示例

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer":{
          "type": "uax_url_email",
          "max_token_length": 5
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "john.smith@global-international.com"
}
复制代码

产生[ john, smith, globa, l, inter, natio, nal.c, om ]

Partial Word Tokenizers

这些Tokenizer主要将单词或者文本截取成更小的分段。

N-Gram Tokenizer

  • 指定保留的字符类型(通过参数token_chars指定,默认[]保留所有),以及根据min_gram以及max_gram指定切分时最小几个字符、最大几个字符。

  • 像一个滑动窗口,例如min_gram为1,max_gram为3,对于Quick这个单词,就会变成[ Q, Qu, Qui, u, ui, uic, i, ic, ick, c, ck, k ]。长度越短,切分出来越少,更多的被匹配到质量也越差;长度越长,切分出来越多,匹配越精确。

  • 示例

POST _analyze
{
  "tokenizer": "ngram",
  "text": "Quick Fox"
}
复制代码

产生[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]

  • 配置参数
参数 说明
min_gram 字符的最小长度。默认为1。
max_gram 字符的最大长度。默认为2。
token_chars 字符组见下表。分词时,保留指定的字符组,并根据没有指定的字符组进行切分。例如指定了letter、digit字符组,就会根据whitespace、punctuation、symbol进行切分。
字符组 说明
letter 例如 a, b, ï or 京
digit 例如 3 or 7
whitespace 例如 " " or "\n"
punctuation 例如 ! or "
symbol 例如 $ or √

示例:保留数字,最小长度是1,最大是3。

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer":{
          "type": "ngram"


    
,
          "min_gram": 1,
          "max_gram": 3,
          "token_chars": [
            "digit"
            ]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}
复制代码

产生[ 2 ]

示例:保留数字和字母,最小最大长度都是3。因为数字2长度为1,小于3,所以结果中没有数字,只剩下字母。

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "ngram",
          "min_gram": 3,
          "max_gram": 3,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}
复制代码

产生[ Qui, uic, ick, Fox, oxe, xes ]

Edge N-Gram Tokenizer

  • ngram tokenizer相同,只不过只从单词头开始。例如,min_gram为1,max_gram为3,对于Quick这个单词,就会变成[ Q, Qu, Qui ]
  • 示例

默认配置:token_chars默认为[]保留全部,不拆分也就是Quick Fox作为一整个单词,min_gram为1,max_gram为2

POST _analyze
{
  "tokenizer": "edge_ngram",
  "text": "Quick Fox"
}
复制代码

产生[ Q, Qu ]

配置示例

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter",
            "digit"
          ]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "2 Quick Foxes."
}
复制代码

产生[ Qu, Qui, Quic, Quick, Fo, Fox, Foxe, Foxes ]

Structured Text Tokenizers

适用于结构化文本(例如邮箱、身份证等)

Keyword Tokenizer

  • 原模原样不变。
  • 示例
POST _analyze
{
  "tokenizer": "keyword",
  "text": "New York"
}
复制代码

产生[ New York ]

  • 配置参数
参数 说明
buffer_size 缓冲区大小。默认256。
PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer":{
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "keyword",
          "buffer_size": 2
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_analyzer", 
  "text": "New York"
}
复制代码

产生[ New York ]

Pattern Tokenizer

  • 可以按照正则表达式切分,也可以按照正则表达式提取。

  • 示例

POST _analyze
{
  "tokenizer": "pattern",
  "text": "The foo_bar_size's default is 5."
}
复制代码

产生[ The, foo_bar_size, s, default, is, 5 ]

  • 配置参数
参数 说明
pattern 使用Java正则表达式。默认\W+
flags Java正则表达式flags,多个用|分离,例如"CASE_INSENSITIVE | COMMENTS"。
group 将哪个捕获分组作为词元。默认是 -1,相当于split。

Char Group Tokenizer

  • 根据定义的字符切分。
  • 配置参数
参数 说明
tokenize_on_chars 用来切分的字符。可以使用单个例如-,也可以使用字符组:whitespaceletterdigitpunctuationsymbol
POST _analyze
{
  "tokenizer": {
    "type": "char_group",
    "tokenize_on_chars": [
      "whitespace",
      "-"
    ]
  },
  "text": "The QUICK brown-fox"
}
复制代码

产生[ The, QUICK, brown, fox ]

Simple Pattern Tokenizer

  • 使用Lucene regular expressions捕获文本,比pattern tokenizer受限(pattern tokenizer既可以捕获又可以切分),但是更快。
  • 配置参数
参数 说明
pattern 使用Lucene regular expressions。默认空字符串,不捕获,输出空条件。
POST _analyze
{
  "tokenizer": {
    "type": "simple_pattern",
    "pattern": "[0123456789]{2}"
  },
  "text": "fd-786-335-514-x"
}
复制代码

产生[ 78, 33, 51 ]

Simple Pattern Split Tokenizer

  • 使用Lucene regular expressions切分文本,比pattern tokenizer受限(pattern tokenizer既可以捕获又可以切分),但是更快。
  • 配置参数
参数 说明
pattern 使用Lucene regular expressions。默认空字符串,不切分,整条输出。



    
POST _analyze
{
  "tokenizer": {
    "type": "simple_pattern_split",
    "pattern": "_"
  },
  "text": "an_underscored_phrase"
}
复制代码

产生[ an, underscored, phrase ]

Path Tokenizer

  • 切分类似文件系统路径的值。
  • 示例
POST _analyze
{
  "tokenizer": "path_hierarchy",
  "text": "/one/two/three"
}
复制代码

产生[ /one, /one/two, /one/two/three ]

  • 配置参数
参数 说明
delimiter 路径分隔符。默认/
replacement 分割后用来替换的分隔符。默认与delimiter一致。
buffer_size 缓冲大小。默认1024
reverse true则从相反顺序切分。默认fasle。例如,one/two/three默认情况下切分为[ one, one/two, one/two/three ],设为true,则结果为[ one/two/three, two/three, three ]
skip 跳过多少个。默认0
POST _analyze
{
  "tokenizer": {
    "type": "path_hierarchy",
    "delimiter": "-",
    "replacement": "/",
    "skip": 2
  },
  "text": "one-two-three-four-five"
}
复制代码

产生[ /three, /three/four, /three/four/five ]

设置reversetrue,产生[ one/two/three/, two/three/, three/ ]

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46603
 
18 次点击  
分享到微博