Identyfikacja języka dokumentu

Jedną z funkcjonalności najnowszej wersji Solr (czyli 3.5) jest możliwość identyfikacji języka indekowanego dokumentu na etapie indeksowania. Dzisiejszy wpis postanowiłem poświęcić tej funkcjonalności i przyjrzeć się jak tym razem Apache Solr współgra z Apache Tika.

Na początek

Należy pamiętać, iż opisywana funkcjonalność została wprowadzona w Solr w wersji 3.5.

Założenia

Język będziemy wykrywać na postawie dwóch pól: title oraz body. Chcemy, aby wykryty język został zapisany w polu o nazwie lang.

Struktura naszego indeksu

Struktura indeksu jest oczywiście mocno uproszczona i zawiera jedynie pola potrzebne do testu. Sama definicja pól wygląda następująco:

Wszystkie pola oznaczone są jako stored=”true”, aby zobaczyć wynik przetwarzania dokumentu przez procesor.

Konfiguracja update request processor’a

Aby móc wykorzystać funkcjonalność identyfikacji języka dokumentu konieczna jest konfiguacja następujących procesora aktualizacji. Skorzystamy z procesora opartego o Apache Tika (choć istnieje także druga implementacja oparta o http://code.google.com/p/language-detection/).  W tym celu dodajemy następujący update request processor do pliku solrconfig.xml:

Inne parametry TikaLanguageIdentifierUpdateProcessorFactory opisane są na wiki Apache Solr pod adresem: http://wiki.apache.org/solr/LanguageDetection.

Dodatkowe, potrzebne biblioteki

Aby powyższa zmiana zaczęła działać potrzebujemy jeszcze dodatkowych bibliotek, a dokładniej jednej biblioteki. Z katalogu dist, który znajduje się w dystrybucji Solr kopiujemy plik apache-solr-langid-3.5.0.jar do np. katalogu tikaDir, który tworzyny na tym samym poziomie co katalog webapps w Solr. Oraz dodajemy następującą linię do pliku solrconfig.xml:

Następna biblioteka, której potrzebujemy to Tika wraz z przyległościami (tika-app-1.0.jar) dostępna np. pod adresem: http://tika.apache.org/. Po skopiowaniu do katalogu tikaDir dodajemy następujący wpis do pliku solrconfig.xml:

Testowe dokumenty

Do testów przygotowałem trzy dokumenty zawierające po jednym dokumencie w języku angielskim, polskim oraz niemieckim. Ich treść została pobrana z Wikipedii. Wyglądają następująco:

tika_en.xml

tika_pl.xml

tika_de.xml

Testowanie działania

Aby zaindeksować dane wywołałem następującą serię poleceń:

Warto zauważyć, dodatkowy parameter update.chain=langid dodawany do requestu. Określna on update processor jaki powinien zostać użyty do przetwarzania danych. W tym wypadku chcemy, aby był to nasz zdefiniowany update processor.

Zaindeksowane dane

Sprawdźmy zatem co zostało zaindeksowane. Zróbmy to poprzez wysłanie następującego zapytania: q=*:*&indent=true.

Jak widać, Solr przy pomocy biblioteki Tika, był w stanie poprawnie określić język trzech dokumentów jakie wysłaliśmy do indeksowania. Oczywiście, nie cieszmy się zbyt wcześnie, ponieważ pomyłki będą się zdarzać, szczególnie w przypadku, kiedy w ramach jednego dokumentu wykorzystywanych jest wiele języków.

Podsumowanie

Należy pamiętać, iż funkcjonalność detekcji języka dokumentu nie jest idealna i może się mylić. Dodatkowo, im dłuższe dokumenty, tym dokładniej będzie działać opisywana funkcjonalność. Oczywiście problemem jest to, że nie jesteśmy w stanie wykrywać języka podczas wyszukiwania, jednak nie jest to tylko problem Solr. Z tym możemy radzić sobie poprzez identyfikację przeglądarki użytkownika, języka w niej wykorzystywanej, bądź identyfikacji miejsca z którego łączy się do naszej aplikacji.

One thought on “Identyfikacja języka dokumentu

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.