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.

Extração de informação faz parte do contexto de PLN, quer saber mais? Saiba mais aqui.

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 a forma com que ela pode transformar vidas!

Deixe um comentário

treze − três =