Токенизация хэштегов в 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 result;
    }
}

Однако пользовательский анализатор оставляет знаки препинания. Токены, созданные пользовательским анализатором: [#note:] [упражнение,] [чтобы] [жить] [дольше.]

Любые предложения по использованию фильтра, в котором сохраняются теги «#», «@» и удаляются знаки препинания?

Заранее спасибо.


person user707501    schedule 14.04.2011    source источник


Ответы (1)


В java-версии lucene есть PatternAnalyzer, который позволяет указать шаблон, который будет использоваться для разделения токенов.

Документация: http://lucene.apache.org/java/2_9_4/api/contrib-memory/org/apache/lucene/index/memory/PatternAnalyzer.html

Вы можете следить за .net-версией этого анализатора или портировать ее самостоятельно.

person csupnig    schedule 14.04.2011
comment
Спасибо за ваши предложения. Буду следить за портом .Net PatternAnalyzer. Тем временем мы думаем об обходном пути извлечения сообщения твита (например, «@name», «#Note» и т. д.), сохранения в отдельном поле Lucene и использования анализатора пробелов. - person user707501; 18.04.2011
comment
Пожалуйста! Я бы посоветовал вам написать свой собственный порт на .net, если он еще не существует. Это было бы всего несколько строк кода;) - person csupnig; 18.04.2011