连字符分解词元过滤器
编辑连字符分解词元过滤器
编辑使用基于 XML 的连字符模式查找复合词中潜在的子词。然后,这些子词将与指定的词表进行检查。列表中不存在的子词将从词元输出中排除。
此过滤器使用 Lucene 的 HyphenationCompoundWordTokenFilter,该过滤器是为日耳曼语构建的。
示例
编辑以下 分析 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
。
自定义并添加到分析器
编辑要自定义 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 } } } } }