次のコードがあるとします。
Dim stemmer As New Lucene.Net.Analysis.PorterStemmer()
Response.Write(stemmer.Stem("mattress table") & "<br />") // Outputs: mattress t
Response.Write(stemmer.Stem("mattress") & "<br />") // Outputs: mattress
Response.Write(stemmer.Stem("table") & "<br />") // Outputs: tabl
単語にスペースがあると PorterStemmer が異なる結果を生成する理由を誰か説明できますか? 「マットレス テーブル」が「マットレス テーブル」にステミングされることを期待していました。
また、これは次のコードによってさらに混乱します。
Dim parser As Lucene.Net.QueryParsers.QueryParser = New Lucene.Net.QueryParsers.QueryParser("MyField", New PorterStemmerAnalyzer)
Dim q As Lucene.Net.Search.Query = parser.Parse("mattress table")
Response.Write(q.ToString & "<br />") // Outputs: MyField:mattress MyField: tabl
q = parser.Parse("""mattress table""")
Response.Write(q.ToString & "<br />") // Outputs My Field:"mattress tabl"
同じアナライザーを使用して、同じ単語に対して QueryParser() 関数と Stem() 関数から異なる結果が得られる理由を誰かが説明できますか?
ありがとう、カイル