Curso de Processamento de Linguagem Natural usando Java

O que são anáforas e como processá-las

Neste post entenderemos como processar anáforas utilizando. Antes de processar anáforas devemos antes entender o que são anáforas. Esse conceito é bem simples e você vai entender bem rápido, porém, computacionalmente tratar esse tipo de fenômeno é um pouco mais complexo  

Esse post faz parte de um conjunto de conteúdos sobre PLN. Quer saber mais? clique aqui.

Entenda o que é uma anáfora

Leia estes versos de Manuel Bandeira:

“Vi uma estrela tão alta,
Vi uma estrela tão fria!
Vi uma estrela luzindo
Na minha vida vazia”.

Observe que o poeta inicia os três primeiros versos com a mesma expressão “Vi uma estrela”, com o objetivo de enfatizar essa ideia. Esse recurso usado tão frequentemente na poesia é uma figura de linguagem chamada anáfora.

A anáfora consiste em repetir uma palavra ou expressão a espaços regulares durante o texto. É muito comum nas trovas populares, cordéis e poemas.

No contexto de Processamento de Linguagem Natural a resolução de anáforas aparece mais comumente como a resolução de pronomes de acordo com referencias apresentadas anteriormente no texto. Observe o exemplo:   John is a employee. He always is late.  

Neste exemplo o empregado chamado John é apresentado. Na segunda frase o nome de John é substituído pelo pronome “He”. Realizar o reconhecimento destas conexões é um problema bastante complexo em NLP.    Caso seja necessário descer a este nível de detalhe, é possível consultar artigos que explicitam a técnica. Confira alguns links que podem ajudar neste trabalho.    

Buscando uma abordagem mais prática, demonstraremos a seguir um exemplo de resolução de anáforas na língua inglesa.   

Observe a seguinte frase:  

“Barack Obama was born in Hawaii.  He is the president. Obama was elected in 2008.”  

Aqui temos três sentenças distintas, são elas:   

1 – Barack Obama was born in Hawaii. 

2 – He is the president.

3 – Obama was elected in 2008.  

Na segunda frase, por exemplo, o pronome “He” refere-se ao presidente Barack Obama. O objetivo do algoritmo implementado é identificar esta relação.

A universidade de Stanford apresentou um módulo do seu parser que resolve este problema. Veja um exemplo de código Java que utiliza o algoritmo de resolução de Anáforas.    

import java.util.Properties;
import edu.stanford.nlp.coref.CorefCoreAnnotations;
import edu.stanford.nlp.coref.data.CorefChain;
import edu.stanford.nlp.coref.data.Mention;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;

public class AnaphoraResolutionExample {
 
    public static void main(String[] args) throws Exception {
        Annotation document = new Annotation("Barack Obama was born in Hawaii.  He is the president. Obama was elected in 2008.");
        Properties props = new Properties();
        props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,mention,coref");
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
        pipeline.annotate(document);
        System.out.println("---");
        System.out.println("coref chains");
        for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) {
            System.out.println("t" + cc);
        }

        for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) {
            System.out.println("---");
            System.out.println("mentions");

            for (Mention m : sentence.get(CorefCoreAnnotations.CorefMentionsAnnotation.class)) {
                System.out.println("t" + m);
            }
        }
    }
}

    Saida:   

coref chains
CHAIN3-[“Barack Obama” in sentence 1, “He” in sentence 2, “Obama” in sentence 3]

mentions
Barack Obama
Hawaii

mentions
the president
He

mentions
Obama

2008

Vale ressaltar que para que este código funcione é necessário ter adicionado as bibliotecas do Stanford Parser. Este exemplo e outros códigos podem ser acessados no nosso GitHub.

Clique na imagem abaixo para acessar:

Esse post foi modificado em 30 de novembro de 2022 10:07

This website uses cookies.