社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

999 - Elasticsearch Analysis 03 - Tokenizer

歌哥 • 4 年前 • 397 次点击  
阅读 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
 
397 次点击