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.