TIKA - Rilevamento della lingua

Necessità di rilevamento della lingua

Per la classificazione dei documenti in base alla lingua in cui sono scritti in un sito Web multilingue, è necessario uno strumento di rilevamento della lingua. Questo strumento dovrebbe accettare documenti senza annotazioni sulla lingua (metadati) e aggiungere tali informazioni nei metadati del documento rilevando la lingua.

Algoritmi per Profiling Corpus

Cos'è Corpus?

Per rilevare la lingua di un documento, viene costruito un profilo della lingua e confrontato con il profilo delle lingue conosciute. Il set di testo di queste lingue conosciute è noto comecorpus.

Un corpus è una raccolta di testi di una lingua scritta che spiega come la lingua viene utilizzata in situazioni reali.

Il corpus è sviluppato da libri, trascrizioni e altre risorse di dati come Internet. La precisione del corpus dipende dall'algoritmo di profiling che utilizziamo per inquadrare il corpus.

Cosa sono gli algoritmi di profilazione?

Il modo comune di rilevare le lingue è utilizzare i dizionari. Le parole usate in un dato pezzo di testo verranno abbinate a quelle che si trovano nei dizionari.

Un elenco di parole comuni utilizzate in una lingua sarà il corpus più semplice ed efficace per rilevare una particolare lingua, ad esempio articoli a, an, the in inglese.

Utilizzo di set di parole come corpus

Utilizzando set di parole, viene inquadrato un semplice algoritmo per trovare la distanza tra due corpora, che sarà uguale alla somma delle differenze tra le frequenze delle parole corrispondenti.

Tali algoritmi soffrono dei seguenti problemi:

  • Poiché la frequenza di corrispondenza delle parole è molto inferiore, l'algoritmo non può funzionare in modo efficiente con piccoli testi con poche frasi. Ha bisogno di molto testo per una corrispondenza accurata.

  • Non è in grado di rilevare i confini delle parole per le lingue che hanno frasi composte e quelle che non hanno divisori di parole come spazi o segni di punteggiatura.

A causa di queste difficoltà nell'utilizzo di set di parole come corpus, vengono presi in considerazione singoli caratteri o gruppi di caratteri.

Utilizzo di set di caratteri come corpus

Poiché i caratteri comunemente usati in una lingua sono di numero finito, è facile applicare un algoritmo basato sulle frequenze delle parole piuttosto che sui caratteri. Questo algoritmo funziona ancora meglio nel caso di determinati set di caratteri utilizzati in una o pochissime lingue.

Questo algoritmo presenta i seguenti inconvenienti:

  • È difficile differenziare due lingue con frequenze di caratteri simili.

  • Non esiste uno strumento o un algoritmo specifico per identificare specificamente una lingua con l'aiuto (come corpus) del set di caratteri utilizzato da più lingue.

Algoritmo N-gram

Gli inconvenienti sopra menzionati hanno dato origine a un nuovo approccio all'uso di sequenze di caratteri di una data lunghezza per la creazione di profili. Tale sequenza di caratteri è chiamata in generale N-grammi, dove N rappresenta la lunghezza della sequenza di caratteri.

  • L'algoritmo N-gram è un approccio efficace per il rilevamento della lingua, specialmente nel caso di lingue europee come l'inglese.

  • Questo algoritmo funziona bene con testi brevi.

  • Sebbene esistano algoritmi avanzati di profilazione linguistica per rilevare più lingue in un documento multilingue con caratteristiche più interessanti, Tika utilizza l'algoritmo di 3 grammi, poiché è adatto nella maggior parte delle situazioni pratiche.

Rilevamento della lingua in Tika

Tra tutte le 184 lingue standard standardizzate da ISO 639-1, Tika può rilevare 18 lingue. Il rilevamento della lingua in Tika viene eseguito utilizzando ilgetLanguage() metodo del LanguageIdentifierclasse. Questo metodo restituisce il nome in codice della lingua in formato String. Di seguito è riportato l'elenco delle 18 coppie di codici lingua rilevate da Tika:

da: danese de: tedesco et: estone el: greco
en: inglese es: spagnolo fi: finlandese fr: francese
hu: ungherese è — islandese it: italiano nl: olandese
no, norvegese pl: polacco pt: portoghese ru: russo
sv: svedese th: tailandese

Durante la creazione di un'istanza di LanguageIdentifier class, è necessario passare il formato String del contenuto da estrarre o un file LanguageProfile oggetto di classe.

LanguageIdentifier object = new LanguageIdentifier(“this is english”);

Di seguito è riportato il programma di esempio per il rilevamento della lingua in Tika.

import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.language.LanguageIdentifier;

import org.xml.sax.SAXException;

public class LanguageDetection {

   public static void main(String args[])throws IOException, SAXException, TikaException {

      LanguageIdentifier identifier = new LanguageIdentifier("this is english ");
      String language = identifier.getLanguage();
      System.out.println("Language of the given content is : " + language);
   }
}

Salva il codice sopra come LanguageDetection.java ed eseguirlo dal prompt dei comandi utilizzando i seguenti comandi:

javac  LanguageDetection.java 
java  LanguageDetection

Se esegui il programma di cui sopra, restituisce il seguente output

Language of the given content is : en

Rilevamento della lingua di un documento

Per rilevare la lingua di un dato documento, devi analizzarlo usando il metodo parse (). Il metodo parse () analizza il contenuto e lo memorizza nell'oggetto gestore, che gli è stato passato come uno degli argomenti. Passare il formato String dell'oggetto gestore al costruttore diLanguageIdentifier classe come mostrato di seguito -

parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());

Di seguito è riportato il programma completo che dimostra come rilevare la lingua di un determinato documento:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.language.*;

import org.xml.sax.SAXException;

public class DocumentLanguageDetection {

   public static void main(final String[] args) throws IOException, SAXException, TikaException {

      //Instantiating a file object
      File file = new File("Example.txt");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream content = new FileInputStream(file);

      //Parsing the given document
      parser.parse(content, handler, metadata, new ParseContext());

      LanguageIdentifier object = new LanguageIdentifier(handler.toString());
      System.out.println("Language name :" + object.getLanguage());
   }
}

Salva il codice sopra come SetMetadata.java ed eseguilo dal prompt dei comandi -

javac  SetMetadata.java 
java  SetMetadata

Di seguito è riportato il contenuto di Example.txt.

Hi students welcome to tutorialspoint

Se esegui il programma sopra, ti darà il seguente output:

Language name :en

Insieme al vaso Tika, Tika fornisce un'applicazione GUI (Graphical User Interface) e un'applicazione CLI (Command Line Interface). Puoi eseguire un'applicazione Tika anche dal prompt dei comandi come altre applicazioni Java.