Щас цыган Porterstemmer
-
26-09-2019 - |
Вопрос
Учитывая следующий код:
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 будет в нижнем регистре из-за нижнего камеры на токенстрие.
Какой-то пример кода для пользовательского анализатора может быть проверен здесь. Отказ Это даст вам заглянуть внутри анализатора.
Другие советы
Пашня запроса токена первым в двух токенах. Портер рассматривает все это как одно «слово», и поэтому только связано с последней частью.