Я использую 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_replace', связаны с заменой согласованного термина пустой строкой. Есть ли способ заменить его одним и тем же совпадением? –
Группы захвата должны работать ala [appendReplacement] (http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#appendReplacement (java.lang.StringBuffer,% 20java.lang .String)). – Nik
Я использовал '#' в качестве разделителя для этих сокращений. Я думаю, это должно сработать. Спасибо за предложение. –