TIKA - wykrywanie języka

Potrzeba wykrywania języka

Do klasyfikacji dokumentów na podstawie języka, w jakim są napisane na wielojęzycznej witrynie internetowej, potrzebne jest narzędzie do wykrywania języka. To narzędzie powinno akceptować dokumenty bez adnotacji językowej (metadane) i dodawać te informacje do metadanych dokumentu poprzez wykrywanie języka.

Algorytmy profilowania korpusu

Co to jest Corpus?

Aby wykryć język dokumentu, konstruuje się profil językowy i porównuje go z profilem znanych języków. Zestaw tekstów tych znanych języków jest znany jakocorpus.

Korpus to zbiór tekstów w języku pisanym, który wyjaśnia, w jaki sposób język jest używany w rzeczywistych sytuacjach.

Korpus jest tworzony na podstawie książek, transkrypcji i innych zasobów danych, takich jak Internet. Dokładność korpusu zależy od algorytmu profilowania, którego używamy do oprawiania korpusu.

Co to są algorytmy profilowania?

Typowym sposobem wykrywania języków jest używanie słowników. Słowa użyte w danym fragmencie tekstu zostaną dopasowane do tych, które znajdują się w słownikach.

Lista typowych słów używanych w języku będzie najprostszym i najskuteczniejszym korpusem do wykrywania określonego języka, na przykład artykułów a, an, the po angielsku.

Używanie zestawów słów jako korpusu

Używając zestawów słów, formuje się prosty algorytm, aby znaleźć odległość między dwoma korpusami, która będzie równa sumie różnic między częstotliwościami pasujących słów.

Takie algorytmy mają następujące problemy -

  • Ponieważ częstotliwość dopasowywania słów jest bardzo mniejsza, algorytm nie może wydajnie pracować z małymi tekstami zawierającymi kilka zdań. Do dokładnego dopasowania potrzeba dużo tekstu.

  • Nie może wykryć granic słów w językach, w których występują zdania złożone, ani w językach, w których nie ma separatorów słów, takich jak spacje lub znaki interpunkcyjne.

Ze względu na te trudności w używaniu zestawów słów jako korpusu, rozważane są pojedyncze znaki lub grupy znaków.

Używanie zestawów znaków jako korpusu

Ponieważ liczba znaków powszechnie używanych w języku jest skończona, łatwo jest zastosować algorytm oparty na częstotliwościach słów, a nie na znakach. Algorytm ten działa jeszcze lepiej w przypadku niektórych zestawów znaków używanych w jednym lub kilku językach.

Ten algorytm ma następujące wady -

  • Trudno jest rozróżnić dwa języki o podobnych częstotliwościach znaków.

  • Nie ma żadnego konkretnego narzędzia ani algorytmu do konkretnej identyfikacji języka za pomocą (jako korpusu) zestawu znaków używanego w wielu językach.

Algorytm N-gramowy

Wyżej wymienione wady dały początek nowemu podejściu do wykorzystywania sekwencji znaków o określonej długości do profilowania korpusu. Taka sekwencja znaków jest ogólnie nazywana N-gramami, gdzie N reprezentuje długość ciągu znaków.

  • Algorytm N-gramowy jest skutecznym podejściem do wykrywania języka, szczególnie w przypadku języków europejskich, takich jak angielski.

  • Ten algorytm działa dobrze z krótkimi tekstami.

  • Chociaż istnieją zaawansowane algorytmy profilowania języka do wykrywania wielu języków w wielojęzycznym dokumencie o bardziej atrakcyjnych funkcjach, Tika używa algorytmu 3-gramowego, ponieważ jest on odpowiedni w większości praktycznych sytuacji.

Wykrywanie języka w Tika

Spośród wszystkich 184 standardowych języków standaryzowanych przez ISO 639-1 Tika może wykryć 18 języków. Wykrywanie języka w Tika odbywa się za pomocągetLanguage() metoda LanguageIdentifierklasa. Ta metoda zwraca nazwę kodową języka w formacie String. Poniżej znajduje się lista 18 par języków i kodów wykrytych przez Tika -

da - duński de - niemiecki et - estoński el - grecki
en - angielski es - hiszpański fi - fiński fr - francuski
hu - węgierski jest - islandzki it - włoski nl - holenderski
nie - norweski pl - polski pt - portugalski ru - rosyjski
sv - szwedzki th - tajski

Podczas tworzenia wystąpienia LanguageIdentifier należy przekazać format String treści do wyodrębnienia lub plik LanguageProfile obiekt klasy.

LanguageIdentifier object = new LanguageIdentifier(“this is english”);

Poniżej podano przykładowy program do wykrywania języka w Tika.

import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.language.LanguageIdentifier;

import org.xml.sax.SAXException;

public class LanguageDetection {

   public static void main(String args[])throws IOException, SAXException, TikaException {

      LanguageIdentifier identifier = new LanguageIdentifier("this is english ");
      String language = identifier.getLanguage();
      System.out.println("Language of the given content is : " + language);
   }
}

Zapisz powyższy kod jako LanguageDetection.java i uruchom go z wiersza polecenia, używając następujących poleceń -

javac  LanguageDetection.java 
java  LanguageDetection

Jeśli uruchomisz powyższy program, otrzymasz następujące wyjście

Language of the given content is : en

Wykrywanie języka w dokumencie

Aby wykryć język danego dokumentu, musisz go przeanalizować za pomocą metody parse (). Metoda parse () analizuje zawartość i przechowuje ją w obiekcie handler, który został przekazany do niej jako jeden z argumentów. Przekaż format String obiektu obsługi do konstruktora klasyLanguageIdentifier klasa, jak pokazano poniżej -

parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());

Poniżej przedstawiono kompletny program, który pokazuje, jak wykryć język danego dokumentu -

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.language.*;

import org.xml.sax.SAXException;

public class DocumentLanguageDetection {

   public static void main(final String[] args) throws IOException, SAXException, TikaException {

      //Instantiating a file object
      File file = new File("Example.txt");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream content = new FileInputStream(file);

      //Parsing the given document
      parser.parse(content, handler, metadata, new ParseContext());

      LanguageIdentifier object = new LanguageIdentifier(handler.toString());
      System.out.println("Language name :" + object.getLanguage());
   }
}

Zapisz powyższy kod jako SetMetadata.java i uruchom go z wiersza polecenia -

javac  SetMetadata.java 
java  SetMetadata

Poniżej podano zawartość pliku Example.txt.

Hi students welcome to tutorialspoint

Jeśli wykonasz powyższy program, da ci on następujący wynik -

Language name :en

Wraz z jar Tika, Tika dostarcza aplikację z graficznym interfejsem użytkownika (GUI) i aplikację z interfejsem wiersza poleceń (CLI). Możesz uruchomić aplikację Tika z wiersza poleceń, podobnie jak inne aplikacje Java.