首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Solr拼写检查器同时更正拉丁语和西里尔词?

如何使Solr拼写检查器同时更正拉丁语和西里尔词?
EN

Stack Overflow用户
提问于 2013-12-03 12:04:55
回答 1查看 822关注 0票数 7

我允许用户用拉丁字母键入俄语单词。如果用户在拉丁字母中拼错了俄语单词,我希望Solr拼写检查器用西里尔字母表示正确的单词(索引中的俄语单词以西里尔字母表示)。但是,如果用户拼写错误而不是俄语单词(例如商标名称),则应该用拉丁文字母对其进行更正(索引中的俄语单词不在拉丁文中)。

例如,应该将tilevizor smasung修复为телевизор samsung

现在我使用以下配置:

代码语言:javascript
复制
<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 to телевизорsmasung to samsung不起作用)。

任何想法,我如何使拼写检查,以纠正西里尔词和拉丁词?

EN

回答 1

Stack Overflow用户

发布于 2017-11-04 08:41:49

我认为,这个解决方案,可以帮助这里是拜德尔-摩尔斯拼音匹配(BMPM)。

拜德尔-莫尔斯语音匹配(BMPM)是一个“声音相似”的工具,可以让你搜索使用一个新的语音匹配系统。

因此,例如,单词'tilevizor‘和'телевизор’将听起来很相似,我们将得到一个匹配。可以调整的是语音匹配的算法。Solr是支撑性中的很多,我不知道哪个会更好: DoubleMetaphone、Metaphone、Soundex、RefinedSoundex、Caverphone (v2.0)、ColognePhonetic或Nysiis。

另外,我想用solr.ICUTransformFilterFactory更新id="Russian-Latin/BGN",它能更好地将俄罗斯符号转换为拉丁语符号。

代码语言:javascript
复制
    <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在很多情况下都能做到这一点,例如

代码语言:javascript
复制
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}

我已经创建了下面的测试类这里,可以随意使用这个类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20350714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档