2010-03-31 11 views
6

Moje pytanie w pigułce: czy ktoś wie o TwitterzeAnalyzer lub TwitterTokenizer dla Lucene?Tokenizacja wpisów na Twitterze w Lucene

Bardziej szczegółowa wersja:

Chcę indeksu szereg tweets w Lucene i zachować warunki jak @user lub #hashtag nienaruszonym. StandardTokenizer nie działa, ponieważ odrzuca interpunkcję (ale robi inne przydatne rzeczy, takie jak przechowywanie nazw domen, adresów e-mail lub rozpoznawanie akronimów). Jak mogę mieć analizator, który robi wszystko, co StandardTokenizer, ale nie dotyka terminów takich jak @user i #hashtag?

Moje obecne rozwiązanie polega na wstępnym przetworzeniu tekstu tweeta przed wprowadzeniem go do analizatora i zastąpieniu znaków innymi ciągami alfanumerycznymi. Na przykład:

Niestety ta metoda łamie uzasadnione adresy e-mail, ale mogę z tym żyć. Czy to podejście ma sens?

Z góry dziękuję!

AMAC

+0

jakie jest Twoje ostateczne rozwiązanie? – Karussell

+2

Jeśli potrzebujesz rozwiązania dla solr, może to pomóc: https://issues.apache.org/jira/browse/SOLR-2059 i coś w rodzaju "# => ALPHA" "@ => ALPHA" – Karussell

Odpowiedz

5

StandardTokenizer i StandardAnalyzer zasadzie przekazać swoje żetony przez StandardFilter (który usuwa wszystkie rodzaje znaków od standardowych żetonów podobnych do „s na końcach wyrazów), a następnie przez filtr Stolica (do małymi literami swoje słowa) i wreszcie przez StopFilter. Ten ostatni usuwa nieznaczne słowa, takie jak "as", "in", "for", itp.

To, co można łatwo zrobić, aby rozpocząć, to zaimplementować własny analizator, który działa tak samo, jak narzędzie StandardAnalyzer, ale używa WhitespaceTokenizer jako pierwszy element, który przetwarza strumień wejściowy.

Więcej szczegółów jedno wewnętrzne funkcjonowanie analizatorów można spojrzeć nad here

+0

Dzięki. Próbowałem już implementować mój własny analizator za pomocą WhitespaceTokenizer zamiast StandardTokenizer. Ale to pozostawia nazwy hostów, adresy e-mail i inne rzeczy nierozpoznane i tokenizowane błędnie. Chciałbym przetworzyć strumień za pomocą mojego własnego TwitterTokenizer (który obsługuje @s i #s nie robi nic innego), a następnie przesłać strumień wynikowy do StandardTokenizer i kontynuować. Jednak, o ile rozumiem, analizator może mieć tylko jeden Tokenizer na początku łańcucha. –

+1

Innym podejściem może być użycie PerFieldAnalyzerWrapper i wykonanie drugiego przejścia przez zawartość, aby wyraźnie wyszukać tagi hash i referencje użytkownika i umieścić je w oddzielnym polu dokumentu (np. "Tagi" i "odpowiedzi"). Analizatory dla tych pól zwracają wtedy tylko żetony odpowiednio dla zdarzeń #tag i @user. – Thomas

+0

Tak, to ma sens. Dzięki! –

0

Twitter API można powiedzieć, aby przywrócić wszystkie tweetów BIOS itp z "entity" (hashtags, userIds, urls itp.) są już spakowane z treści do kolekcji.

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

Więc nie są po prostu szukasz sposobu, aby ponownie zrobić coś, co ludzie na Twitterze już dla ciebie zrobić?