我想知道哪个词干过滤器工厂可用于提取词干词的所有可能时态。
示例:如果“ run”是搜索词->它必须获取所有涉及
的文件的结果run , running , runs , ran.
反之亦然->无论搜索一个单词的时态,它都必须从文件中检索所有结果。
我尝试使用POrterStemFilterFactory , snowball , kstem
->这些似乎都无法获取预期的结果。
请帮助!预先感谢
谢谢, 艾西瓦娅
答案 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。