2010-07-12 2 views
34

Я имею дело с приложением, которое принимает ввод пользователя на разных языках (в настоящее время 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 (и еще несколько):

How to detect language
How to detect language of text?

+1

Пожалуйста, прочитайте это: http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of-a- document –

+0

@ S.Lott: Спасибо, я уже много читал, просто ищет рабочую библиотеку, которая работает в автономном режиме, не хочет ничего создавать самостоятельно. – ManBugra

+0

Надежное распознавание естественного языка считается трудной проблемой. Любое решение, которое подходит для вашего кодового пространства и жесткого диска, вряд ли будет очень хорошим. –

ответ

5

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

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

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

EDIT: Вот ссылка: http://code.google.com/apis/ajaxlanguage/

EDIT 2: Если вы настаиваете на "автономном режиме": Хорошо upvoted ответ внушение Guess-Language. Это библиотека C++ и обрабатывает около 60 языков.

+0

это ? -> http://code.google.com/apis/ajaxlanguage/documentation/#Detect – potatopeelings

+0

работает ли он в автономном режиме? – ManBugra

+3

@ManBugra: Только если у вас есть резервная копия хранилища данных Google, удобная;) –

2

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

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

+0

Теперь есть версия версии 0.3, и она обнаруживает даже болгарский. – nyxz

+0

Прощение, версия 0.4 доступна. – nyxz

2

Detect Language API также предоставляет Java client.

Пример:

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); 
+0

Этот метод требует подключения к Интернету, это необходимо учитывать перед его использованием в вашем приложении. –

21

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

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

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

Смежные вопросы