Question

Vu le code suivant:

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

Quelqu'un pourrait-il expliquer pourquoi le PorterStemmer produit des résultats différents quand il y a un espace dans le mot? Je me attendais « table de matelas » pour être endiguée à «matelas tabl.

En outre, cela est encore confus par le code suivant:

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"

Quelqu'un pourrait-il expliquer pourquoi je reçois des résultats différents de la QueryParser () et la fonction Stem () pour le même mot (s) en utilisant le même analyseur?

Merci, Kyle

Était-ce utile?

La solution

PorterStemmerAnalyzer se compose de séries de tokenizers et filtres. PorterStemmer est l'un des filtres de la tokenstream généré. Si vous voulez vérifier que, essayez de changer le cas de la requête. sortie QueryParser sera en minuscules en raison de LowerCaseFilter sur tokenstream.

Certains exemples de code pour analyseur personnalisé peut être vérifié . Cela vous donnera un coup d'oeil à l'intérieur d'un analyseur.

Autres conseils

L'analyseur de requête tokenizes d'abord en deux jetons. Porter considère tout cela comme un « mot » et les tiges de sorte que la dernière partie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top