\documentclass[portuges,a4paper]{article} \usepackage{t1enc} \usepackage{aeguill} \usepackage{ucs} \usepackage[utf8]{inputenc} \usepackage{graphicx} \usepackage[portuguese]{babel} \usepackage{color} \usepackage{fancyvrb} \usepackage{hyperref} %\setlength{\oddsidemargin}{1.378in-1in} %\setlength{\textwidth}{\paperwidth - 1.378in-1.378in} \begin{document} \title{RENA\\ Reconhecimento de Entidades Mencionadas} \author{Edgar Pereira Alves \and J.João Dias de ALmeida} \date{2004} \maketitle \tableofcontents \newpage =Introdução O RENA é um sistema de reconhecimento de entidades mencionadas orientado a textos escritos na língua portuguesa. O sistema reconhece nomes de pessoas, localidades e organizações, usando informação contextual e recursos externos (\textit{gazetteers}) para classificar as entidades reconhecidas. ==Descrição A arquitectura do sistema RENA consiste numa análise inicial ao texto pelo componente de \textit{token}ização, seguida da passagem dos \textit{tokens} identificados (possíveis entidades mencionadas e texto livre) através de uma sequência de filtros. Para além da lista de \textit{tokens} que pode ou não ser modificada (e cada \textit{token} individualmente modificado) por cada filtro, o sistema mantém ainda estado global acessível (inclusive para modificação) a todos os filtros da \textit{pipeline}. =Tokenizer O \textit{tokenizer} funciona como bootstrap ao processo de aplicação dos filtros. É o objectivo desta fase tornar o mais simples e exacto possível o trabalho dos filtros que vão ser aplicados à sequência de \textit{tokens} gerada por este componente. A separação do texto nos dois tipos de \textit{tokens }(possíveis entidades e texto livre) utiliza uma expressão regular para detectar texto com elevada probabilidade de ser ou fazer parte de uma referência a uma entidade. Para os \textit{tokens }do tipo entidade, o \textit{tokenizer }usa uma propriedade booleana (``beginning''), que é verdadedeira se essa (possível) entidade tiver ocorrido no ínicio de uma frase, ou falsa, caso contrário. =Filtros ==Oneletter Este filtro limita-se a alterar o tipo dos \textit{tokens} de entidades cujo texto seja apenas uma letra para texto livre. Este filtro poderia ser eliminado à custa de uma regra ligeiramente mais complexa para o \textit{tokenizer}. ==Remove\_quoted Devido a limitações actuais do sistema, foi construído este filtro para alterar o tipo de todos os \textit{tokens }que correspondam a referências a entidades que tenham ocorrido entre aspas. Consequentemente, quaisquer referências a entidades ocorridas entre aspas não serão apresentadas no final da análise. ==Hiphen\_connections Este filtro separa o texto de entidades cujo texto consiste no texto de duas entidades separadas por um hífen, quando o texto dessas duas entidades ocorre mais vezes no texto. Este filtro foi criado para lidar com menções a desafios desportivos (ex: ``FC Porto-Benfica''). Note-se, contudo, que pode ser desejável preservar a informação subjacente a esta situação (se pretendermos considerar um encontro de futebol uma entidade em si). Como o sistema não permite que o mesmo texto possa ser usado, total ou parcialmente, por mais do que uma referência a uma entidade, optou-se pela construção deste filtro. Caso contrário, seriam detectadas, no texto dado como exemplo, três entidades: ``FC Porto-Benfica'', ``FC Porto'' e ``Benfica'' (e possivelmente ``Porto''). Para este filtro poder ser aplicado, as entidades não podem ter no seu próprio texto um hífen. ==Begin Para todos os \textit{tokens }do tipo entidade que tenham sido marcados como tendo ocorrido no ínicio de uma frase (propriedade ``beginning''), este filtro elimina texto dos \textit{tokens }que não faça parte do texto da referência à entidade. Para o efeito, este filtro usa o \textit{jspell }para obter a classificação gramatical das palavras que constituem o texto do \textit{token}. A partir da primeira palavra e enquanto houver classificação para a palavra a ser testada e essa classificação seja nome ou adjectivo, as palavras vão saindo do texto do \textit{token }(e sendo acrescentadas a um novo \textit{token }de texto que será acrescentado à sequência de tokens antes do token actual). ==Al Para os nomes árabes que incluem ``al'' ou ``el'' entre partes de nomes ou no seu início, é necessária a aplicação deste filtro para que o nome seja correctamente identificado na sua totalidade. ==Context Este filtro procura acrescentar possíveis classificações a tokens de entidades. Para tal, recorre a uma tabela fornecida pelo utilizador que descreve relações entre contextos esquerdos (parte do texto que precede o \textit{token }de entidade ou as primeiras palavras do texto do próprio \textit{token}) e possíveis classificações. ==Names\_gazetteer Este filtro verifica que entidades podem ser nomes de pessoas, com base num \textit{gazetteer} fornecido pelo utilizador. ==Oneword Este filtro elimina entidades cujo texto é uma única palavra, desde que não tenham sido previamente classificadas por um outro filtro que precede este na sequência de filtros usada, que não seja a primeira nem última palavra do texto de outra qualquer referência a entidade (cujo texto tenha mais do que uma palavra, obviamente) nem que, se for uma palavra conhecida pelo \textit{jspell}, esteja classificada como nome próprio. ==Ignore\_words Este filtro permite que entidades cujo texto é uma única palavra (que não tenham sido já eliminadas pelo filtro ``oneword'') sejam eliminadas se constarem duma lista de palavras fornecidas pelo utilizador. ==Acronyms Este filtro procura situações em que o texto de uma entidade é seguida de uma sigla entre parenteses. A ocorrência dessas situações é registada no estado global do sistema, sendo essa informação utilizada por filtros que se seguem a este. ==Acronyms2 Este filtro procura situações em que uma sigla é seguida por um hífen e por uma entidade. A ocorrência dessas situações é registada no estado global do sistema, sendo essa informação utilizada por filtros que se seguem a este. ==Unification Este filtro efectua o agrupamento de todas as referências a entidades - procura agrupar referências cujo texto pode ou não diferir mas que apontam para a mesma entidade. A versão actual reconhece a utilização de nomes abreviados (só última ou primeira parte de um nome que ocorra na totalidade noutra parte do texto) e de siglas (a associação entre siglas e referências é efectuado pelos filtros ``acronyms'' e ``acronyms2'' e tido em conta neste filtro). ==Begin\_unified Este filtro remove entidades cujas ocorrências tenham sido todas em ínicio de frase, que consistam apenas numa palavra e que sejam classificadas pelos \textit{jspell }com outra classificação que não seja nome próprio. ==Gazetteer Utilizando um \textit{gazetteer }fornecido pelo utilizador, este filtro procura classificar \textit{tokens }de entidades de acordo a classificação atribuída nesse mesmo gazetteer. ==Unification\_links Este filtro estabelece, usando o estado global, uma ligação entre as entidades unificadas e respectivas instâncias. ==Unified\_yaml Este filtro escreve uma representação, no formato \textit{YAML}, de todas as entidades com alguma referência no texto, bem como todas as classificações atribuídas. ==Toxml Este filtro escreve, usando o formato \textit{XML}, uma versão do texto original onde são anotadas todas as referências a entidades encontradas. =Dados utilizados no Rena ==Tabela de contextos \begin{Verbatim} cidade (de do da) => cidade !lctx freguesia (de do da) => freguesia distrito (de do da) => distrito concelho (de do da) => concelho/90 estado (de do da) => estado capital => cidade !lctx # (Lugar Largo Lg. Praça Rua R. Avenida Av.) (de da do das dos)? => lugar (Travessa Beco Quinta Viela Calçada Rotunda Jardim) (de da do das dos)? => lugar (Convento Mosteiro Igreja Ig. Palácio Museu Sé) (de da do das dos)? => monumento \end{Verbatim} \begin{Verbatim} (Rio Oceano Lago Mar Serra Cordilheira) => $_ Cabo (do de da) => cabo Golfo (do de da) => golfo Península (do de da)? => península \end{Verbatim} ==Hirarquia de classes \begin{Verbatim} - pessoa: - advogado - arquitecto - atleta: - futebolista - escritor: - poeta - jornalista - militar: - general - almirante - brigadeiro - sargento - tenente - capitão - musico: - compositor - pianista - político: - presidente da república - deputado \end{Verbatim} ==Base de Nomes Name-gazeteer \begin{Verbatim} Diana :nome: 35 Dias :apelido: 252 Dina :nome: 7 Dinis :misto: [2 13 15] Diogo :misto: [8 2 6] Domingues :apelido: 48 Dora :nome: 8 \end{Verbatim} =Conclusão O sistema desenvolvido tem uma elevada taxa de acerto com textos jornalísticos, onde as convenções textuais são geralmente seguidas. Contudo, a sua dependência da utilização dessas convenções (nomeadamente, pontuação e capitalização) no texto que se pretende analisar faz com que o seu comportamento se degrade em textos mais informais. Passe essa dependência, o sistema pode contudo ser enriquecido, sem alterar a implementação Perl do mesmo, através dos ficheiros de dados utilizados pelos filtros (como \textit{gazetteers }geral e de nomes, tabela de contextos esquerdos e palavras a ignorar). Se isso não for suficiente, o sistema foi concebido para ser facilmente extensível com novos filtros. \end{document}