连字符分解器词元过滤器
编辑连字符分解器词元过滤器
编辑使用基于 XML 的连字符模式来查找复合词中潜在的子词。然后,将这些子词与指定的词列表进行核对。不在列表中的子词将从词元输出中排除。
此过滤器使用 Lucene 的 HyphenationCompoundWordTokenFilter,该过滤器专为日耳曼语系语言而构建。
示例
编辑以下 analyze API 请求使用 hyphenation_decompounder
过滤器,基于 analysis/hyphenation_patterns.xml
文件中的德语连字符模式查找 Kaffeetasse
中的子词。然后,过滤器将这些子词与指定的单词列表进行核对:kaffee
、zucker
和 tasse
。
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 连字符模式文件,请参阅
- 用于格式化对象 (OFFO) Sourceforge 项目
- offo-hyphenation_v1.2.zip 直接下载(不支持 v2.0 及以上版本的连字符模式文件)
-
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_matches
比 only_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 } } } } }