Language Detector of openNLP

Language Detector

The base of the Natural Language Processing is the detection of the language used in your text. This can also applied to the Content Server to detect the language of a document stored in the Content Server

Content

Example

Training

How to load a trained model

How to detect a language

Back io main

Example

import java.io.*;
  
import opennlp.tools.langdetect.*;
import opennlp.tools.util.*;
  
/**
* Language Detector Example in Apache OpenNLP
*/
public class LanguageDetectorMEExample {
  
    private static LanguageDetectorModel model;
  
    public static void main(String[] args){
  
        // loading the training data to LanguageDetectorSampleStream
        LanguageDetectorSampleStream sampleStream = null;
        try {
            InputStreamFactory dataIn = new MarkableFileInputStreamFactory(new File("train" + File.separator + "DoccatSample.txt"));
            ObjectStream<String> lineStream = new PlainTextByLineStream(dataIn, "UTF-8");
            sampleStream = new LanguageDetectorSampleStream(lineStream);
        } catch (FileNotFoundException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Language Detector"+"\n");
        // training parameters
        System.out.println("Training starts");
        System.out.println("===============");
        TrainingParameters params = new TrainingParameters();
        params.put(TrainingParameters.ITERATIONS_PARAM, 100);
        params.put(TrainingParameters.CUTOFF_PARAM, 5);
        params.put("DataIndexer", "TwoPass");
        params.put(TrainingParameters.ALGORITHM_PARAM, "NAIVEBAYES");
        System.out.println("Training Parameters");
        System.out.println("Iterations_param 100");
        System.out.println("Cutoff_param 5");
        System.out.println("DataIndexer TwoPass");
        System.out.println("Algoríthm_param NAIVEBAYES");
        // train the model
        try {
            model = LanguageDetectorME.train(sampleStream, params, new LanguageDetectorFactory());
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Training completed");
  
        // load the model
        LanguageDetector ld = new LanguageDetectorME(model);
        // use model for predicting the language
        String s = "Hay buenos restaurantes en Madrid.";
        System.out.println("\n"+"Testsentence");
        System.out.println("============");
        System.out.println(s+"\n");
        Language[] languages = ld.predictLanguages(s);
        System.out.println("Predicted languages");
        System.out.println("===================");
        for(Language language:languages){
            // printing the language and the confidence score for the test data to belong to the language
            System.out.println(language.getLang()+"  "+language.getConfidence());
        }
    }
}

The output is

Language Detector

Training starts
===============
Training Parameters
Iterations_param 100
Cutoff_param 5
DataIndexer TwoPass
Algoríthm_param NAIVEBAYES
Training completed

Testsentence
============
Hay buenos restaurantes en Madrid.

Predicted languages
===================
spa  0.9999994121457726
fra  5.878529986059168E-7
pob  1.2147340525467913E-12
ita  1.402066152944327E-14

The sentence to test is “Hay buenos restaurantes en Madrid.” (in Madrid you have good restaurants). The system predicts, its Spanish with a probability of nearly 1 (0.9999994121457726).

Training

In the file DocCat.sample is the training. These are 100 sentences to train the languages. One sentence in this training is (Language Italian):

“ita Al quarto d ‘ ora un combattivo Paghera serve a Defendi la palla del possibile raddoppio ma il doppio tentativo dell ‘ attaccante viene sventato in angolo da Piccolo . Fuori dalle mura , la chiesa più importante : S . Maria di Betlem . Inolte Lunardini ha spiegato che il Comune non potra ‘ sostenere economicamente le bidelle non essendo dipendeti dell ‘ Ente , anche se saranno vagliate altre soluzioni tra cui chiedere aiuto alla regione Toscana . La banda – sotttolinea la polizia – è stata individuata grazie alle indagini degli uomini delle squadre mobili di Trento , Brescia , Milano e del commissariato di Rho , e alla preziosa collaborazione di alcune vittime trentine . Berlusconi : ” Colpa degli arbitri di sinistra ” . Dopo collaborazioni con altre prestigiose case di moda e brand , la maison Damiani produrra ‘ una linea di alta gioielleria per Galliano . La 22 / a edizione degli Efa si terra ‘ a Tallinn ( Estonia ) il 4 dicembre . E ‘ quanto emerge dalla rilevazione della Staffetta Quotidiana . Roma , 19 dic . ( Apcom ) – Renzo Gattegna è stato confermato Presidente dell ‘ Unione delle Comunità Ebraiche Italiane . L ‘ esplosione ha ferito 13 funzionari di polizia e 13 civili . Se Niccolò Ghedini parla di ” accuse incredibili ” , il coordinatore del Pdl , Sandro Bondi , è più netto : ” Così muore il senso della giustizia ” . ” Le cronache di questi giorni sul caso della Grecia – ha riferito la Glendon – hanno offerto ulteriori spunti di analisi . ” Ognuno decide di morire come vuole ” . L ’ Amia , l ’ azienda che gestisce il servizio di raccolta , è sull ’ orlo della crisi economica , nonostante l ’ aiuto finanziario ricevuto dallo Stato . Ma certamente questo governo e ‘ in respirazione artificiale . Non abbiamo mai perso di lucidità , siamo rimasti bene in campo dopo il 2 – 0 , pressando e costruendo i presupposti per la rimonta . Ha le potenzialità ma deve maturare . Una quattordicenne viene violentata e uccisa , da questo momento in poi si troverà in una sorta di Paradiso dal quale osserverà la sua famiglia che cerca di andare avanti superando il dolore per la sua perdita . La testa di serie numero uno sarà la giocatrice della Polonia Anna Korzenoak , vincitrice lo scorso anno . In Ducati dal 2000 , l ‘ Ing Lozej ha occupato negli ultimi anni il ruolo di responsabile del team sviluppo MotoGP .”

In standard, 103 languages will be recognized from the Leipzig corpus. See these languages here , if you have a different language, it can be trained like before.

How to load a trained model

// load the trained Language Detector Model file
File modelFile = new File(".\\resources\\langdetect-183.bin");
	    	
LanguageDetectorModel trainedModel = new LanguageDetectorModel(modelFile);
	    	
// load the model
LanguageDetector languageDetector = new LanguageDetectorME(trainedModel);

How to detect a language

Language[] languages = languageDetector.predictLanguages("Puedo darte ejemplos de los métodos");
System.out.println("Predicted language: "+ languages[0].getLang());