Подтвердить что ты не робот

Как определить язык введенного пользователем текста?

Я имею дело с приложением, которое принимает ввод пользователя на разных языках (в настоящее время 3 фиксированных языка). Требование состоит в том, чтобы пользователи могли вводить текст и не беспокоиться, чтобы выбрать язык через предоставленный флажок в пользовательском интерфейсе.

Существует ли существующая библиотека 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 (и еще несколько):

Как определить язык
Как определить язык текста?

4b9b3361

Ответ 2

Эта библиотека Language Detection Library для Java должна обеспечивать точность более 99% для 53 языков.

В качестве альтернативы существует Apache Tika, библиотека для анализа контента, которая предлагает гораздо больше, чем просто определение языка.

Ответ 3

Google предлагает API, который может сделать это за вас. Я только что наткнулся на это вчера и не сохранил ссылку, но если вы, ммм, Google, вам это удастся найти.

Это было где-то рядом с описанием их API перевода, который переведет текст для вас на любой язык, который вам нравится. Там еще один вызов для угадывания языка ввода.

Google входит в число мировых лидеров в области механического перевода; они основывают свой материал на чрезвычайно больших корпусах текста (большая часть Интернета, своего рода) и статистическом подходе, который обычно "получает" его правильно просто благодаря наличию огромного пространства образца.

EDIT: Здесь ссылка: http://code.google.com/apis/ajaxlanguage/

РЕДАКТИРОВАТЬ 2: Если вы настаиваете на "offline": хорошо поддержанный ответ был предложением Guess-Language. Это библиотека С++ и обрабатывает около 60 языков.

Ответ 4

Альтернативой является JLangDetect, но она не очень надежна и имеет ограниченную языковую базу. Хорошо, что это лицензия Apache, если она удовлетворяет вашим требованиям, вы можете ее использовать. Я предполагаю здесь, но вы освобождаете пробел между событием одиночного и двойного прыжка? Версия 0.2 была выпущена здесь.

В версии 0.4 он очень надежный. Я использовал это во многих моих проектах и ​​никогда не испытывал серьезных проблем. Кроме того, когда дело доходит до скорости, это сопоставимо с очень специализированными языковыми детекторами (например, только на нескольких языках).

Ответ 5

Обнаружение языкового 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);

Ответ 7

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