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

时间:2010-07-12 10:07:28

标签: java nlp language-detection

我正在处理一个接受不同语言用户输入的应用程序(目前修复了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,并且还可以完全脱机工作。开源或商业封闭并不重要。

我也在SO上发现了这个问题(还有一些):

How to detect language
How to detect language of text?

7 个答案:

答案 0 :(得分:25)

Language Detection Library for Java应为53种语言提供超过99%的准确率。

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

答案 1 :(得分:19)

答案 2 :(得分:5)

Google提供的API可以为您完成此操作。我昨天偶然发现了这个并没有保留链接,但如果你,嗯,谷歌,你应该设法找到它。

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

谷歌是世界机械翻译的领导者之一;他们把他们的东西建立在非常大的文本语料库(大多数互联网,有点)上,以及一种统计方法,通常只需拥有一个巨大的样本空间就能“正常”。

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

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

答案 3 :(得分:2)

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

在0.4版本中它非常强大。我一直在自己的许多项目中使用它,从来没有遇到任何重大问题。此外,当谈到速度时,它与非常专业的语言检测器(例如,仅有少数语言)相当。

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

这是Java中的一个库。

答案 6 :(得分: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

个人资料可以从以下网址下载: https://language-detection.googlecode.com/files/langdetect-09-13-2011.zip