TIKA - Détection de langue
Besoin de détection de la langue
Pour classer les documents en fonction de la langue dans laquelle ils sont écrits sur un site Web multilingue, un outil de détection de la langue est nécessaire. Cet outil doit accepter les documents sans annotation de langue (métadonnées) et ajouter ces informations dans les métadonnées du document en détectant la langue.
Algorithmes de profilage du corpus
Qu'est-ce que Corpus?
Pour détecter la langue d'un document, un profil de langue est construit et comparé au profil des langues connues. L'ensemble de texte de ces langues connues est appelécorpus.
Un corpus est une collection de textes d'une langue écrite qui explique comment la langue est utilisée dans des situations réelles.
Le corpus est développé à partir de livres, de transcriptions et d'autres ressources de données comme Internet. La précision du corpus dépend de l'algorithme de profilage que nous utilisons pour encadrer le corpus.
Que sont les algorithmes de profilage?
La méthode courante de détection des langues consiste à utiliser des dictionnaires. Les mots utilisés dans un morceau de texte donné seront mis en correspondance avec ceux qui sont dans les dictionnaires.
Une liste de mots courants utilisés dans une langue sera le corpus le plus simple et le plus efficace pour détecter une langue particulière, par exemple des articles a, an, the en anglais.
Utilisation d'ensembles de mots comme corpus
En utilisant des ensembles de mots, un algorithme simple est encadré pour trouver la distance entre deux corpus, qui sera égale à la somme des différences entre les fréquences des mots correspondants.
Ces algorithmes souffrent des problèmes suivants -
Comme la fréquence de correspondance des mots est très inférieure, l'algorithme ne peut pas fonctionner efficacement avec de petits textes contenant peu de phrases. Il a besoin de beaucoup de texte pour une correspondance précise.
Il ne peut pas détecter les limites de mots pour les langues ayant des phrases composées, et celles n'ayant pas de séparateurs de mots comme les espaces ou les signes de ponctuation.
En raison de ces difficultés d'utilisation des ensembles de mots comme corpus, des caractères individuels ou des groupes de caractères sont pris en compte.
Utilisation des jeux de caractères comme corpus
Comme les caractères couramment utilisés dans une langue sont en nombre fini, il est facile d'appliquer un algorithme basé sur la fréquence des mots plutôt que sur les caractères. Cet algorithme fonctionne encore mieux dans le cas de certains jeux de caractères utilisés dans une ou très peu de langues.
Cet algorithme souffre des inconvénients suivants -
Il est difficile de différencier deux langues ayant des fréquences de caractères similaires.
Il n'y a pas d'outil ou d'algorithme spécifique pour identifier spécifiquement une langue à l'aide (en tant que corpus) du jeu de caractères utilisé par plusieurs langues.
Algorithme N-gramme
Les inconvénients évoqués ci-dessus ont donné lieu à une nouvelle approche d'utilisation de séquences de caractères d'une longueur donnée pour le profilage de corpus. Une telle séquence de caractères est appelée en général N-grammes, où N représente la longueur de la séquence de caractères.
L'algorithme N-gram est une approche efficace pour la détection de la langue, en particulier dans le cas de langues européennes comme l'anglais.
Cet algorithme fonctionne très bien avec des textes courts.
Bien qu'il existe des algorithmes de profilage de langue avancés pour détecter plusieurs langues dans un document multilingue ayant des fonctionnalités plus attrayantes, Tika utilise l'algorithme de 3 grammes, car il convient à la plupart des situations pratiques.
Détection de la langue dans Tika
Parmi les 184 langues standard normalisées par ISO 639-1, Tika peut détecter 18 langues. La détection de la langue dans Tika se fait à l'aide dugetLanguage() méthode de la LanguageIdentifierclasse. Cette méthode renvoie le nom de code de la langue au format String. Ci-dessous, la liste des 18 paires de codes de langue détectées par Tika -
da: danois | de — allemand | et — Estonien | el — grec |
en — anglais | es: espagnol | fi: finnois | fr — français |
hu: hongrois | is-islandais | it — italien | nl: néerlandais |
non: norvégien | pl: polonais | pt: portugais | ru: russe |
sv: suédois | th — thaï |
Lors de l'instanciation du LanguageIdentifier class, vous devez transmettre le format String du contenu à extraire, ou un LanguageProfile objet de classe.
LanguageIdentifier object = new LanguageIdentifier(“this is english”);
Vous trouverez ci-dessous l'exemple de programme pour la détection de la langue dans 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);
}
}
Enregistrez le code ci-dessus sous LanguageDetection.java et exécutez-le à partir de l'invite de commande en utilisant les commandes suivantes -
javac LanguageDetection.java
java LanguageDetection
Si vous exécutez le programme ci-dessus, il donne l'outpu:
Language of the given content is : en
Détection de la langue d'un document
Pour détecter la langue d'un document donné, vous devez l'analyser en utilisant la méthode parse (). La méthode parse () analyse le contenu et le stocke dans l'objet gestionnaire, qui lui a été passé comme l'un des arguments. Transmettez le format String de l'objet handler au constructeur duLanguageIdentifier classe comme indiqué ci-dessous -
parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());
Vous trouverez ci-dessous le programme complet qui montre comment détecter la langue d'un document donné -
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());
}
}
Enregistrez le code ci-dessus sous SetMetadata.java et exécutez-le à partir de l'invite de commande -
javac SetMetadata.java
java SetMetadata
Ci-dessous, le contenu de Example.txt.
Hi students welcome to tutorialspoint
Si vous exécutez le programme ci-dessus, il vous donnera la sortie suivante -
Language name :en
Avec le jar Tika, Tika fournit une application d'interface utilisateur graphique (GUI) et une application d'interface de ligne de commande (CLI). Vous pouvez également exécuter une application Tika à partir de l'invite de commande, comme d'autres applications Java.