web-dev-qa-db-fra.com

Comment détecter la langue du texte saisi par l'utilisateur?

J'ai affaire à une application qui accepte les entrées des utilisateurs dans différentes langues (actuellement 3 langues fixes). La condition est que les utilisateurs puissent saisir du texte et ne prennent pas la peine de sélectionner la langue via une case à cocher fournie dans l'interface utilisateur.

Existe-t-il une bibliothèque existante Java pour détecter la langue d'un texte?

Je veux quelque chose comme ça:

text = "To be or not to be thats the question."

// returns ISO 639 Alpha-2 code
language = detect(text);

print(language);

résultat:

EN

Je ne veux pas savoir comment créer un détecteur de langue par moi-même (j'ai vu beaucoup de blogs essayer de le faire). La bibliothèque doit fournir un APi simple et également fonctionner complètement hors ligne. L'open source ou la fermeture commerciale n'a pas d'importance.

j'ai également trouvé ces questions sur SO (et quelques autres):

Comment détecter la langue
Comment détecter la langue du texte?

39
ManBugra
20
Jay Askren

Cette Language Detection Library for Java devrait donner une précision de plus de 99% pour 53 langues.

Alternativement, il y a Apache Tika , une bibliothèque pour l'analyse de contenu qui offre bien plus que la simple détection de la langue.

26
yvespeirsman

Google propose une API qui peut le faire pour vous. Je suis juste tombé dessus hier et je n'ai pas gardé de lien, mais si vous, euh, Google pour ça, vous devriez réussir à le trouver.

C'était quelque part près de la description de leur API de traduction, qui traduira le texte pour vous dans n'importe quelle langue que vous aimez. Il y a un autre appel juste pour deviner la langue d'entrée.

Google fait partie des leaders mondiaux de la traduction mécanique; ils basent leurs trucs sur des corpus de texte extrêmement volumineux (la plupart d'Internet, en quelque sorte) et une approche statistique qui "réussit" généralement simplement parce qu'elle a un énorme espace d'échantillonnage.

EDIT: voici le lien: http://code.google.com/apis/ajaxlanguage/

EDIT 2: Si vous insistez sur "hors ligne": Une réponse bien votée était la suggestion de Guess-Language . C'est une bibliothèque C++ et gère environ 60 langues.

6
Carl Smotricz

Detect Language API fournit également client Java .

Exemple:

List<Result> results = DetectLanguage.detect("Hello world");

Result result = results.get(0);

System.out.println("Language: " + result.language);
System.out.println("Is reliable: " + result.reliable);
System.out.println("Confidence: " + result.confidence);
2
Laurynas

Une alternative est le JLangDetect mais il n'est pas très robuste et a une base de langage limitée. Heureusement, c'est une licence Apache, si elle répond à vos besoins, vous pouvez l'utiliser. Je suppose ici, mais relâchez-vous la touche espace entre l'événement de saut simple et double? La version 0.2 est sortie ici .

Dans la version 0.4, il est très robuste. Je l'ai utilisé dans de nombreux projets et je n'ai jamais eu de problèmes majeurs. En outre, en ce qui concerne la vitesse, il est comparable à des détecteurs de langue très spécialisés (par exemple, peu de langues uniquement).

2
Manny

voici une autre option: Bibliothèque de détection de langue pour Java

c'est une bibliothèque en Java.

0
Omar Jaafor
Just a working code from already available solution from cybozu labs:

package com.et.generate;

import Java.util.ArrayList;
import com.cybozu.labs.langdetect.Detector;
import com.cybozu.labs.langdetect.DetectorFactory;
import com.cybozu.labs.langdetect.LangDetectException;
import com.cybozu.labs.langdetect.Language;

public class LanguageCodeDetection {

    public void init(String profileDirectory) throws LangDetectException {
        DetectorFactory.loadProfile(profileDirectory);
    }
    public String detect(String text) throws LangDetectException {
        Detector detector = DetectorFactory.create();
        detector.append(text);
        return detector.detect();
    }
    public ArrayList<Language> detectLangs(String text) throws LangDetectException {
        Detector detector = DetectorFactory.create();
        detector.append(text);
        return detector.getProbabilities();
    }
    public static void main(String args[]) {
        try {
            LanguageCodeDetection ld = new  LanguageCodeDetection();

            String profileDirectory = "C:/profiles/";
            ld.init(profileDirectory);
            String text = "Кремль россий";
            System.out.println(ld.detectLangs(text));
            System.out.println(ld.detect(text));
        } catch (LangDetectException e) {
            e.printStackTrace();
        }
    }

}

Output:
[ru:0.9999983255911719]
ru

Les profils peuvent être téléchargés à partir de: https://language-detection.googlecode.com/files/langdetect-09-13-2011.Zip

0
Anand Kumar