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