Ответ 1
Вот два варианта
Я имею дело с приложением, которое принимает ввод пользователя на разных языках (в настоящее время 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 (и еще несколько):
Как определить язык
Как определить язык текста?
Вот два варианта
Эта библиотека Language Detection Library для Java должна обеспечивать точность более 99% для 53 языков.
В качестве альтернативы существует Apache Tika, библиотека для анализа контента, которая предлагает гораздо больше, чем просто определение языка.
Google предлагает API, который может сделать это за вас. Я только что наткнулся на это вчера и не сохранил ссылку, но если вы, ммм, Google, вам это удастся найти.
Это было где-то рядом с описанием их API перевода, который переведет текст для вас на любой язык, который вам нравится. Там еще один вызов для угадывания языка ввода.
Google входит в число мировых лидеров в области механического перевода; они основывают свой материал на чрезвычайно больших корпусах текста (большая часть Интернета, своего рода) и статистическом подходе, который обычно "получает" его правильно просто благодаря наличию огромного пространства образца.
EDIT: Здесь ссылка: http://code.google.com/apis/ajaxlanguage/
РЕДАКТИРОВАТЬ 2: Если вы настаиваете на "offline": хорошо поддержанный ответ был предложением Guess-Language. Это библиотека С++ и обрабатывает около 60 языков.
Альтернативой является JLangDetect, но она не очень надежна и имеет ограниченную языковую базу. Хорошо, что это лицензия Apache, если она удовлетворяет вашим требованиям, вы можете ее использовать. Я предполагаю здесь, но вы освобождаете пробел между событием одиночного и двойного прыжка? Версия 0.2 была выпущена здесь.
В версии 0.4 он очень надежный. Я использовал это во многих моих проектах и никогда не испытывал серьезных проблем. Кроме того, когда дело доходит до скорости, это сопоставимо с очень специализированными языковыми детекторами (например, только на нескольких языках).
Обнаружение языкового 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);
вот еще один вариант: Библиотека обнаружения языков для 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
Профили можно загрузить с: https://language-detection.googlecode.com/files/langdetect-09-13-2011.zip