Вопрос

Учитывая следующий код:

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

Может ли кто-нибудь объяснить, почему портрермермер производит разные результаты, когда в этом слову есть место? Я ожидал, что «Таблица матраса» вытекает на «Табл для матраса».

Кроме того, это дополнительно запутается следующим кодом:

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 () и стебля () для того же слова, используя тот же анализатор?

Спасибо, Кайл

Это было полезно?

Решение

PorterstemMeranalyzer состоит из серии Tokenizers и фильтров. Porterstemmer - один из фильтров с генерируемыми токенстримом. Если вы хотите проверить, попробуйте изменить случай запроса. Вывод QueryParser будет в нижнем регистре из-за нижнего камеры на токенстрие.

Какой-то пример кода для пользовательского анализатора может быть проверен здесь. Отказ Это даст вам заглянуть внутри анализатора.

Другие советы

Пашня запроса токена первым в двух токенах. Портер рассматривает все это как одно «слово», и поэтому только связано с последней частью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top