避免词干缩略词?
Avoid stemming of Acronyms?
我正在使用 pattern_capture
过滤器来保留所有首字母缩略词
PUT test_index/_settings
{
"index.analysis.filter": {
"acronym_en_EN": {
"type": "pattern_capture",
"patterns": [
"(?:[a-zA-Z]\.)+",
"((?:[a-zA-Z]\.)+[a-zA-Z])",
"((?:[a-zA-Z]\.)+[s]$)",
"((?:[a-zA-Z]\.)+[s][\.]$)"
],
"preserve_original": true
}
}
}
但我注意到以 s
或 s.
结尾的首字母缩略词会被词干化,因为分析器还附加了一个词干过滤器。上面过滤器中用于处理 s
的正则表达式也不起作用。
我用这个测试输出
GET test_index/_analyze?tokenizer=standard&filters=lowercase,acronym_en_EN,apostrophe,porter_stemmer_en_EN&text=u.s.a. u.s. s.w.a.t u.t.
这给了我
{
"tokens": [
{
"token": "u.s.a",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "u.",
"start_offset": 7,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "u.",
"start_offset": 7,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "s.w.a.t",
"start_offset": 12,
"end_offset": 19,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "u.t",
"start_offset": 20,
"end_offset": 23,
"type": "<ALPHANUM>",
"position": 4
}
]
}
有什么方法可以保留以 s
结尾的首字母缩略词,这样对于 u.s.
或 u.s
我就不会得到 u.
了吗?
我不认为这是开箱即用的支持。我相信这样做的方法是教 pattern_capture
过滤器如何将其捕获标记为 keyword
标记 ala keyword_marker
过滤器。
老实说,您可能可以通过两个 pattern_replace
标记过滤器来破解一些东西 - 一个在词干分析器的两侧。只需在首字母缩略词的前面打一个 $
或其他东西,然后在另一边撕掉它。
我正在使用 pattern_capture
过滤器来保留所有首字母缩略词
PUT test_index/_settings
{
"index.analysis.filter": {
"acronym_en_EN": {
"type": "pattern_capture",
"patterns": [
"(?:[a-zA-Z]\.)+",
"((?:[a-zA-Z]\.)+[a-zA-Z])",
"((?:[a-zA-Z]\.)+[s]$)",
"((?:[a-zA-Z]\.)+[s][\.]$)"
],
"preserve_original": true
}
}
}
但我注意到以 s
或 s.
结尾的首字母缩略词会被词干化,因为分析器还附加了一个词干过滤器。上面过滤器中用于处理 s
的正则表达式也不起作用。
我用这个测试输出
GET test_index/_analyze?tokenizer=standard&filters=lowercase,acronym_en_EN,apostrophe,porter_stemmer_en_EN&text=u.s.a. u.s. s.w.a.t u.t.
这给了我
{
"tokens": [
{
"token": "u.s.a",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "u.",
"start_offset": 7,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "u.",
"start_offset": 7,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "s.w.a.t",
"start_offset": 12,
"end_offset": 19,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "u.t",
"start_offset": 20,
"end_offset": 23,
"type": "<ALPHANUM>",
"position": 4
}
]
}
有什么方法可以保留以 s
结尾的首字母缩略词,这样对于 u.s.
或 u.s
我就不会得到 u.
了吗?
我不认为这是开箱即用的支持。我相信这样做的方法是教 pattern_capture
过滤器如何将其捕获标记为 keyword
标记 ala keyword_marker
过滤器。
老实说,您可能可以通过两个 pattern_replace
标记过滤器来破解一些东西 - 一个在词干分析器的两侧。只需在首字母缩略词的前面打一个 $
或其他东西,然后在另一边撕掉它。