TIKA - Spracherkennung
Notwendigkeit der Spracherkennung
Für die Klassifizierung von Dokumenten anhand der Sprache, in der sie auf einer mehrsprachigen Website geschrieben sind, wird ein Tool zur Spracherkennung benötigt. Dieses Tool sollte Dokumente ohne Sprachanmerkungen (Metadaten) akzeptieren und diese Informationen in die Metadaten des Dokuments einfügen, indem die Sprache erkannt wird.
Algorithmen zur Profilerstellung Corpus
Was ist Korpus?
Um die Sprache eines Dokuments zu erkennen, wird ein Sprachprofil erstellt und mit dem Profil der bekannten Sprachen verglichen. Der Textsatz dieser bekannten Sprachen ist als a bekanntcorpus.
Ein Korpus ist eine Sammlung von Texten einer geschriebenen Sprache, die erklärt, wie die Sprache in realen Situationen verwendet wird.
Der Korpus wird aus Büchern, Transkripten und anderen Datenquellen wie dem Internet entwickelt. Die Genauigkeit des Korpus hängt von dem Profilierungsalgorithmus ab, den wir zum Einrahmen des Korpus verwenden.
Was sind Profilierungsalgorithmen?
Die übliche Methode zum Erkennen von Sprachen ist die Verwendung von Wörterbüchern. Die in einem bestimmten Text verwendeten Wörter werden mit denen in den Wörterbüchern abgeglichen.
Eine Liste gebräuchlicher Wörter, die in einer Sprache verwendet werden, ist das einfachste und effektivste Korpus zum Erkennen einer bestimmten Sprache, z. B. von Artikeln a, an, the auf Englisch.
Verwenden von Wortsätzen als Korpus
Unter Verwendung von Wortsätzen wird ein einfacher Algorithmus erstellt, um den Abstand zwischen zwei Korpora zu ermitteln, der der Summe der Unterschiede zwischen den Häufigkeiten übereinstimmender Wörter entspricht.
Solche Algorithmen leiden unter den folgenden Problemen:
Da die Häufigkeit übereinstimmender Wörter sehr gering ist, kann der Algorithmus mit kleinen Texten mit wenigen Sätzen nicht effizient arbeiten. Es benötigt viel Text für eine genaue Übereinstimmung.
Es kann keine Wortgrenzen für Sprachen mit zusammengesetzten Sätzen und für Sprachen ohne Wortteiler wie Leerzeichen oder Satzzeichen erkennen.
Aufgrund dieser Schwierigkeiten bei der Verwendung von Wortsätzen als Korpus werden einzelne Zeichen oder Zeichengruppen berücksichtigt.
Zeichensätze als Korpus verwenden
Da die in einer Sprache häufig verwendeten Zeichen eine begrenzte Anzahl haben, ist es einfach, einen Algorithmus anzuwenden, der auf Worthäufigkeiten und nicht auf Zeichen basiert. Dieser Algorithmus funktioniert noch besser bei bestimmten Zeichensätzen, die in einer oder sehr wenigen Sprachen verwendet werden.
Dieser Algorithmus weist die folgenden Nachteile auf:
Es ist schwierig, zwei Sprachen mit ähnlichen Zeichenfrequenzen zu unterscheiden.
Es gibt kein spezielles Werkzeug oder Algorithmus, um eine Sprache mithilfe (als Korpus) des von mehreren Sprachen verwendeten Zeichensatzes spezifisch zu identifizieren.
N-Gramm-Algorithmus
Die oben genannten Nachteile führten zu einem neuen Ansatz, Zeichenfolgen einer bestimmten Länge für die Profilierung des Korpus zu verwenden. Eine solche Folge von Zeichen wird im Allgemeinen als N-Gramm bezeichnet, wobei N die Länge der Zeichenfolge darstellt.
Der N-Gramm-Algorithmus ist ein effektiver Ansatz zur Spracherkennung, insbesondere bei europäischen Sprachen wie Englisch.
Dieser Algorithmus funktioniert gut mit kurzen Texten.
Obwohl es erweiterte Sprachprofilierungsalgorithmen gibt, mit denen mehrere Sprachen in einem mehrsprachigen Dokument mit attraktiveren Funktionen erkannt werden können, verwendet Tika den 3-Gramm-Algorithmus, da er in den meisten praktischen Situationen geeignet ist.
Spracherkennung in Tika
Unter allen 184 durch ISO 639-1 standardisierten Standardsprachen kann Tika 18 Sprachen erkennen. Die Spracherkennung in Tika erfolgt mit demgetLanguage() Methode der LanguageIdentifierKlasse. Diese Methode gibt den Codenamen der Sprache im String-Format zurück. Nachstehend finden Sie eine Liste der 18 von Tika erkannten Sprachcode-Paare.
da - dänisch | de-deutsch | et-Estnisch | el - Griechisch |
de - Englisch | es - Spanisch | fi - finnisch | fr - Französisch |
hu - ungarisch | ist - Isländisch | es - italienisch | nl - Niederländisch |
nein - norwegisch | pl - polnisch | pt - Portugiesisch | ru - russisch |
sv - schwedisch | th - Thai |
Während der Instanziierung der LanguageIdentifier Klasse sollten Sie das String-Format des zu extrahierenden Inhalts übergeben, oder a LanguageProfile Klassenobjekt.
LanguageIdentifier object = new LanguageIdentifier(“this is english”);
Im Folgenden finden Sie ein Beispielprogramm für die Spracherkennung in 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);
}
}
Speichern Sie den obigen Code als LanguageDetection.java und führen Sie es an der Eingabeaufforderung mit den folgenden Befehlen aus:
javac LanguageDetection.java
java LanguageDetection
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe
Language of the given content is : en
Spracherkennung eines Dokuments
Um die Sprache eines bestimmten Dokuments zu erkennen, müssen Sie es mit der parse () -Methode analysieren. Die parse () -Methode analysiert den Inhalt und speichert ihn im Handler-Objekt, das als eines der Argumente an ihn übergeben wurde. Übergeben Sie das String-Format des Handler-Objekts an den Konstruktor desLanguageIdentifier Klasse wie unten gezeigt -
parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());
Im Folgenden finden Sie das vollständige Programm, das zeigt, wie die Sprache eines bestimmten Dokuments erkannt wird.
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());
}
}
Speichern Sie den obigen Code als SetMetadata.java und führen Sie ihn an der Eingabeaufforderung aus.
javac SetMetadata.java
java SetMetadata
Unten ist der Inhalt von Example.txt angegeben.
Hi students welcome to tutorialspoint
Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:
Language name :en
Zusammen mit der Tika-JAR bietet Tika eine grafische Benutzeroberfläche (GUI) und eine Befehlszeilenschnittstelle (CLI) an. Sie können eine Tika-Anwendung wie andere Java-Anwendungen auch über die Eingabeaufforderung ausführen.