Pergunta

Dado o seguinte código:

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

Alguém poderia explicar por que o portersole produz resultados diferentes quando há um espaço na palavra? Eu esperava que a 'mesa do colchão' fosse decorrente de 'colchão de colchão'.

Além disso, isso é ainda mais confuso pelo seguinte código:

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"

Alguém poderia explicar por que estou obtendo resultados diferentes da função QueryParser () e da STEM () para as mesmas palavras usando o mesmo analisador?

Obrigado, Kyle

Foi útil?

Solução

O portermemmeranalyzer é composto por séries de tokenizadores e filtros. O PorterStemmer é um dos filtros do Tokenstream gerado. Se você deseja verificar isso, tente alterar o caso da consulta. A saída do QueryParser estará na minúscula devido ao pilão minúsculo no tokenstream.

Algum código de amostra para analisador personalizado pode ser verificado aqui. Isso dará uma olhada dentro de um analisador.

Outras dicas

O analisador de consulta o tokeniza primeiro em dois fichas. Porter considera tudo isso como uma "palavra" e, portanto, resulta apenas na última parte.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top