web-dev-qa-db-ja.com

ユーザーが入力したテキストの言語を検出する方法は?

さまざまな言語(現在は3つの言語が修正されています)でユーザー入力を受け付けるアプリケーションを扱っています。要件は、ユーザーがテキストを入力し、UIの提供されたチェックボックスを介して言語を選択することを邪魔しないことです。

テキストの言語を検出するための既存のJava libraryがありますか?

私はこのようなものが欲しい:

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

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

print(language);

結果:

EN

言語ディテクターを自分で作成する方法を知りたくない(これをしようとしているブログをたくさん見たことがあります)。ライブラリは単純なAPiを提供し、完全にオフラインでも動作する必要があります。オープンソースまたはコマーシャルは関係ありません。

また、SO(およびそれ以上))でこの質問を見つけました:

言語の検出方法
テキストの言語の検出方法

39
ManBugra

2つのオプションがあります

20
Jay Askren

この Java用言語検出ライブラリ は、53の言語で99%以上の精度を提供します。

または、 Apache Tika があります。これは、言語検出だけではなく、コンテンツ分析用のライブラリです。

26
yvespeirsman

Googleは、これを行うことができるAPIを提供しています。昨日これに出くわし、リンクを保持しませんでしたが、もしあなたがそれをGoogleで見つけたなら、どうにかして見つけてください。

これは、翻訳APIの説明に近いもので、テキストをあなたの好きな言語に翻訳します。入力言語を推測するためだけに別の呼び出しがあります。

Googleは機械翻訳の世界的リーダーです。彼らは非常に大きなテキストのコーパス(ほとんどのインターネット、ちょっと)に基づいており、通常は巨大なサンプルスペースを持っているという理由でそれを「正しく」取得する統計的アプローチを採用しています。

編集:リンクは次のとおりです: http://code.google.com/apis/ajaxlanguage/

編集2:「オフライン」を主張する場合:よく支持された答えは Guess-Language の提案でした。 C++ライブラリであり、約60の言語を処理します。

6
Carl Smotricz

言語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);
2
Laurynas

代替手段は JLangDetect ですが、あまり堅牢ではなく、言語ベースが制限されています。良い点は、Apacheライセンスであり、要件を満たしていれば使用できることです。私はここで推測していますが、シングルジャンプイベントとダブルジャンプイベントの間のスペースキーを離しますか?バージョン0.2がリリースされました こちら

バージョン0.4では、非常に堅牢です。私は自分の多くのプロジェクトでこれを使用してきましたが、大きな問題は一度もありませんでした。また、高速化に関しては、非常に特殊化された言語検出器(たとえば、少数の言語のみ)に匹敵します。

2
Manny

ここに別のオプションがあります: Java用言語検出ライブラリ

これはJavaのライブラリです。

0
Omar Jaafor
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

0
Anand Kumar