TIKA - Detecção de idioma

Necessidade de detecção de idioma

Para a classificação de documentos com base no idioma em que são escritos em um site multilíngue, é necessária uma ferramenta de detecção de idioma. Esta ferramenta deve aceitar documentos sem anotação de idioma (metadados) e adicionar essa informação nos metadados do documento detectando o idioma.

Algoritmos para Profiling Corpus

O que é Corpus?

Para detectar o idioma de um documento, um perfil de idioma é construído e comparado com o perfil dos idiomas conhecidos. O conjunto de texto desses idiomas conhecidos é conhecido como umcorpus.

Um corpus é uma coleção de textos de uma linguagem escrita que explica como a linguagem é usada em situações reais.

O corpus é desenvolvido a partir de livros, transcrições e outros recursos de dados como a Internet. A precisão do corpus depende do algoritmo de criação de perfil que usamos para enquadrar o corpus.

O que são algoritmos de criação de perfil?

A maneira comum de detectar idiomas é usando dicionários. As palavras usadas em um determinado texto serão comparadas com aquelas que estão nos dicionários.

Uma lista de palavras comuns usadas em um idioma será o corpus mais simples e eficaz para detectar um determinado idioma, por exemplo, artigos a, an, the em inglês.

Usando conjuntos de palavras como Corpus

Usando conjuntos de palavras, um algoritmo simples é estruturado para encontrar a distância entre dois corpora, que será igual à soma das diferenças entre as frequências de palavras correspondentes.

Esses algoritmos sofrem dos seguintes problemas -

  • Uma vez que a frequência de correspondência de palavras é muito menor, o algoritmo não pode trabalhar de forma eficiente com textos pequenos com poucas frases. Necessita de muito texto para uma correspondência precisa.

  • Ele não pode detectar limites de palavras para idiomas com frases compostas e aqueles que não têm divisores de palavras, como espaços ou sinais de pontuação.

Devido a essas dificuldades em usar conjuntos de palavras como corpus, caracteres individuais ou grupos de caracteres são considerados.

Usando conjuntos de caracteres como corpus

Como os caracteres comumente usados ​​em um idioma são finitos em número, é fácil aplicar um algoritmo baseado em frequências de palavras em vez de caracteres. Este algoritmo funciona ainda melhor no caso de certos conjuntos de caracteres usados ​​em um ou poucos idiomas.

Este algoritmo sofre das seguintes desvantagens -

  • É difícil diferenciar dois idiomas com frequências de caracteres semelhantes.

  • Não existe uma ferramenta ou algoritmo específico para identificar especificamente um idioma com a ajuda (como corpus) do conjunto de caracteres usado por vários idiomas.

Algoritmo N-gram

As desvantagens indicadas acima deram origem a uma nova abordagem de uso de sequências de caracteres de um determinado comprimento para o corpus de criação de perfil. Essa seqüência de caracteres é chamada de N-gramas em geral, onde N representa o comprimento da seqüência de caracteres.

  • O algoritmo N-gram é uma abordagem eficaz para detecção de idioma, especialmente no caso de idiomas europeus como o inglês.

  • Este algoritmo funciona bem com textos curtos.

  • Embora existam algoritmos avançados de perfil de idioma para detectar vários idiomas em um documento multilíngue com recursos mais atraentes, Tika usa o algoritmo de 3 gramas, pois é adequado na maioria das situações práticas.

Detecção de idioma em Tika

Entre todos os 184 idiomas padronizados pela ISO 639-1, o Tika pode detectar 18 idiomas. A detecção de idioma no Tika é feita usando ogetLanguage() método do LanguageIdentifierclasse. Este método retorna o nome do código do idioma no formato String. Dada abaixo está a lista dos 18 pares de códigos de idioma detectados por Tika -

da — dinamarquês de — alemão et — estoniano el — grego
en — inglês es — espanhol fi — finlandês fr — francês
hu — húngaro é — islandês it — italiano nl — holandês
não — norueguês pl — polonês pt — português ru — russo
sv — sueco th — tailandês

Enquanto instancia o LanguageIdentifier classe, você deve passar o formato String do conteúdo a ser extraído, ou um LanguageProfile objeto de classe.

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

A seguir está o programa de exemplo para detecção de idioma em 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);
   }
}

Salve o código acima como LanguageDetection.java e execute-o a partir do prompt de comando usando os seguintes comandos -

javac  LanguageDetection.java 
java  LanguageDetection

Se você executar o programa acima, ele fornecerá o seguinte resultado

Language of the given content is : en

Detecção de idioma de um documento

Para detectar o idioma de um determinado documento, você deve analisá-lo usando o método parse (). O método parse () analisa o conteúdo e o armazena no objeto manipulador, que foi passado a ele como um dos argumentos. Passe o formato String do objeto manipulador para o construtor doLanguageIdentifier classe como mostrado abaixo -

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

Abaixo está o programa completo que demonstra como detectar o idioma de um determinado 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());
   }
}

Salve o código acima como SetMetadata.java e execute-o no prompt de comando -

javac  SetMetadata.java 
java  SetMetadata

A seguir está o conteúdo de Example.txt.

Hi students welcome to tutorialspoint

Se você executar o programa acima, ele fornecerá a seguinte saída -

Language name :en

Junto com o jar Tika, Tika fornece um aplicativo de interface gráfica do usuário (GUI) e um aplicativo de interface de linha de comando (CLI). Você também pode executar um aplicativo Tika a partir do prompt de comando, como outros aplicativos Java.