Como extrair informações de textos

Como extrair informações de textos

  O Processamento de Linguagem Natural além de identificar palavras importantes e compreender como elas podem ser utilizadas, também busca encontrar relações entre as palavras.  A linguística claramente mostra que uma frase é composta por palavras que são conectadas por um contexto e informações.

Mas seria possível um programa de computador compreender quais são as conexões existentes em um texto em linguagem natural?   Os esforços para compreender a linguagem a ponto de conseguir interagir com ela é um desafio que já obteve muitos avanços na área de Inteligência Artificial.

Um destes esforços importantes é o computador Watson da IBM que promete ser uma grande porta de entrada para desenvolvedores que desejam integrar o PLN em suas aplicações.   Veja esta matéria bastante divertida feita pelo Jovem Nerd sobre a exposição de arte organizada pelo grupo de estudos da IBM.  

Mesmo que empresas grandes como a IBM, Google, Microsoft tenham despertado para o poder do Processamento de Linguagem Natural como ferramenta útil, estas empresas ainda caminham juntamente com a comunidade e desfrutam de descobertas compartilhadas por inúmeros estudiosos do mundo todo.   

É claro que compreender partes da fala humana e gerar uma resposta automaticamente é um trabalho bastante complexo. Mas neste post vamos explicitar uma parte importante sobre a extração de informações. O algoritmo denominado Subject-Verb-Object é bastante utilizado na literatura de processamento de linguagem natural, pois identifica sequências comuns na comunicação humana.  

Este algoritmo tem como premissa que muitas frases criadas tem a estrutura de um sujeito (agente) que realiza uma ação (verbo) sobre um determinado objeto.

Observe o exemplo:  

Maria dirige o carro.  

Na frase acima temos: “Maria” como o sujeito, “dirige” como a ação tomada e “o carro” como objeto. Sendo assim, esta sequência forma uma tripla que contém uma informação válida. Esta busca por informações em um texto é denominada “Information Extraction” ou “Extração de Informações”.  

Mais uma vez a Universidade de Stanford, como destaque neste tipo de pesquisa, disponibiliza gratuitamente o projeto desenvolvido pelo seu grupo de PLN um extrator de informações.

O download destes pacotes pode ser feito neste link. Esta ferramenta é baseada no Stanford parser e utiliza vários algoritmos para extrair estes relacionamentos.   

Veja um  exemplo de utilização do código na linguagem Java:  

import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.naturalli.NaturalLogicAnnotations;
import edu.stanford.nlp.util.CoreMap;

import java.util.Collection;
import java.util.Properties;

/**
 * A demo illustrating how to call the OpenIE system programmatically.
 */
public class OpenIEexample {

    public static void main(String[] args) throws Exception {
        // Create the Stanford CoreNLP pipeline
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize,ssplit,pos,lemma,depparse,natlog,openie");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

        // Annotate an example document.
        Annotation doc = new Annotation("I like milk, I am a cat.");
        pipeline.annotate(doc);

        // Loop over sentences in the document
        for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) {
            // Get the OpenIE triples for the sentence
            Collection<RelationTriple> triples = sentence.get(NaturalLogicAnnotations.RelationTriplesAnnotation.class);
            // Print the triples
            for (RelationTriple triple : triples) {
                System.out.println(triple.confidence + "t"
                        + triple.subjectLemmaGloss() + "t"
                        + triple.relationLemmaGloss() + "t"
                        + triple.objectLemmaGloss());
            }
        }
    }
}

---------------------------Output -----------------------------

1.0 I be cat

  Lembrando que outros códigos sobre este assunto estão em nosso GitHub. Clique na imagem abaixo para acessar:

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta