Токенизация постов Twitter в Lucene - PullRequest
6 голосов
/ 31 марта 2010

Мой вопрос в двух словах: кто-нибудь знает о TwitterAnalyzer или TwitterTokenizer для Lucene?

Более подробная версия:

Я хочу проиндексировать несколько твитов в Lucene и оставить такие слова, как @ user или # hashtag без изменений. StandardTokenizer не работает, потому что он отбрасывает пунктуацию (но он делает другие полезные вещи, такие как сохранение доменных имен, адресов электронной почты или распознавание акронимов). Как я могу иметь анализатор, который делает все, что делает StandardTokenizer, но не касается таких терминов, как @user и #hashtag?

Мое текущее решение заключается в предварительной обработке текста твита перед подачей его в анализатор и замене символов другими буквенно-цифровыми строками. Например,

String newText = newText.replaceAll("#", "hashtag");
newText = newText.replaceAll("@", "addresstag");

К сожалению, этот метод нарушает допустимые адреса электронной почты, но я могу с этим смириться. Имеет ли такой подход смысл?

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

AMAC

Ответы [ 6 ]

5 голосов
/ 01 апреля 2010

StandardTokenizer и StandardAnalyzer в основном пропускают ваши токены через StandardFilter (который удаляет все виды символов из ваших стандартных токенов, например, в конце слов), затем следует фильтр в нижнем регистре (для строчных букв ваших слов) и, наконец, StopFilter , Последний из них удаляет такие незначительные слова, как «как», «в», «для» и т. Д.

Для начала вы можете легко реализовать собственный анализатор, который выполняет те же функции, что и StandardAnalyzer, но использует WhitespaceTokenizer в качестве первого элемента, который обрабатывает входной поток.

Для получения более подробной информации о внутренней работе анализаторов вы можете посмотреть здесь

1 голос
/ 06 апреля 2019

Чистее использовать собственный токенайзер, который обрабатывает имена пользователей в Twitter. Я сделал один здесь: https://github.com/wetneb/lucene-twitter

Этот токенизатор распознает имена пользователей и хэштеги Twitter, а сопутствующий фильтр можно использовать для их нижнего регистра (учитывая, что они не чувствительны к регистру):

<fieldType name="text_twitter" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer type="index">
    <tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
    <filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
  </analyzer>
  <analyzer type="query">
     <tokenizer class="org.opentapioca.analysis.twitter.TwitterTokenizerFactory" />
     <filter class="org.opentapioca.analysis.twitter.TwitterLowercaseFilterFactory" />
  </analyzer>
</fieldType>
0 голосов
/ 15 декабря 2017

Твиттер с открытым исходным кодом, там текстовый процесс lib, реализует обработчик токена для хэштега и т. Д.

, такой как: HashtagExtractor https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/text/extractor/HashtagExtractor.java

Он основан на TokenStream Люсена.

0 голосов
/ 12 марта 2014

API Twitter можно сказать, чтобы он возвращал все твиты, Bios и т. Д. С «сущностями» (хэштегами, идентификаторами пользователей, URL и т. Д.), Уже проанализированными из контента, в коллекции.

https://dev.twitter.com/docs/entities

Так разве вы не ищете способ сделать что-то, что ребята из Twitter уже сделали для вас?

0 голосов
/ 01 марта 2014

Учебник по конкретному токенайзеру Twitter, который является модифицированной версией API ark-tweet-nlp, можно найти по адресу http://preciselyconcise.com/apis_and_installations/tweet_pos_tagger.php Этот API способен идентифицировать смайлики, хэштеги, междометия и т. Д., Присутствующие в твите

0 голосов
/ 23 ноября 2013
...