【发布时间】:2020-11-04 22:07:55
【问题描述】:
有没有办法从标记 n-gram 中只删除前导和尾随停用词?
目前我有以下组合可以删除任何包含停用词的 n-gram:
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="3"
outputUnigrams="true" outputUnigramsIfNoShingles="false" tokenSeparator=" "/>
<filter class="solr.PatternReplaceFilterFactory" pattern=".*_.*" replacement=""/>
</analyzer>
例如,如果我的文档包含这些 ngram:
“伦敦塔”、“伦敦塔”、“和伦敦”、“伦敦”、
以“of, in”作为停用词,shingle 过滤器将产生:
塔_伦敦,塔_伦敦,_伦敦,伦敦
(请注意,第二个“tower _ london”与第一个不同,但是这部分信息丢失了)
然后模式过滤器将删除前 3 个 n-gram。
我真正想做的是保留“伦敦塔”、“伦敦塔”、“伦敦”、“伦敦”。
这可能吗?
非常感谢!
【问题讨论】:
-
如果您担心信息丢失,为什么要删除停用词?在我看来,常见的停用词在句子开头或结尾的影响并不比在中间的影响小。毕竟“在路上”和“在路上”也有明显不同的含义。为什么不直接从分析仪中完全删除
StopFilterFactory?