Se sei interessato al meccanismo con cui è possibile eseguire il rilevamento della lingua, ti rimando al seguente article (basato su python) che utilizza un metodo (molto) ingenuo ma è una buona introduzione a questo problema in particolare e machine learning (solo una parolona) in generale.
Per le implementazioni java, JLangDetect e Nutch, come suggerito dagli altri poster, sono piuttosto buoni. Date anche un'occhiata a Lingpipe, JTCL e NGramJ.
Per il problema in cui si dispone di più lingue nella stessa pagina, è possibile utilizzare un rilevatore di condanna di confine per tagliare una pagina in frasi e quindi tentare di identificare la lingua di ogni frase. Supponendo che una frase contenga solo una (primaria) lingua, si dovrebbero comunque ottenere buoni risultati con una qualsiasi delle suddette implementazioni.
Nota: un rilevatore di limiti di frase (SBD) è teoricamente specifico del linguaggio (problema dell'uovo di gallina poiché è necessario l'uno per l'altro). Ma per le lingue basate su script latini (inglese, francese, tedesco, ecc.) Che utilizzano principalmente periodi (tranne esclamazioni, ecc.) Per delimitare le frasi, otterrete risultati accettabili anche se utilizzate una SBD progettata per l'inglese. Ho scritto un SBD inglese basato su regole che ha funzionato molto bene per il testo francese. Per le implementazioni, dai un'occhiata a OpenNLP.
Un'opzione alternativa all'uso della SBD è quello di utilizzare una finestra scorrevole di dire 10 gettoni (delimitata da spazi bianchi) per creare un pseudo-frase (PS) e cercare di identificare il confine in cui la lingua cambia. Questo ha lo svantaggio che se il tuo intero documento ha n token, eseguirai approssimativamente n-10 operazioni di classificazione su stringhe di lunghezza 10 token ciascuna. Nell'altro approccio, se la frase media ha 10 token, avresti eseguito approssimativamente n/10 operazioni di classificazione. Se n = 1000 parole in un documento, stai confrontando 990 operazioni contro 100 operazioni: una differenza di ordine di grandezza.
Se si hanno brevi frasi (meno di 20 caratteri), la precisione della rilevazione della lingua è scarsa nella mia esperienza. Soprattutto nel caso di nomi propri e nomi uguali in lingue come "cioccolato". Per esempio. "New York" è una parola inglese o francese se compare in una frase francese?
@EugeneP: il francese sarebbe più "Je suis un bel homme ...";) ma è improbabile che un rivelatore di linguaggio identifichi quell'errore (o almeno un uso molto raro). – SyntaxT3rr0r
@WizardOfOdds Je suis un bonhomme alors, merci, quand meme;) – EugeneP
Inoltre, spero che tu abbia già controllato questo: http://stackoverflow.com/questions/1383503/how-to-determine-the-natural-language-of- a-document –