2010-02-23 8 views
8

Poszukuję biblioteki Java, aby przeprowadzić wstępne sprawdzanie pisowni/normalizację danych na podstawie zawartości tekstowej wygenerowanej przez użytkownika, wyobrazić sobie zainteresowania wpisane w profilu na Facebooku.Korekta pisowni dla normalizacji danych w Javie

Ten tekst zostanie w pewnym momencie uwięziony (przed lub po korekcie pisowni, cokolwiek działa lepiej), a część z nich zostanie wykorzystana jako klucz do wyszukania (dopasowanie ścisłe). Byłoby miło ograniczyć pisownię i tym podobne, aby stworzyć więcej dopasowań. Byłoby jeszcze lepiej, gdyby poprawka działała dobrze na żetonach dłuższych niż jedno słowo, np. "picie kawy" oznaczałoby "picie kawy", a nie "myślącą kawę".

znalazłem następujące biblioteki Java dla robić korektę pisowni:

  1. JAZZY nie wydaje się być pod aktywnego rozwoju. Ponadto podejście oparte na słowie-odległości wydaje się niewystarczające ze względu na używanie niestandardowego języka w profilach sieci społecznościowych i tokenach wielo-słownych.
  2. APACHE LUCENE wydaje się mieć statistical spell checker, który powinien być bardziej odpowiedni. Pytanie tutaj, jak stworzyć dobry słownik? (W innym przypadku nie używamy Lucene, więc nie ma istniejącego indeksu.)

Wszelkie sugestie są mile widziane!

Odpowiedz

10

To, co chcesz zaimplementować, to nie pisownia korektora, ale wyszukiwanie rozmyte. Esej Petera Norviga jest dobrym punktem wyjścia do budowania nieostrych poszukiwań od kandydatów sprawdzonych na słowniku.

Można również rzucić okiem na drzewa BK.

Indeks n-gramowy (używany przez Lucene) zapewnia lepsze wyniki dla dłuższych słów. Podejście do produkcji kandydatów do określonej odległości edycyjnej prawdopodobnie będzie wystarczająco dobre dla słów znalezionych w normalnym tekście, ale nie będzie wystarczająco dobre dla nazwisk, adresów i tekstów naukowych. Zwiększy to jednak rozmiar indeksu.

Jeśli masz indeksowane teksty, masz korpus tekstowy (słownik). Tylko to, co jest w twoich danych, można znaleźć. Nie musisz używać zewnętrznego słownika.

Dobry zasób to Introduction to Information Retrieval - Dictionaries and tolerant retrieval. Istnieje krótki opis korekty pisowni zależnej od kontekstu.

+0

Dziękuję za Twój wnikliwy komentarz i interesujący link do książki. Masz rację, tym, czego naprawdę chcę, jest wyszukiwanie rozmyte. Jednak zobaczę, jak/jeśli sprawdzanie pisowni działa dla mojej konkretnej aplikacji (być może jest to wystarczająco dobre teraz) i powracam do pomysłów, o których wspomniałeś później. Wielkie dzięki! – dareios

0
+0

Naprawdę bardzo lubię sprawdzać pisownię Norviga, to świetna robota! Jednak pytanie sprowadza się do wyboru właściwego korpusu tekstowego (podobnie jak w bardziej zaawansowanym LUCENE). Pobieranie częstotliwości ze swobodnie dostępnych dzieł Szekspira nie pomoże w poprawianiu profili sieci społecznościowych. – dareios

+0

Więc mówisz, że "trinking" zamiast "picie" nie jest adresowane? Będę musiał ponownie przeczytać artykuł Norviga i być może zrealizować go dla siebie, ponieważ myślałem, że to może pomóc. – duffymo

+0

Miałem na myśli problem wyboru odpowiedniego korpusu (aby uzyskać odpowiednie częstotliwości, np. Nie częstotliwości z literatury angielskiej, ale te odpowiednie dla danych sieci społecznościowych o zmiennej jakości). Jeśli poprawnie zrozumiem kod Norviga, to w przypadku pojedynczych słów o wielkości do 2 uwzględniane są tylko odległości edycyjne. Oznacza to, że zadziała zaskakująco dobrze w przypadku pojedynczych słów, a nie w ogóle dla wielu tokenów słownych. – dareios

2

Jeśli chodzi o wypełnianie indeksu Lucene jako podstawy sprawdzania pisowni, jest to dobry sposób na rozwiązanie problemu. Lucene ma teraz pudełko, którego możesz użyć.

W sieci dostępnych jest wiele word dictionaries, które można pobrać i wykorzystać jako podstawę dla indeksu Lucene. Sugerowałbym uzupełnienie ich o szereg tekstów specyficznych dla domeny, np. jeśli twoi użytkownicy to medycy, to może uzupełnij słownik tekstami źródłowymi z pracy i publikacji medycznych.

+0

Dzięki, myślę, że budowanie indeksu Lucene będzie moją drugą próbą po tym, jak spróbowałem, czy Jazzy działa "wystarczająco dobrze". – dareios

+0

Oba łącza w tym poście wydają się być zerwane. –