gpt4 book ai didi

solr - 如何使 Solr 拼写检查器更正拉丁语和西里尔语单词?

转载 作者:行者123 更新时间:2023-12-04 12:54:23 25 4
gpt4 key购买 nike

我允许用户用拉丁字母输入俄语单词。如果用户在拉丁字母中拼错了俄语单词,我希望 Solr 拼写检查器用西里尔字母建议正确的单词(索引中的俄语单词是西里尔字母)。但是,如果用户拼错的不是俄语单词(例如品牌名称),则应使用拉丁字母进行更正(索引中的俄语单词不是拉丁语)。

例如,tilevizor smasung应该固定为 телевизор samsung
现在我使用以下配置:

<fieldType name="spell_ru" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Any-Cyrillic; NFD; [^\p{Alnum}] Remove" />
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="256" />
</analyzer>
</fieldType>

它将查询转换为西里尔字母,因此俄语单词更正有效。但拉丁语没有。 ( tilevizorтелевизор 有效,但 smasungsamsung 无效)。

任何想法,我怎样才能让拼写检查器纠正西里尔字母和拉丁语单词?

最佳答案

我认为,可以在这里提供帮助的解决方案是 Beider-Morse 语音匹配 (BMPM)

Beider-Morse Phonetic Matching (BMPM) is a "soundalike" tool that lets you search using a new phonetic matching system.



因此,例如单词 'tilevizor' 和 'телевизор' 听起来很像,我们会得到匹配。可以调整的是语音匹配算法。 Solr 是 supporting其中有很多,我不确定哪一个会表现得更好:DoubleMetaphone、Metaphone、Soundex、RefinedSoundex、Caverphone (v2.0)、ColognePhonetic 或 Nysiis。

另外,我想更新 solr.ICUTransformFilterFactoryid="Russian-Latin/BGN" ,它可以更好地将俄语符号转换为拉丁语符号。
    <fieldType name="spell_ru" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>
<filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>
</analyzer>
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Russian-Latin/BGN"/>
<filter class="solr.PhoneticFilterFactory" encoder="Caverphone"/>
</analyzer>
</fieldType>

上面的 fieldType 在很多情况下都可以解决问题,例如
q=title:tilevizor
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}

q=title:тилевизор
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}

q=title:smasung
SolrDocument{title=телевизор samsung, _version_=1583123812650582016}
SolrDocument{title=televizor самсунг, _version_=1583123812667359232}
SolrDocument{title=гэлакси samsung, _version_=1583123812684136448}
SolrDocument{title=galaxy самсунг, _version_=1583123812684136449}

我创建了以下测试类 here ,随意玩这个。

关于solr - 如何使 Solr 拼写检查器更正拉丁语和西里尔语单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com