词元生成器

词元生成器 #

词元生成器接收字符流,并将文本拆分为单个词元。一个词元由一个词条(通常是一个单词)以及关于该词条的元数据组成。例如,词元生成器可以根据空白字符来拆分文本,这样文本 Actions speak louder than words. 就会被拆分为 [Actions, speak, louder, than, words.]。

词元生成器的输出是一个词元流。词元生成器还会维护关于以下词元的元数据:

  • 每个词元的顺序或位置:此信息用于单词和短语邻近查询。
  • 词元在文本中的起始和结束位置(偏移量):此信息用于高亮显示搜索词。
  • 词元类型:一些词元生成器(例如standard词元生成器)会按类型对词元进行分类,例如 <ALPHANUM><NUM>。较简单的分词器(例如 letter 词元生成器)仅将词元分类为单词类型 word

你可以使用词元生成器来定义自定义分词器。

内置的词元生成器 #

以下表格列出了 Easysearch 所提供的内置词元生成器。

单词词元生成器 #

单词词元生成器会将完整的文本解析成一个个单词。

词元生成器描述
standard- 在单词边界处将字符串解析为词元
- 移除大部分标点符号
letter- 在任何非字母字符处将字符串解析为词元
- 移除非字母字符
lowercase- 在任何非字母字符处将字符串解析为词元
- 移除非字母字符
- 将词条转换为小写
whitespace- 在空白字符处将字符串解析为词元
uax_url_email- 与standard词元生成器类似
- 与standard词元生成器不同的是,将 URL 和电子邮件地址保留为单个词条
classic- 在以下情况将字符串解析为词元:
- 后面跟着空白字符的标点符号
- 如果词条不包含数字,则按连字符分割
- 移除标点符号
- 将 URL 和电子邮件地址保留为单个词条

部分词元生成器 #

部分词元生成器将文本解析为单词,并生成这些单词的片段,以便进行部分单词匹配。

词元生成器描述示例
ngram- 在指定字符(例如,标点符号或空白字符)处将字符串解析为单词,并为每个单词生成 n-gram(n 元组)输入:My repo
输出:[M, My, y, y , , r, r, re, e, ep, p, po, o]
原因条件:默认的 n-gram 长度为 1 到 2 个字符
edge_ngram- 在指定字符(例如,标点符号或空白字符)处将字符串解析为单词,并为每个单词生成边缘 n-gram(从单词开头开始的 n-gram)输入:My repo
输出:[M, My]
原因条件:默认的 n-gram 长度为 1 到 2 个字符

结构化文本词元生成器 #

结构化文本词元生成器用于解析结构化文本,例如标识符、电子邮件地址、路径或邮政编码。

词元生成器描述
keyword- 无操作词元生成器
- 原样输出整个字符串
- 可以与词元过滤器(如小写过滤器)结合使用以规范化词项
pattern- 使用正则表达式模式在单词分隔符处将文本解析为词条,或捕获匹配的文本作为词条
- 使用 Java 正则表达式
simple_pattern_split- 使用正则表达式模式在匹配处拆分文本,而不是将匹配项作为词条返回
- 使用 Lucene 正则表达式
- 比pattern 词元生成器更快,因为它使用了pattern 词元生成器正则表达式的子集
char_group- 在一组可配置的字符上进行解析
- 比运行正则表达式的词元生成器更快
path_hierarchy- 在路径分隔符(默认是 /)处解析文本,并返回树层级中每个组件的完整路径