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

我正在处理一个正在接受不同语言的用户input的应用程序(目前固定为3种语言)。 要求是用户可以input文本,而不用麻烦通过UI中提供的checkbox来select语言。

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

我想要这样的东西:

text = "To be or not to be thats the question." // returns ISO 639 Alpha-2 code language = detect(text); print(language); 

结果:

 EN 

我不想知道如何创build自己的语言检测器 (我已经看到很多博客试图做到这一点)。 图书馆应提供一个简单的APi,并完全离线工作。 开源或商业closures并不重要。

我也发现了这个问题(还有几个):

如何检测语言
如何检测文字的语言?

这里有两个选项

  • LanguageIdentifier
  • 玫瑰花语言标识符

这种Java语言检测库应该为53种语言提供99%以上的准确性。

或者, Apache Tika是一个用于内容分析的库,它提供的不仅仅是语言检测。

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

这在他们的翻译API的描述附近,这将翻译为您喜欢的任何语言的文本。 还有一个电话只是猜测input语言。

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

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

编辑2:如果你坚持“脱机”:一个良好的upvoted答案是猜测语言的build议。 这是一个C ++库,可处理大约60种语言。

Detect Language API还提供Java客户端 。

例:

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

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

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

这里是另一个选项: 用于Java的语言检测库

这是一个Java库。

 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 

configuration文件可以从以下url下载: https : //language-detection.googlecode.com/files/langdetect-09-13-2011.zip