#lucene #lucene.net #analyzer
#lucene #lucene.net #анализатор
Вопрос:
Я использую Lucene.Net (версия 2.9). Я хотел бы сохранить запись в твиттере «@name» или «#Note».
С помощью инструмента Lucene AnalyzerViewer (http://www.codeproject.com/KB/cs/lucene_analysis.aspx?msg=3326095#xx3326095xx ) для проверки токенов, созданных другим анализатором.
Например, токены, созданные ниже на основе этого текста: «#Примечание: Упражняйтесь, чтобы жить дольше».
- Анализатор пробелов: [#Примечание:] [Упражняться,] [чтобы] [жить] [дольше.]
- Стандартный анализатор: [примечание] [упражнение] [жить] [дольше]
- Простой анализатор: [обратите внимание] [упражняйтесь], [чтобы] [жить] [дольше]
‘Анализатор пробелов’ сохраняет хэш-теги. Я создал пользовательский анализатор, который использует WhitespaceTokenizer и нижний регистр.
Пользовательский код анализатора…
public class CustomAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
{
TokenStream result = new Lucene.Net.Analysis.WhitespaceTokenizer(reader);
// Makes sure everything is lower case
result = new LowerCaseFilter(result);
//Return the built token stream.)
return resu<
}
}
Однако пользовательский анализатор оставляет знаки препинания. Токены, созданные пользовательским анализатором: [#примечание:] [упражняться,] [чтобы] [жить] [дольше.]
Есть предложения использовать фильтр, в котором сохраняются теги ‘#’, ‘@’, а знаки препинания удаляются?
Заранее спасибо.
Ответ №1:
В java-версии lucene есть PatternAnalyzer, который позволяет вам указать шаблон, который будет использоваться для разделения токенов.
Документация: http://lucene .apache.org/java/2_9_4/api/contrib-memory/org/apache/lucene/index/memory/PatternAnalyzer.html
Вы могли бы обратить внимание на .net-версию этого анализатора или портировать ее самостоятельно.
Комментарии:
1. Спасибо за ваши предложения. Будет следить за .Net-портом PatternAnalyzer. Тем временем мы думаем об обходном подходе, заключающемся в извлечении сообщения в твиттере (например, ‘@name’, ‘#Note’ и т.д.) и сохранении в отдельном поле Lucene и использовании анализатора пробелов.
2. Всегда пожалуйста! Я бы посоветовал вам написать свой собственный порт для .net, если он еще не существует. Это было бы всего лишь несколько строк кода 😉