2016-11-04 5 views
0

私はトークンを解析するために英語トークナイザを使用しています。本当に/ replyのような言葉がrealli、repliに変換される奇妙な状況に直面しています。Lucene English tokenizerは奇妙な言葉を返します

以下は、私が使用しているコードスニペットです。

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はデフォルトでステミングを実行し、必ずしも有効な英語の単語ではないトークンを生成します。その場合、トークン「repli」は、同じ意味を保持する複数の英語単語、すなわち「返信」、「返信」、「返信」、「返信」の出力とすることができる。

したがって、短い回答は「問題ではなく、言葉は分析者によって都合よく打ち出された」ということになります。これが意図した動作ではない場合は、別のステマーを使用してカスタムアナライザを作成する(または完全に削除する)必要があります。追加情報と使用可能なステムマーのリストについては、documentation on analyzersを参照してください。

関連する問題