2010-07-12 21 views
34

Ich habe es mit einer Anwendung zu tun, die Benutzereingaben in verschiedenen Sprachen akzeptiert (derzeit sind 3 Sprachen behoben). Die Anforderung besteht darin, dass Benutzer Text eingeben können und sich nicht darum kümmern, die Sprache über ein bereitgestelltes Kontrollkästchen in der Benutzeroberfläche auszuwählen.Wie erkennt man die Sprache des vom Benutzer eingegebenen Textes?

Gibt es eine bestehende Java-Bibliothek, um die Sprache eines Textes zu erkennen?

Ich möchte etwas wie folgt aus:

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

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

print(language); 

Ergebnis:

EN 

Ich möchte nicht wissen, wie die Sprache Detektor von mir zu schaffen (i viele Blogs gesehen haben versucht, TU das). Die Bibliothek sollte ein einfaches APi bereitstellen und auch komplett offline arbeiten. Open-Source oder kommerzielle geschlossen ist nicht von Bedeutung.

Ich fand auch diese Fragen auf SO (und ein paar mehr):

How to detect language
How to detect language of text?

+1

Bitte lesen Sie diese: http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of-a- Dokument –

+0

@ S.Lott: Danke, ich lese schon viel, nur auf der Suche nach einer Arbeits-Lib, die offline arbeitet, will nichts selbst erstellen. – ManBugra

+0

Zuverlässige Erkennung der natürlichen Sprache wird als ein schwieriges Problem angesehen. Jede Lösung, die in Ihren Coderaum und Ihre Festplatte passt, ist wahrscheinlich nicht sehr gut. –

Antwort

5

Google bietet eine API, die dies für Sie tun können. Ich bin erst gestern darüber gestolpert und habe keinen Link behalten, aber wenn Sie, ähm, Google dafür, sollten Sie es schaffen, es zu finden.

Dies war irgendwo in der Nähe der Beschreibung ihrer Übersetzungs-API, die den Text für Sie in jede Sprache übersetzt, die Sie mögen. Es gibt einen weiteren Anruf, nur um die Eingabesprache zu erraten.

Google gehört zu den weltweit führenden Anbietern mechanischer Übersetzungen. Sie stützen sich auf extrem große Textkorpora (das meiste des Internets, irgendwie) und einen statistischen Ansatz, der es normalerweise "einfach" macht, einfach aufgrund des riesigen Samples.

EDIT: Hier ist der Link: http://code.google.com/apis/ajaxlanguage/

EDIT 2: Wenn Sie auf "offline" bestehen: Eine gut upvoted Antwort der Vorschlag von Guess-Language war. Es ist eine C++ Bibliothek und behandelt ungefähr 60 Sprachen.

+0

dies ? -> http://code.google.com/apis/ajaxlanguage/documentation/#Detect – potatopeelings

+0

funktioniert es offline? – ManBugra

+3

@ManBugra: Nur wenn Sie eine Sicherungskopie von Googles Datenspeicher zur Hand haben;) –

2

Eine Alternative ist die JLangDetect, aber es ist nicht sehr robust und hat eine begrenzte Sprachbasis. Gut, dass es eine Apache-Lizenz ist, wenn sie Ihre Anforderungen erfüllt, können Sie sie verwenden. Ich denke hier, aber lässt du den Leertaste zwischen dem Einzel- und Doppelsprung-Event los? Version 0.2 wurde freigegeben here.

In Version 0.4 ist es sehr robust. Ich habe das in vielen eigenen Projekten benutzt und hatte nie größere Probleme. Wenn es um Geschwindigkeit geht, ist es vergleichbar mit sehr spezialisierten Sprachdetektoren (z. B. nur wenige Sprachen).

+0

Es gibt jetzt Version 0.3 Release und es erkennt sogar Bulgarisch. – nyxz

+0

Pardon, Version 0.4 ist verfügbar. – nyxz

2

Detect Language API bietet auch Java client.

Beispiel:

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); 
+0

Diese Methode erfordert eine Internetverbindung, dies muss berücksichtigt werden, bevor Sie sie in Ihrer App verwenden. –

0
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 

Profile können heruntergeladen werden unter: https://language-detection.googlecode.com/files/langdetect-09-13-2011.zip

Verwandte Themen