SOLR中的语法时态词干

时间:2018-09-21 07:30:36

标签: solr stemming porter-stemmer

我想知道哪个词干过滤器工厂可用于提取词干词的所有可能时态。

示例:如果“ run”是搜索词->它必须获取所有涉及

的文件的结果
run , running , runs , ran. 

反之亦然->无论搜索一个单词的时态,它都必须从文件中检索所有结果。

我尝试使用POrterStemFilterFactory , snowball , kstem->这些似乎都无法获取预期的结果。

请帮助!预先感谢

谢谢, 艾西瓦娅

2 个答案:

答案 0 :(得分:0)

对我来说,我在schema.xml中使用它

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                />
        <filter class="solr.WordDelimiterFilterFactory"
                protected="protwords.txt"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="1"
                catenateNumbers="1"
                catenateAll="0"
                splitOnCaseChange="0"
                preserveOriginal="1"/>
        <filter class="solr.LengthFilterFactory" min="2" max="100" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                />
        <filter class="solr.WordDelimiterFilterFactory"
                protected="protwords.txt"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                splitOnCaseChange="0"
                preserveOriginal="1"/>
        <filter class="solr.LengthFilterFactory" min="2" max="100" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
      <analyzer type="multiterm">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords.txt"
                />
        <filter class="solr.WordDelimiterFilterFactory"
                protected="protwords.txt"
                generateWordParts="1"
                generateNumberParts="1"
                catenateWords="0"
                catenateNumbers="0"
                catenateAll="0"
                splitOnCaseChange="1"
                preserveOriginal="1"/>
        <filter class="solr.LengthFilterFactory" min="2" max="100" />
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
    </fieldType>

答案 1 :(得分:0)

不,您要的不是词干,而是Lemmatisation

  

语言学中的词法化(或词义化)是将单词的变体形式组合在一起的过程,以便可以将它们作为单个项目进行分析,由单词的词缀或字典形式进行识别。

     

在计算语言学中,词义化是根据词的预期含义确定词的词义的算法过程。与词干不同,去词义化取决于正确识别句子中单词的预期词性和词义,以及在该句子周围的较大上下文中,例如相邻句子甚至整个文档。因此,开发有效的去词皮化算法是一个开放的研究领域。

Solr通过多个插件支持lemmatisation,一些捆绑在一起,有些可以作为第三方插件使用。

最完整的可能是the plugin for the OpenNLP lemmatizer

<filter class="solr.OpenNLPLemmatizerFilterFactory"
      dictionary="lemmas.txt"
      lemmatizerModel="en-lemmatizer.bin"/>
  

词典

     

(可选)非原化字典文件的路径。该路径可以是绝对路径,也可以是相对于Solr配置目录的路径。字典文件必须编码为UTF-8,每行只有一个条目,格式为单词[tab] lemma [tab]词性部分,例如,write [tab] write [tab] VBD。

     

lemmatizerModel

     

(可选)特定于语言的OpenNLP lemmatizer模型文件的路径。该路径可以是绝对路径,也可以是相对于Solr配置目录的路径。

您可以找到a dictionary used for Elasticsearch's plugin at github