我正在使用英语标记符来解析标记,我正面临一个奇怪的情况,像真的/回复这样的单词被转换为realli,repli。
以下是我正在使用的代码段。
object Learning {
def tokenize(content: String): Seq[String] = {
val tReader = new StringReader(content)
val analyzer = new EnglishAnalyzer()
val tStream = analyzer.tokenStream("contents", tReader)
val term = tStream.addAttribute(classOf[CharTermAttribute])
tStream.reset()
val result = mutable.ArrayBuffer.empty[String]
while(tStream.incrementToken()) {
result += term.toString
}
result
}
def main(args: Array[String]): Unit = {
println(tokenize("This deal looks really interesting, I will look into it and reply"))
}
}
这打印为 - ArrayBuffer(deal,look,realli,interest,i,look,repli)。据我所知,英语中没有像realli,repli这样的词语。
有人能指出为什么这样会以这种方式提供输出吗?
答案 0 :(得分:1)
Lucene分析器的目的是从源(由解析过程提供)获取字符序列,并根据预期的分析产生令牌流。 EnglishAnalyzer默认执行词干,产生的标记不一定是有效的英语单词。在这种情况下,一个令牌&#34; repli&#34;可能是具有相同语义的多个英语单词的输出:&#34;回复&#34;,&#34;回复&#34;,&#34;回复&#34;,&#34;回复&#34;。< / p>
因此,一个简短的回答是&#34;它并不重要,语言可以方便地由分析器来阻止&#34;。如果这不是预期的行为,您应该能够使用不同的词干分析器(或完全删除它)来制作自定义分析器。有关其他信息和提供的词干分析器列表,请参阅documentation on analyzers。