43

我正在处理一个接受不同语言的用户输入的应用程序(目前已修复 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(以及更多)上发现了这个问题:

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

4

7 回答 7

31

这个Java 语言检测库应该为 53 种语言提供超过 99% 的准确率。

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

于 2015-05-15T07:01:40.180 回答
20

这里有两个选项

于 2010-07-12T21:16:15.137 回答
6

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

这与他们的翻译 API 的描述相近,它将为您将文本翻译成您喜欢的任何语言。还有另一个调用只是为了猜测输入语言。

谷歌在机械翻译领域处于世界领先地位;他们将他们的东西建立在非常大的文本语料库(大部分互联网,有点像)和一种统计方法上,这种方法通常仅仅凭借拥有巨大的样本空间就可以“得到”它。

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

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

于 2010-07-12T10:11:44.763 回答
2

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

在 0.4 版中,它非常健壮。我一直在我自己的许多项目中使用它,并且从未遇到任何重大问题。此外,在速度方面,它与非常专业的语言检测器相当(例如,只有少数语言)。

于 2010-07-12T10:19:40.000 回答
1

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);
于 2013-10-21T19:47:10.650 回答
0

这是另一种选择:Java 语言检测库

这是一个 Java 库。

于 2013-07-10T12:38:53.077 回答
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

于 2015-08-04T13:31:44.380 回答