连字符分解器词元过滤器

编辑

使用基于 XML 的连字符模式来查找复合词中潜在的子词。然后,将这些子词与指定的词列表进行核对。不在列表中的子词将从词元输出中排除。

此过滤器使用 Lucene 的 HyphenationCompoundWordTokenFilter,该过滤器专为日耳曼语系语言而构建。

示例

编辑

以下 analyze API 请求使用 hyphenation_decompounder 过滤器,基于 analysis/hyphenation_patterns.xml 文件中的德语连字符模式查找 Kaffeetasse 中的子词。然后,过滤器将这些子词与指定的单词列表进行核对:kaffeezuckertasse

resp = client.indices.analyze(
    tokenizer="standard",
    filter=[
        {
            "type": "hyphenation_decompounder",
            "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
            "word_list": [
                "Kaffee",
                "zucker",
                "tasse"
            ]
        }
    ],
    text="Kaffeetasse",
)
print(resp)
const response = await client.indices.analyze({
  tokenizer: "standard",
  filter: [
    {
      type: "hyphenation_decompounder",
      hyphenation_patterns_path: "analysis/hyphenation_patterns.xml",
      word_list: ["Kaffee", "zucker", "tasse"],
    },
  ],
  text: "Kaffeetasse",
});
console.log(response);
GET _analyze
{
  "tokenizer": "standard",
  "filter": [
    {
      "type": "hyphenation_decompounder",
      "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
      "word_list": ["Kaffee", "zucker", "tasse"]
    }
  ],
  "text": "Kaffeetasse"
}

该过滤器产生以下词元

[ Kaffeetasse, Kaffee, tasse ]

可配置参数

编辑
hyphenation_patterns_path

(必需,字符串)Apache FOP(格式化对象处理器)XML 连字符模式文件的路径。

此路径必须是绝对路径,或者相对于 config 位置的相对路径。仅支持 FOP v1.2 兼容文件。

例如,有关 FOP XML 连字符模式文件,请参阅

word_list

(必需*,字符串数组)子词列表。使用连字符模式找到但不在列表中的子词将从词元输出中排除。

您可以使用 dictionary_decompounder 过滤器来测试词列表的质量,然后再实施它们。

必须指定此参数或 word_list_path

word_list_path

(必需*,字符串)包含子词列表的文件的路径。使用连字符模式找到但不在列表中的子词将从词元输出中排除。

此路径必须是绝对路径,或者相对于 config 位置的相对路径,并且文件必须采用 UTF-8 编码。文件中的每个词元必须以换行符分隔。

您可以使用 dictionary_decompounder 过滤器来测试词列表的质量,然后再实施它们。

必须指定此参数或 word_list

max_subword_size
(可选,整数)子词的最大字符长度。较长的子词词元将从输出中排除。默认为 15
min_subword_size
(可选,整数)子词的最小字符长度。较短的子词词元将从输出中排除。默认为 2
min_word_size
(可选,整数)单词的最小字符长度。较短的单词词元将从输出中排除。默认为 5
only_longest_match
(可选,布尔值)如果为 true,则仅包括最长的匹配子词。默认为 false
no_sub_matches
(可选,布尔值)如果为 true,则不在词列表中的词元中匹配子词元。默认为 false
no_overlapping_matches
(可选,布尔值)如果为 true,则不允许重叠的词元。默认为 false

通常,用户只想包含三个标志中的一个,因为启用 no_overlapping_matches 的限制性最强,并且 no_sub_matchesonly_longest_match 的限制性更强。在启用限制性更强的选项时,限制性较弱的选项的状态没有任何影响。

自定义并添加到分析器

编辑

要自定义 hyphenation_decompounder 过滤器,请复制它以创建新的自定义词元过滤器的基础。您可以使用其可配置参数来修改过滤器。

例如,以下 创建索引 API 请求使用自定义的 hyphenation_decompounder 过滤器来配置新的自定义分析器

自定义的 hyphenation_decompounder 过滤器根据 analysis/hyphenation_patterns.xml 文件中的连字符模式查找子词。然后,过滤器将这些子词与 analysis/example_word_list.txt 文件中指定的单词列表进行核对。长度超过 22 个字符的子词将从词元输出中排除。

resp = client.indices.create(
    index="hyphenation_decompound_example",
    settings={
        "analysis": {
            "analyzer": {
                "standard_hyphenation_decompound": {
                    "tokenizer": "standard",
                    "filter": [
                        "22_char_hyphenation_decompound"
                    ]
                }
            },
            "filter": {
                "22_char_hyphenation_decompound": {
                    "type": "hyphenation_decompounder",
                    "word_list_path": "analysis/example_word_list.txt",
                    "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
                    "max_subword_size": 22
                }
            }
        }
    },
)
print(resp)
const response = await client.indices.create({
  index: "hyphenation_decompound_example",
  settings: {
    analysis: {
      analyzer: {
        standard_hyphenation_decompound: {
          tokenizer: "standard",
          filter: ["22_char_hyphenation_decompound"],
        },
      },
      filter: {
        "22_char_hyphenation_decompound": {
          type: "hyphenation_decompounder",
          word_list_path: "analysis/example_word_list.txt",
          hyphenation_patterns_path: "analysis/hyphenation_patterns.xml",
          max_subword_size: 22,
        },
      },
    },
  },
});
console.log(response);
PUT hyphenation_decompound_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "standard_hyphenation_decompound": {
          "tokenizer": "standard",
          "filter": [ "22_char_hyphenation_decompound" ]
        }
      },
      "filter": {
        "22_char_hyphenation_decompound": {
          "type": "hyphenation_decompounder",
          "word_list_path": "analysis/example_word_list.txt",
          "hyphenation_patterns_path": "analysis/hyphenation_patterns.xml",
          "max_subword_size": 22
        }
      }
    }
  }
}