Токенизация хэштегов в Lucene.Net

#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, если он еще не существует. Это было бы всего лишь несколько строк кода 😉