Грамматические времена Stemming в SOLR

Я хочу знать, какую фабрику фильтров стемминга можно использовать для извлечения всех возможных времен основного слова.

Пример: если искомым словом является "run" -> он должен получить результаты для всех файлов, включающих

run , running , runs , ran. 

Также и наоборот --> какое бы время слова ни искалось, оно должно получить все результаты из файлов.

Я пытался использовать POrterStemFilterFactory , snowball , kstem --> ни один из них не дал ожидаемых результатов.

Пожалуйста помоги ! заранее спасибо

Спасибо, Айшвария


person aish_dev    schedule 21.09.2018    source источник


Ответы (2)


Для меня я использую это в 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>
person Quent    schedule 21.09.2018

Нет, то, о чем вы просите, это не стемминг, а лемматизация.

Лемматизация (или лемматизация) в лингвистике - это процесс группировки флективных форм слова, чтобы их можно было проанализировать как единый элемент, идентифицируемый по лемме слова или словарной форме.

В компьютерной лингвистике лемматизация — это алгоритмический процесс определения леммы слова на основе его предполагаемого значения. В отличие от стемминга, лемматизация зависит от правильного определения предполагаемой части речи и значения слова в предложении, а также в более широком контексте, окружающем это предложение, например, в соседних предложениях или даже во всем документе. В результате разработка эффективных алгоритмов лемматизации является открытой областью исследований.

Solr поддерживает лемматизацию с помощью нескольких плагинов, некоторые из них поставляются в комплекте, а некоторые доступны в качестве сторонних плагинов.

Наиболее полным, вероятно, является плагин для Лемматизатор OpenNLP.

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

словарь

(необязательно) Путь к файлу словаря лемматизации. Этот путь может быть абсолютным путем или путем относительно каталога конфигурации Solr. Файл словаря должен быть закодирован как UTF-8, с одной записью в строке, в форме слово[tab]лемма[tab]часть речи, например, write[tab]write[tab]VBD.

лемматизаторМодель

(необязательно) Путь к файлу модели лемматизатора OpenNLP для конкретного языка. Этот путь может быть абсолютным путем или путем относительно каталога конфигурации Solr.

Вы можете найти словарь, используемый для плагин на github.

person MatsLindh    schedule 21.09.2018