如何检测用户输入文字的语言?

问题描述:

我正在处理接受不同语言的用户输入的应用程序(目前固定为3种语言)。要求是用户可以输入文本,并且不用费心去通过UI中提供的复选框来选择语言。如何检测用户输入文字的语言?

是否有现有的Java库检测文本的语言?

我想是这样的:

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

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

print(language); 

结果:

EN 

我不想知道如何通过自己创建语言检测器(我已经看到很多博客的努力去做)。图书馆应该提供一个简单的APi,并且完全离线工作。开源或商业关闭并不重要。

我也发现了所以这个问题(和一些更多):

How to detect language
How to detect language of text?

+1

请仔细阅读本:http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of-a-文件 – 2010-07-12 10:12:06

+0

@ S.Lott:谢谢,我已经阅读了很多,只是寻找一个工作的脱机工作库,不想自己创建任何东西。 – ManBugra 2010-07-12 10:15:32

+0

可靠地识别自然语言被认为是一个难题。任何适合您的代码空间和硬盘的解决方案都不太可能。 – 2010-07-12 10:18:29

谷歌提供了一个API,可以为你做到这一点。我昨天偶然发现了这件事,并没有保留链接,但如果你,呃,谷歌为它,你应该设法找到它。

这是在他们的翻译API的描述附近的地方,它会将文本翻译成任何你喜欢的语言。还有一个电话只是为了猜测输入语言。

谷歌是世界机械翻译的领导者之一;他们将自己的东西建立在极其庞大的文本语料库上(大部分互联网都是这样),而且统计方法通常只是凭借一个巨大的样本空间而“正确”地获取它。

编辑:这里的链接:http://code.google.com/apis/ajaxlanguage/

编辑2:如果你坚持“离线”:一个精心upvoted答案是的Guess-Language建议。它是一个C++库,可处理大约60种语言。

+0

this ? - > http://code.google.com/apis/ajaxlanguage/documentation/#Detect – potatopeelings 2010-07-12 10:13:53

+0

离线工作吗? – ManBugra 2010-07-12 10:14:10

+3

@ManBugra:只有当你有方便的谷歌数据存储设备的备份副本;) – 2010-07-12 10:15:50

另一种方法是JLangDetect,但它不是很健壮,而且语言基础有限。好的是它是一个Apache许可证,如果它满足您的要求,您可以使用它。我在这里猜测,但是你是否在单跳和双跳事件之间释放空间键?版本0.2已发布here

在版本0.4中,它非常强大。我一直在我自己的许多项目中使用它,并且从来没有遇到任何重大问题。而且,当涉及到速度时,它可以与非常专业的语言检测器相媲美(例如,只有很少的语言)。

+0

现在有0.3版本发布,它甚至可以检测到保加利亚语。 – nyxz 2014-08-18 12:13:59

+0

赦免,版本0.4是可用的。 – nyxz 2014-08-18 12:20:45

这里是另一种选择:Language Detection Library for Java

这是Java库。

Detect Language API还提供了Java client

例子:

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

此方法需要互联网连接,在使用它之前必须考虑这一点。 – 2015-05-21 16:42:37

Language Detection Library for Java应该给超过99%的准确度为53种语言。

此外,还有Apache Tika,这是一个内容分析库,它提供的不仅仅是语言检测。

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 

配置文件可以从以下网址下载: https://language-detection.googlecode.com/files/langdetect-09-13-2011.zip