Грамматические времена Стемминг в SOLR - PullRequest
0 голосов
/ 21 сентября 2018

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

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

run , running , runs , ran. 

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

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

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

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

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

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

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

словарь

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

lemmatizerModel

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

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

0 голосов
/ 21 сентября 2018

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