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.