Resumos de aula: PLN - 2019


Nota: Arquivo gerado por um programa.

Nome Resumo
Michelle Kaori Hamada Nesta aula de "Normalização de texto: Stemming e grafos de palavras", iniciou- se retomando conceitos da última aula como a normalização de palavras. Ela consiste na redução, simplificação ou a radicalização desta, utilizando técnicas importantes como a de Stemming ou de lemmatization. A técnica de Stemming busca reduzir a palavra à sua raiz (sem observar a sua classe gramatical), por exemplo a radical amig, ela pode vir das palavras amigo, amiga, amigão. A palavra final não é a raiz da palavra de forma linguística e pode não ter significado, alguns autores chamam de radical da palavra. Lemmatization reduz as palavras em lemmas, nas formas básicas das palavras e seu algoritmo é chamado de lemmatizer, enquanto que o Stemming reduz em stems, partes de uma palavra e seu programa chamamos de stemmer. Na execução de ambos em uma palavra como "produced" as saídas seriam diferentes, com o Stemmer a temos "produc" e com o Lemmatizer "produce". Existem diferentes algoritmos de Stemming, principalmente para o inglês, nesta aula vimos sobre o algoritmo Lovins stemmer e o Porter stemmer. O Algoritmo de Lovins é o pioneiro e o influenciador de muitos stemmers, foi criado pela Julie Beth Lovins em 1968. Ele é composto por 294 sufixos, 29 condições e 34 regras de transformação. O processamento é feito em apenas em duas etapas: 1. O algoritmo procura pelo sufixo de maior tamanho na palavra e que satisfaça a condição. 2. Em seguida aplica-se as regras para transformar o final. Entendido o funcionamento do algoritmo de Lovins, tivemos de aplicá-lo em sete palavras (national, nationally, sitting, matrix, matrices, magnesium e rubbing) para que fixássemos melhor o conteúdo e o entendimento do algoritmo. Tanto o algoritmo de Lovins quanto o de Porter removem consecutivamente os finais das palavras, para cada palavra não é requerido conhecimento à priori para a sua redução. O algoritmo de Porter foi feito por Martin F. Porter foi feito no ano de 1980, ele inicialmente foi publicado em um relatório de projeto final de recuperação de informação. O algoritmo é o stemmer mais utilizado atualmente pois ele é mais completo e mais "simples" do que o de Julie Lovins, consiste em 5 passos: utiliza-se regras e operação de validação. Similar ao de Lovins: cada palavra é comparada sequencialmente com o maior sufixo possível. Se casar o sufixo, remove-se ele da palavra. Um exemplo seria 106 (id da regra), "ed" (sufixo), LAMBDA (substituição), 1 (|sufixo|-1), -1 (|substituição|-1), -1 (tamanho mínimo da raiz (quando eliminado o sufixo) deve ser igual a 3 caracteres, ContainsVowel (Função de validação: A raiz deve ter uma vogal). Aplicando em "shared" obtemos "shar" enquanto que se aplicar em "shed" obtemos "shed" pois a raiz deve ter uma vogal e deve ter no mínimo 3 caracteres. Para a língua portuguesa, o primeiro algoritmo de stemming foi o Orengo em 2001 por Viviane Moreira e Christian Huyck, sua primeira versão amplamente divulgada era constituída de 199 regras distribuídas em 8 passos além de considerar uma lista de exceções. Existem outras propostas para diversas outras línguas também. Um recurso para demonstrarmos a aplicação do stemming e do lemmatization é com o Python NLTK. E porque não utilizar uma base de dados (como um dicionário) para comparar as palavras reduzidas? Pois esse procedimento iria requerer maior tempo de processamento computacional e o esforço investido poderia não valer a pena como estudado no artigo de Harman, D., & Candela, G. (1990). Retrieving records from a gigabyte of text on a minicomputer using statistical ranking. Poderíamos também ao invés de eliminar os sufixos considerarmos os prefixos na aplicação dos stemmers, em algumas palavras fazem sentido (ex: arquiduque, protótipo, ultraleve). Outra consideração seria que o algoritmo não deveria permitir a perda de informação, o que acaba acontecendo em alguns casos, como na versão original do algoritmo de porter "as" torna-se "a", "is" vira "i", podemos chamar isso de overstemming, que é quando é removido não só o sufixo, mas também uma parte do radical. Existe também o uderstemming que ocorre quando o sufixo não é removido ou é apenas removido parte dele. Além disso, pode-se aplicar um stemmer para nomes. Na parte prática da aula, observamos a aplicação do fool- stemmer.py no texto da capivara, no algoritmo estava determinado que o radical teria pelo menos três caracteres, então no texto final tínhamos pelo menos três caracteres em cada radical. Mas no text-compare, na aplicação do fool- stemmer ocorre o overstemming. Outro algoritmo que observamos foi a de porter- stemmer.py. Dentro do contexto de algoritmos de stemming, o Snowball é uma linguagem de processamento de strings projetada para criar os algoritmos de stemming no uso de recuperação de informações. Uma aplicação da normalização de textos é a Rede (grafo) de palavras, em que no grafo duas palavras estão ligadas se ambas estão adjacentes em uma frase. Com isso podemos ter análises melhores, dependendo da necessidade retirar as stopwords e contar a frequência. Assim temos os grafos de co-ocorrência de palavras que permitem identificar, de forma visual, relações potenciais entre as palavras, utilizar propriedades topológicas nos grafos para descoberta de conhecimento a partir de textos e também estudar melhor a organização das palavras.
Jair Edipo Jeronimo Como visto anteriormente, a normalização de texto é um tratamento que tem relação com a simplificação ou redução das palavras, para identificar se elas possuem o mesmo significado ou algum tipo de relação. Isso pode auxiliar em sistemas de busca, por exemplo, onde é possível permitir resultados flexionados para uma mesma palavra, ou seja, pode-se retornar o seu plural, sua versão em outro tempo verbal, etc. Uma técnica importante de normalização é o processo de stemming, que tem como objetivo reduzir a palavra em sua raiz, não levando em conta a classe gramatical, mas sim, aplicando uma heurística para descartar as extremidades das palavras, utilizando um conjunto de regras que dependem da linguagem a ser processada. Por exemplo, as palavras estudar, estudando, estude, estudei e estudamos, todas elas podem ser reduzidas ao radical estud, além de que, elas possuem um significado semelhante e essa redução pode facilitar na análise do texto para identificar o seu tema ou conteúdo. Essa redução pode ser chamada de stems, que seria parte de uma palavra. O primeiro algoritmo de stemming e que influenciou muitos outros, foi criado pela Julie Beth Lovins em 1968, possuía um processamento em apenas duas etapas: a primeira seria identificar o maior sufixo da palavra que está presente em uma tabela especial de sufixos, com 294 termos variados, sendo que cada um deles, ao ser removido, possuía ou não uma condição de remoção, das 29 descritas por Lovins. Já a segunda etapa, está relacionada com a aplicação de uma modificação para transformar o final da palavra, seja após a remoção ou não de um sufixo, a qual tinha 34 regras diferentes. Após isso, colocamos em prática o algoritmo de stemming criado pela Lovins, realizando uma atividade com algumas palavras, as quais tínhamos que aplicar as regras e modificações necessárias para reduzi-las. Outro algoritmo de stemming importante foi criado por Martin F. Porter, ele conseguiu ser mais completo e simples do que o algoritmo de Lovins e é bastante utilizado atualmente, podemos encontrá-lo em diversas linguagens de programação possíveis. É composto por 5 passos e utiliza operações de validação, onde além de remover o maior sufixo possível, ele considera que a raiz deve conter pelo menos 3 caracteres, sendo ao menos 1 vogal e 1 consoante, o que evita que palavras como Shared e Shed sejam reduzidas apenas a Sh, por exemplo. Existem também, algoritmos de stemming para a Língua Portuguesa, como por exemplo, o algoritmo de Orengo, que foi amplamente divulgado e continha um fluxo de regras para reduzir as palavras da nossa língua. Além disso, há um recurso online chamado Python NLTK que realiza stemming e lemmatization aplicando diversos algoritmos, como o snowball que é uma linguagem de processamento de strings baseada no algoritmo de Porter e é bastante utilizada na criação de algoritmos de stemming para recuperação de informações. Há também, algumas considerações não discutidas sobre os stemmers, como: se é necessária uma base de dados para comparar palavras (porém levaria a um maior tempo de processamento), eliminação de prefixos, Over-stemming (quando reduzimos demais uma palavra), Under-stemming (quando não reduzimos o suficiente), entre outros. Durante a parte prática da aula, vimos um algoritmo simples de stemming, que truncava todas as palavras do texto para apenas 3 caracteres cada. Porém, essa forma de stemming pode causar Over-stemming, pois as palavras qual e quatro, por exemplo, foram reduzidas ao mesmo radical e não possuem relação. Após isso, vimos o funcionamento do algoritmo de Porter, que obteve um resultado melhor. Por fim, vimos outras abordagens que o método de stemming pode ter, como por exemplo a aplicação de métodos estatísticos envolvendo grafos, onde duas palavras possuem uma relação/aresta se possuem uma adjacência em uma frase. Nesse caso, há uma visualização melhor do comportamento e do contexto em que as palavras se encontram.
Igor Neres Trindade A aula de hoje, 13/06/2019, abordou o tema de normalização de texto, aprofundando-se em Stemming. De início, discutimos um pouco sobre a importância da normalização de palavras. Sistemas de buscas são ótimos exemplos para isso, uma vez que eles permitem que documentos sejam recuperados independentemente das formas de escrita que utilizamos, sejam as variações das palavras dadas em função da flexão em gênero, número ou grau, ou mesmo pela conjugação de um verbo em diferente tempos verbais. A normalização nada mais é que a radicalização e existem diversas técnicas para isso. O Stemming, uma delas, reduz a palavra à sua raiz sem levar em conta a classe gramatical, ou seja, verbos e substantivos podem ser reduzidos a um mesmo radical. Deixemos claro, nesse momento, que o radical se diferencia de raiz, pois pode não ter significado. Citemos, como exemplo, as palavras “compute” e “computationally” que podem ser reduzidas a “comput”. Essa última palavra, resultado da redução, é denominada stem. Por consequência, chamamos de stemmer o programa que faz a redução. Notemos que, nesse exemplo, a heurística aplicada corta as extremidades das palavras e, dependendo da maneira que o algoritmo é aplicado, isso pode ocorrer de maneira bem grosseira. É um verdadeiro processo de guilhotina guiado por um conjunto de regras bem específicas do idioma-base, o que traz certa inflexibilidade ao stemmer. Um texto em português normalizado usando uma técnica baseada na língua inglesa pode não ter resultados satisfatórios. O primeiro algoritmo de Stemming visto em aula foi de de Lovins. Julie Beth Lovins desenvolveu um algoritmo pioneiro composto de duas etapas e um conjunto regras e condições. No primeiro passo, procura-se pelo maior sufixo na palavra, que é eliminado satisfazendo-se alguma condição específica dele. Após, consulta-se uma segunda lista de regras para transformar o final, independentemente da execução do primeiro passo. Aplicamos tal algoritmo em sala, como uma atividade prática. O segundo algoritmo visto em sala, um pouco mais robusto, foi de o Porter. Vale mencionar que hoje é o stemmer mais utilizado, principalmente por ser mais completo e simples. Da mesma forma, possui um conjunto de regras verificadas através de 5 passos. Como dissertado anteriormente, um stemmer depende muito do idioma-base. Esses dois algoritmos foram inicialmente desenvolvidos tomando como base a língua inglesa. Usá-los para algum texto em português poderia ser um terrível desastre, principalmente porque eles não consideram os acentos! Mas Viviane M. Orengo, na época doutoranda, hoje professora na UFRGS, desenvolveu uma primeira versão de um stemmer específico para o português. A partir disso, muitos outros foram desenvolvidos. Apesar de tudo que foi desenvolvido até o momento no campo de Recuperação da Informação, podemos encontrar alguns problemas relacionados a perda de informação em stemmers. Na versão original do algoritmo de Porter, “as” seria reduzido a “a”, mudando completamente o sentido semântico, devido a remoção de parte do radical Isso é chamado de “overstemming”. Mas o contrário pode acontecer também! O sufixo pode não ser removido, resultando em um “understemming”. Diversos exemplos em python foram apresentados em aula, inclusive uma aplicação em grafos. Estudamos como representar relações potenciais entre palavras de um dado texto, através de um grafo de co-ocorrência. E a visualização dessas relações melhorou após a normalização das palavras. Por fim, vale citar uma linguagem muito útil para desenvolver stemmers: o snowball. Stemmers surgem a todo momento e são implementados em diferentes linguagens, o que pode causar certa dificuldade para entender o algoritmos. Tal linguagem surgiu nesse contexto. Um fato interessante é que seu compilador traduz o script em uma outra linguagem!
Elsio Antunes Junior A aula do dia 13/06 foi a continuação da aula sobre normalização de texto. Para introduzir a noção de busca com quaisquer flexões de palavra, mais uma vez utilizamo-nos do exemplo do Google, que encontra não só a query digitada literalmente como também nomes e frases parecidas com outras conjugações e flexões verbais. Em português, por exemplo, podemos flexionar as palavras em gênero, número e grau. Além disso podemos prefixar e sufixar palavras. A normalização de que estamos falando visa radicalizar, simplificar ou reduzir as palavras a um representante para que possamos aplicar operadores a grandes massas de texto, extraindo sentido ou simplesmente facilitando a busca por frases específicas. As técnicas estudadas serão "Stemming" e "Lemmatization". Nesta aula nos concentramos nos algoritmos baseados em Stemming, que reduz a palavra a sua raiz sem levar em conta a sua classe gramatical. Representado por um conjunto de regras, o Stemming é uma heurística gulosa que transforma, corta ou reduz as palavras gerando um código que facilita o processamento de outras camadas de aplicação. A ideia do algoritmo é atribuído a Lovins(1968), Julie Beth Lovins(1945-2018). Para cada palavra, procura-se por um dos 294 sufixos sujeitos a 29 condições. Em seguida aplica-se uma das 34 regras de finalização. A segunda parte da aula consistiu em uma atividade de aplicação do algoritmo de Lovins para fixar o entendimento. Lógico, a aplicação prática resultou em novas duvidas que foram esclarecidas pelo professor ao final da atividade. Também foi comentado o algoritmo de Porter (1980) que é similar ao de Lovins com alguma otimização na aplicação das substituições das strings. Vantagens deste tipo de algoritmo são a rapidez na execução e não precisar de conhecimento prévio além dos 300 prefixos. Em seguida, conhecemos 'Orengo' a versão em português do algoritmo, atribuído a Viviane Moreira Orengo e Cristian Huyck apresentaram sua versão do algoritmo no 8º Simpósio Internacional SPIRE (String Processing and Information Retrival) de 2001. Uma tabela de outras opções de algoritmos para cada idioma nos foi apresentado no slide 29 onde se nota que o algoritmo Porter está presente na maioria deles, inclusive o português. O site http://text-processing.com/demo/stem/ traz uma aplicação em Python NLTK que processa online um texto enviado pelo usuário. Discussão: A comparação entre o texto processado pelo Stemmer mostra uma redução significativa, tanto no tamanho total do texto quanto na variabilidade do mesmo; Harman (1990) afirma que a utilização de uma base de dados reduziria a eficiência do algoritmo; não há motivos teóricos para não considerar também a redução dos prefixos das palavras; considera-se para projeto de final de disciplina um Stemmer de nomes próprios; algoritmos de Stemming não deveria permitir perda de muita informação; A partir disto o professor nos pediu que pesquisasse sobre "snowball" neste contexto. (snowball é um algoritmo que permite criar stemmers baseados em Porter para outros idiomas) Por fim nos foi apresentado o conceito de "rede (grafo) de palavras". Um código que, depois de contar as palavras e de compilar um histograma, gera um "grafo de co-ocorrência" que liga as palavras através de arestas que contém a frequência dos pares de palavras. O código foi mostrado passo a passo, incluindo o passo de retirada das stopwords e montagem da imagem do grafo pelo site http://www.webgraphviz.com/ . Sugiro que reproduzam.
Thiago Henrique Gomes Panini A quarta aula de Processamento de Linguagem Natural foi iniciada com um breve resumo referente a terceira aula e introduziu o tema de normalização de palavras. Em inglês, português, ou qualquer idioma, as palavras são categorizadas de acordo com as regras linguísticas caraterísticas de cada dialeto. Em todos os casos, a normalização pode ser entendida como o processo de redução, simplificação ou radicalização das palavras. Existem técnicas específicas para a realização da normalização, sendo as principais conhecidas como _stemming_ e _lemmatization._ Após o link com o final da aula de número três, a aula quatro teve sequência detalhando destas duas principais abordagens responsáveis pela normalização de palavras. Stemming geralmente refere-se a um processo de heurística que corta as extremidades das palavras inclui frequentemente a remoção de afixos derivacionais. Já o processo de Lemmatization, por sua vez, pode ser considerado mais complexo que o Stemming (e também mais eficiente), visto que busca reduzir as palavras em “Lemmas”, ou seja, a forma básica da palavra e não em apenas uma parte da palavra, como no Stemming. Entrando mais a fundo do algoritmo de Stemming, é possível encontrar algumas variações idealizadas e implementadas por estudiosos ao longo dos anos. Um deles, desenvolvido em 1968 por Julie Beth Lovins é conhecido como Lovins Stemmer e dado como o pioneiro e influenciador de muitos stemmer. O algoritmo de Lovins Stemmer é composto por 294 sufixos, 29 condições e 34 regras de transformação e possui apenas duas etapas de processamento. Primeiro, deve-se procurar e remover o sufixo de maior tamanho contido na palavra. Para isso, existe uma lista de 294 sufixos ordenados pela quantidade e letras. A segunda etapa aplica-se na transformação do final do palavra e é utilizada se um sufixo é removido ou não na primeira etapa. Com essa explicação, foi possível realizar a atividade proposta pelo professor para identificar o radical de cada palavra utilizando o algoritmo de Lovins Stemmer como base. Nela, foram propostas algumas palavras que deveriam ter seus sufixos e regras, se aplicáveis, identificados e transformados de acordo com as regras propostas. O objetivo foi presenciar, na prática, diferentes situações de normalização com palavras da língua inglesa. Logo após a atividade, o algoritmo de Stemmer proposto por Martin F. Porter foi detalhado. Porter Stemmer, como é conhecido, foi inicialmente publicado em um relatório de projeto final de Recuperação de Informação. É considerado mais completo e simples que o Lovins Stemmer. Para seu entendimento, o professor Jesus mostrou aos alunos o código em Python utilizado para a implementação do Porter Stemmer. Curioso pontuar que o algoritmo é formado por uma série de condicionais. Até o momento, os alunos tinham em mente algoritmos responsáveis pela normalização de palavras que foram desenvolvidos levando em consideração o idioma inglês. Quando o português é o espaço amostral, existem uma série de regras diferentes que precisam ser aplicadas de acordo com as particularidades proporcionadas pelo idioma. Considerando essas dificuldades, Viviane Moreira Orengo propôs, em 2001, uma versão de um algoritmo de radicalização para a língua portuguesa. Seus detalhes foram evidenciados em aula. Logo em seguida, alguns temas a respeito do significado das palavras de modo a contemplar o conceito das mesmas na normalização. Outras abordagens para stemming também foram pontuadas em aula, como por exemplo, a utilização de redes (grafos) de palavras.
Arthur Veloso Kamienski A quarta aula de PLN foi deu continuação ao assunto de normalização de texto, desta vez com ênfase no método de Stemming. Normalização de texto é a técnica de tornar iguais palavras distintas com uma mesma raíz e significado. Esse processo é importante para facilitar a extração da semântica do texto, ao passo que variações das palavras que não alteram o sentido do texto são retiradas, restando apenas uma palavra derivada que identifica o conjunto de palavras similares. Essas variações podem ser dadas tanto pela adição de prefixos (ao começo das palavras) quanto de sufixos (ao final), quanto por flexões de gênero, número e grau, e também por conjugações verbais. O processo de Stemming consiste na redução de palavras à sua raiz (em inglês, stem), sem levar em conta a classe gramatical. Algoritmos de Stemming utilizam uma heurística para cortar as extremidades das palavras, seguindo um conjunto de regras definidos para uma dada linguagem. Stemming, no entanto, não reduz a palavra a sua raiz no sentido linguístico, dado que a palavra pode não ter significado algum. Algoritmos de stemming são comumente chamados de Stemmers. Isso vem em contraste aos Lemmatizers, que convertem uma palavra ao seu Lemma, ou forma básica. Existem diversos algoritmos de Stemming, especialmente para a lingua inglesa. O algoritmo pioneiro é o algoritmo de Lovins, criado por Julie Beth Lovins em 1968 em sua tese de doutorado. O algoritmo impõe uma série de regras de corte de palavras na lingua inglesa, indicando a forma correta de remover 294 sufixos seguindo um conjunto de 29 condições mapeadas para cada sufixo e 34 regras de transformação. O algoritmo é um algoritmo guloso, uma vez que sempre tenta retirar o maior sufixo possível de uma palavra. O seu funcionamento é dado em 2 etapas: na primeira, o maior sufixo que satisfaz as condições indicadas é removido (essas específicas para um determinado sufixo); na segunda, as regras de transformação são aplicadas à palavra, tendo ela sido cortada ou não. Existe aindo o algoritmo de Porter, de 1980, que realiza o mesmo trabalho de redução que o algoritmo de Lovins, sendo também um Stemmer. O algorimto de Porter é mais simples e mais completo, sendo mais utilizado atualmente. O algoritmo é guloso, assim como o de Lovins, e também apresenta uma série de regras de redução dadas certas condições. Uma consideração importante com relação a esses algoritmos é que eles reduzem as palavras sem ter um conhecimento prévio de sua redução. O algoritmo de Orengo, criado em 2001, é o Stemmer mais amplamente divulgado para a lingua portuguesa. Ele é constituido por 199 regras em 8 passos distintos. Existem ainda outras propostas de Stemmers para diferentes linguas. Por fim, cabe indicar que Stemmers são mais eficientes do que uma base de dados de conversão de palavras (dicionário), e podem levar a melhores resultados. Além disso, Stemmers costumam retirar apenas sufixos, dado que prefixos podem ter caráter semântico. Finalmente, os Stemmers não deveriam prover uma perda de informação, estando no limiar entre o Overstemming (retirada de parte do radical) ou Understemming (quando o sufixo não é totalmente reduzido. Existe ainda a aplicação de Stemmers para nomes, como para o caso de conversão de apelidos.
Renato de Avila Lopes Normalização de texto: Stemming Documentos indexados com diferentes nomes devem ser recuperados usando quaisquer das suas formas de escrita por um sistema de busca Na língua portuguesa palavras flexionam em gênero, número e grau e possuem inúmeros tempos verbais distintos. Trabalhador - Trabalhadora Normalizar palavras reduz, simplifica ou radicaliza a palavra Stemmig e Lemmatization Stemming reduzir a palavra à sua raiz amig: amigo, amiga, amigão Heurística que corta as extremidades das palavras (redução de afixos derivacionais) Conjunto de regras que dependem da linguagem Computationally Computational Computation Computa Comput Não é a raiz da palavra, o resultado pode não ter significado Stem é parte de uma palavra Stemmer é o programa Algoritmo de Lovins: 249 sufixos, 29 condições e 34 regras de transformações Processamento rápido, apenas 2 etapas Procurar pelo sufixo de maior tamanho na palavra que satisfaça as condições e remover Regras são aplicadas para transformar o final se um sufixo é removido ou não na primeira etapa A atividade prática consistia em radicalizar palavras utilizando o algoritmo de Lovins, indicando a sequência de sufixos e regras National \- Nat Retirada do sufixo "ional" Nationally \- Nat Retirada do sufixo "tionally" Sitting \- Sit Remoção de "ing" Sitt Utilizando regra 1 Sit Matrix - sem remoção de sufixo regra 16 (ix muda para ic) Matric Matrices \- Matric Remoção de "es" Matric Magnesuim \- Magnes Remoção de "ium" Rubbing \- Rubb Remoção de "ing" Regra 1 Rub Além do algoritmo de Lovins (1968), também foi demonstrado o algoritmo de Porter (1980), ambos para o idioma inglês. Eliminam os finais das palavras. Não é necessário conhecimento prévio da palavra para realizar a redução Porter - algoritmo mais completo e mais simples que o algoritmo de Lovins Stemmer mais utilizado atualmente Utiliza 5 passos, regras e operação de validação Remove-se o sufixo que casou Exemplo Shared Shar, Shed Shed (não Sh) Passo 1a sses \- ss (caresses \- caress), ies \- i (ponies \- poni), s - "" (cats \- cat) Passo 1b (m > 1) eed \- ee (agreed \- agree) pelo menos uma consoante, (*v*) ed \- "" (plastered \- plaster) raiz deve conter vogal Stemmer para português - Orengo (2001) Primeira versão amplamente divulgada de um stremmer para português 199 regras distribuídas, 8 passos Considera lista de exceções (sufixo "tivo" \- exceção relativo) Exemplo regras: sufixo edor tamanho mínimo 3 entendedor \- entend, sufixo quice tamanho mínimo 4 substituição c maluquice maluc Base de dados para comparar palavras Maior tempo de processamento computacional e poderia não valer a pena Eliminar sufixos Não há motivo para não considerar a eliminação de prefixos Algoritmo de stemmer não deveria permitir a perda de muita informação Overstemming remoção do sufixo e parte do radical Understemming não remoção do sufixo, ou remoção parcial Projeto final - Stemmer para nomes (Pedrão - Pedro, Guilherme - Gui) Algoritmo fool-stemmer.py Duas palavras diferente são reduzidas a um mesmo radical (overstemming) Algoritmo porter-stemmer.py Snowball framework para gerar stemmer para recuperação de informação Algoritmo graph1.py Grafo de palavras Grafos de co-ocorrência de palavras Identificação visual de relações potenciais entre palavras Considera propriedades topológicas nos grafos para descoberta de conhecimento Estudo da organização das palavras
Marcela Akemi Yamashita A aula deu continuação à anterior tratando sobre normalização de palavras. Um sistema de busca deve permitir que documentos indexados com diferentes nomes possam ser recuperados usando independente de sua forma escrita.. Quando buscamos “controladores digitais” podem haver páginas com o termo “controlador digital” que tratam do mesmo assunto. Um buscador deve ser capaz de fazer associação. Em português as palavras podem ser flexionadas em gênero, número, grau, além de tempos verbais distintos. Ex: trabalhador/trabalhadora, degrau/degraus, amigo/amigão. A normalização de palavras pode ser a redução, simplificação ou radicalização de palavras. Técnicas importantes: stemming e lemmatization. Stemming: reduzir a palavra à raíz, desconsiderando a classe gramatical. Ex: amig: amigo, amiga, amigão. Stemming geralmente se refere a um processo que corta as extremidades das palavras e inclui frequentemente a remoção de afixos derivacionais. Pode ser representado por regras que dependem da linguagem. Não se trata da raíz da palavra (da forma linguística). O radical da palavra pode não ter significado. Ex: produced -> produc. Lemmatization: reduz a lemmas(a forma básica da palavra). Ex: produced -> produce. Há diferentes algoritmos, principalmente para o inglês. Algoritmo pioneiro e influenciador de stemmers é o de Lovins (1968), composto por 294 sufixos, 29 condições e 34 regras de transformação. Possui 2 etapas. 1) procurar pelo sufixo de maior tamanho na palavra e que satisfaz a(s) condições e removê-lo. 2) as regras aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. Ex: sitting. Após a remoção do sufixo “ing” sobra “sitt”, aplica-se a regra de transformação 1 (eliminar uma t), sobra “sit”. Lovins não ficou na academia, porém pelo tempo que ficou contribuiu significativamente na área. Algoritmo é o de Porter(1980), An algorithm for suffix stripping. Inicialmente publicado em um relatório de projeto final de recuperação de informação. Algoritmo mais completo e simples que de Lovins. O mais utilizado atualmente. Contém 5 passos bem definidos, usando regras e operação de validação, onde cada palavra é comparada sequencialmente com maior sufixo possível. Casou o sufixo, então remove-o da palavra. Ambos algoritmos eliminam consecutivamente os finais das palavras . Não é necessário conhecimento a priori para redução. Há exemplos de código em python do algoritmo de Porter. Em português há o algoritmo de stemming de Orengo(2001), com 199 regras distribuídas por 8 passos e uma lista de exceções(ex: relativo). Há uma lista de versões para vários idiomas. Em python há o pacote NLTK para stemming e lemmatization. Há uma demonstração comparando os resultados com e sem radicalização. Em stemmers é possível utilizar um dicionário para comparar palavras reduzidas. É um procedimento custoso em termos de processamento e não necessariamente compensaria. Um algoritmo de stemming não deve perder informação. Overstemming, é removido não só o sufixo mas também parte do radical. Understemming, o sufixo não é removido ou é removido parcialmente. Gráficos de co-ocorrencia: permitem identificar as relações potenciais entre palavras. É possível utilizar propriedades topológicas dos grafos para descobrir conhecimento a partir de textos e sua organização.
Rodrigo Hiroaki Ideyama O tema da aula foi “Normalização de texto: Stemming”, ou seja, o professor Jesús aprofundou nos seus ensinamentos sobre o conteúdo de Stemming, uma das técnicas para realizar a normalização. Primeiramente, fez-se uma breve revisada da aula anterior ao explicar a “normalização de palavras” que pode ser entendida como a redução ou a simplificação ou a radicalização de palavras, tendo como as técnicas mais importantes o stemming e a lemmatization. Depois, ele falou novamente do conceito de Stemming: consiste em reduzir a palavra à sua raiz (sem levar em conta a classe gramatical), geralmente refere-se a um processo de heurística que corta as extremidades das palavras, incluindo frequentemente a remoção de afixos derivacionais, como por exemplo, computationally, computational, computation, computa e comput. Além disso, citou a diferença entre stemming e lemmatization, sendo stemming, a ação de reduzir em stems (parte de uma palavra) e lemmatization, a ação de reduzir em lemmas (forma básica da palavra). Em seguida, Jesús falou de alguns tipos de algoritmos de Stemming: Lovins, Porter e Orengo. O Lovins é composto por 294 sufixos, 29 condições e 34 regras de transformação, lida com letras duplicadas (sitting->sitt->sit), plurais irregulares (matrix e matrices) e algumas palavras irregulares (commit e commission) e execução muito rápida mas pouca abrangente. Professor entregou a folha do algoritmo de Lovins e deu 10 min para os alunos tentar usá-lo em um teste que continha sete palavras. O algoritmo de Martin F. Porter é o Stemmer mais famoso e utilizado, mais simples e completo do que Lovins e o algoritmo possui passos definidos, onde em cada fase a palavra é comparada sequencialmente com o maior sufixo presente, caso este seja encontrado, o mesmo é removido ou substituído. O algoritmo de Orengo foi a primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa, sendo constituído por 199 regras distribuídas por oito passos e considera uma lista de exceções seguida de uma ordem mostrada em um fluxograma. Esses foram os algoritmos exemplificados em aula, porém logo em seguida, o professor mostrou cada algoritmo ideal a ser aplicado para cada língua do mundo, sendo amplamente utilizados com o apoio do recurso da biblioteca NLTK do Python. Depois, foi mostrado aos alunos textos que haviam comparações de resultados entre palavras únicas sem radicalização e com radicalização, mas também algumas considerações não discutidas sobre os stemmers: uso de uma base de dados, por que não eliminar prefixos, stemming na literatura, perda de detalhe ou informação e stemmer para nomes. Como era quinta-feira, professor mostrou o algoritmo fool-stemmer.py que reduzia em três letras palavras que possuem quatro ou mais letras e o porter- stemmer.py. À pedido do Jesús, Snowball é uma biblioteca de stemming de python desenvolvida por Shibukawa. Para a finalização da aula, ele mostrou seis práticas que envolvia rede (grafo) de palavras, tendo como especial, o grafo de co-ocorrência. Todos eles procurando estudar os potenciais relacionamentos entre as palavras de um texto por meio das propriedades topológicas.
Mauro Mascarenhas de Araujo No início, foi feita uma breve retomada a respeito de normalização de textos, onde foi citado um dos casos de uso: Os sistemas de busca devem permitir que documentos indexados com diferentes nomes possam ser recuperados utilizando quaisquer das suas formas de escrita. Também relembrou-se as técnicas de normalização (que pode ser entendida como a redução ou a simplificação ou a radicalização de palavras) existentes (Stemming e Lemmatization). Processo de Stemming: Reduzir a palavra à sua raiz (que não é necessariamente uma palavra (lexicamente falando)), linguisticamente chamada de radical -> Uma das características da raiz gerada é que ela pode não ter significado. Processo de Lemmatization: Consiste em reduzir a palavra à sua forma básica (fazendo o uso de um dicionário). Quanto aos algoritmos de Stemming foram apresentados os algoritmos de Lovins e Porter. O de Lovins é um algoritmo guloso pioneiro que serviu de base para o desenvolvimento de outros, considerando 294 sufixos (removidos das palavras), 29 condições (stem->radical) e 34 regras (aplicadas ao que sobrou). Logo após, foi proposta uma atividade, onde deveríamos aplicar o algoritmo de Lovins às palavras: National, Nationally, Sitting, Matrix, Matrices, Magnesium, Rubbing; além de perguntar o que é um grafo de co- ocorrência. Voltando aos algoritmos, foi apresentado o algoritmo de Porter, que é mais completo e mais simples que o de Lovins, sendo o stemmer mais utilizado atualmente (ele tem 5 passos bem definidos, usando regras e operações de validação). Até certo ponto, o algoritmo de Porter é similar ao de Lovins, pois, cada palavra é comparada sequencialmente com o maior sufixo possível (se o sufixo bater, ele é removido da palavra) -> Por fim, foi apresentado a implementação em Python. Em sequida, foi apresentado o Orengo, a primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa (constituído de 199 regras distribuídas em 8 passos, além de possuir uma lista de exeções). Também foi apresentado uma comparação de resultados entre o mesmo texto sendo processado por Stemming e Lemmatization. Também foram feitas algumas considerações a respeito dos Stemmers: Poderia utilizar um banco de dados como dicionário para comparar as palavras, o que ocasionaria na necessidade de maior tempo computacional (talvez o esforço investido não valha a pena); Não há motivo teórico que impeça a remoção de prefixo; Técnica alternativa: Snowball; O Stemmer não deveria deixar perder muita informação (Exemplos de perda: Poder -> Po, Ver -> Ve, Chamo -> Ch); Problema de Overstemming (parte do radical acaba sendo removida); Problema de Understemming (o sufixo não é removido (ou só é removido em partes)). Para a parte prática foi aprensentado o algoritmo fool-stemmer (trunca nos três primeiros caracteres [Overstemming]); Poter Stemming (Usou-se uma classe importada); Construiu-se um grafo de co-ocorrência (Algoritmo avalia as palavras em pares), possibilitando saber o assunto do texto com poucas palavras. PERGUNTA: O que é snowball (em Stemming): Snowball é uma pequena linguagem de programação para processamento de cadeias desenvolvido para criar algoritmos de Stemming para o uso em recuperação de informação desenvolvido na Bell Labs.
Joao Victor Fontinelle Consonni A quarta aula de PLN começou com uma recapitulação do conceito de normalização, visto na aula anterior. A normalização de palavras consiste na redução, simplificação, ou radicalização de palavras. Na lingua portuguesa, temos diferentes palavras flexionadas em gênero, número ou grau, além de inúmeros tempos verbais distintos. Desta forma, a normalização busca fazer com palavras distintas, mas com uma mesma origem, sejam interpretadas por uma única palavra. As duas técnicas mais importantes de normalização, que foram mencionadas na aula anterior, foram stemming e lemmatization. A quarta aula de PLN apresentou a técnica de stemming em maior detalhe. O processo de stemming consiste em reduzir a palavra à sua raiz (sem levar em conta a classe gramatical). Stemming geralmente refere-se a um processo de heurística que corta as extremidades das palavras, o que inclui, frequentemente, a remoção de afixos derivacionais. Vale salientar que esta técnica não busca chegar à raiz da palavra, mas sim a um radical, que pode ou não ter significado semântico. A técnica de stemming pode ser representada por um conjunto de regras que são dependentes da linguagem. No caso do inglês, o primeiro algoritmo de stemming foi o algoritmo de Lovins, publicado em 1968. Esse algoritmo é composto por 294 sufixos, 29 condições e 34 regras de transformação, que são utilizados ao longo de duas etapas. Na primeira etapa, procura-se pelo sufixo de maior tamanho na palavra, de forma que a condição associada àquele sufixo seja atendida. Na segunda etapa, as regras de transformação são aplicadas sobre a parte restante da palavra, se um sufixo é removido ou não na etapa anterior. Após a explicação teórica do algoritmo de Lovins, foi aplicado um teste para treinar a aplicação do algoritmo em algumas palavras da lingua inglesa. Em seguida, foi apresentado o algoritmo de Porter, publicado em um relatório de projeto final de Recuperação de Informação em 1980. O algoritmo de Porter é mais completo e mais "simples" que o de Lovins e é, ainda hoje, o stemmer mais utilizado. O algoritmo de Porter é composto por 5 passos que utilizam regras de operação e validação, comparando cada palavra sequencialmente com o maior sufixo possível e por aí vai. Apenas em 2001 foi publicada a primeira versão amplamanete divulgada de um algoritmo de radicalização para a lingua portuguesa, o algoritmo de Orengo, constuído por 199 regras distribuídas em 8 passos, além de considerar uma lista de exceções. Na parte prática da aula, a biblioteca NLTK do python foi utilizada para demonstrar a comparação entre palavras únicas. Neste momento ficou evidente que o algoritmo de stemming, por vezes, conduz à perda de informação, o que não é desejado. Assim, vimos os conceitos de Overstemming e Understemming. Neste contexto foi mencionado o Snowball, uma linguagem de processamento de strings projetada para criar algoritmos de stemming para recuperação de informações. Foram também vistas outras abordagens para stemming, como a estatística. Por fim, foi apresentada a ideia de grafo de palavras e grafos de co-ocorrência, assim como a ferramenta graphviz.
Rodrigo Akiyama Abrantes Resumo da Aula 4 - Normalização de texto: Stemming Na língua portuguesa as palavras podem ser flexionadas em gênero, número ou grau, além da conjugação temporal n ocaso de verbos. Exemplos: trabalhador, trabalhadora e trabalhadores para gênero e número. Para que as palavras sejam simplificadas, de maneira que torne o trabalho de processamento de linguagem natural mais fácil, estas passam pelo processo de normalização ou radicalização. As duas técnicas mais importantes de normalização são a stemização (stemming) e a lematização (lemmatization). O processo de stemming consiste na redução da palavra à sua raiz, independente de sua classe gramatical. É um processo de heurística, ou seja, emprega uma estratégia que ignora parte da informação, que neste caso são as extremidades das palavras, com o objetivo de tornar a solução mais fácil e rápida. Ela remove as extremidades das palavras e, frequentemente, remove os afixos derivacionais. Devido a isto, muitas vezes o raiz obtida não possui significado algum. Exemplo: Comput é a raiz das palavras computador, computacional, computando e demais derivados. Deve-se sempre se atentar ao fato de que Stemming e Lemmatization são duas técnicas distintas. A primeira busca a redução da palavra à sua raiz e a segunda realiza a deflexiona a palavra para encontrar o seu lema, a sua forma básica. Por se tratar de técnicas linguísticas, ambos os métodos possuem aplicações e algoritmos que são aplicáveis apenas a certas línguas. Para o stemming em inglês pode-se citar o sample text, o lovins stemmer e o porter stemmer. O algoritmo de stemming foi o pioneiro deste processo e influenciou diversos outros métodos posteriores. Foi desenvolvido em 1968 e seu processamento consiste em apenas duas etapas: (1) procurar pelo sufixo de maior tamanho na palavra e que satisfaz a(s) condições a ele ligadas. Este sufixo é então removido. (2) As regras são então aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. O algoritmo Porter, publicado em 1980, é o stemmer mais utilizado atualmente. Seu algoritmo é mais completo e “simples” do que o de Lovins e possui cinco regras que regem seu funcionamento. Para a língua portuguesa, existe o Algoritmo de Orengo que foi publicado em 2001 e foi a primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa. Ela possuí 199 regras distribuídas em 8 passos e ainda conta com uma lista de exceções. Considerações quanto os stemmers: (1) Não é utilizado a comparação com um dicionário de palavras pois o tempo de processamento necessário para realizar a varredura e comparação de cada palavra em um texto seria elevado demais. (2) Os prefixos podem ser eliminados também durante o processo de stemming. (3) Um algoritmo de stemming é avaliado com base no seu overstemming (remoção de parte do radical) e do understemming (o sufixo ou prefixo é removido parcialmente). Snowball: é uma linguagem de processamento de desenvolvida para a criação de algoritmos de stemming. Seu compilador traduz um script em snowball para outras linguagens de programação.
Leonardo Nascimento A normalização de palavras é um tratamento para que seja possível recuperar resultados de uma busca usando qualquer forma da palavra procurada. Essa normalização pode ser feita por meio da redução, simplificação, ou radicalização das palavras. Na língua portuguesa, por exemplo, temos diferentes palavras flexionadas em gênero, número ou grau, além de tempos verbais distintos. As duas as técnicas mais importantes para desconsiderar essas variações são stemming e lemmatization. O processo de stemming consiste em reduzir uma palavra a um radical removendo suas extremidades. Normalmente utiliza-se uma heurística com um conjunto de regras que incluem a remoção de afixos derivacionais. Algoritmos de stemming geram stems, que são parte de uma palavra, e algoritmos de lemmatization geram lemmas, que são a forma básica de uma palavra. Exemplificando, o stem da palavra “produced” é “produc” enquanto o lemma é “produce”. Dois algoritmos de stemming desenvolvidos para o inglês se destacam dentre os múltiplos existentes. Estes são o algoritmo de Lovins (1968), pioneiro e influenciador de muitos stemmers, e o algoritmo de Porter (1980), cujo é o stemmer mais utilizado atualmente. O algoritmo de Lovins define 294 sufixos e 29 condições para a primeira etapa, que consiste em procurar o sufixo de maior tamanho que satisfaça as condições para remoção, e 34 regras de transformação para a segunda etapa, onde o final da palavra pode ser trocado. Inicialmente publicado em um relatório técnico de um projeto de Recuperação de Informação, o algoritmo de Porter é mais completo e mais simples que o de Lovins. São cinco passos com regras de operação e validação, onde cada palavra é comparada sequencialmente com o maior sufixo possível. A ideia do algoritmo de Porter é similar ao de Lovins, ambos são gulosos e removem consecutivamente os finais das palavras sem conhecimento a priori. Viviane Moreira Orengo criou, em 2001, o primeiro algoritmo de stemming para a língua portuguesa amplamente divulgado. O processo é composto por 199 regras distribuídas em 8 passos, e uma lista de exceções. Apesar apenas stemmers de sufixos terem sido mencionados, não há nenhum motivo teórico para não considerar a eliminação de prefixos. Poderia também haver o uso de dicionários para comparar as palavras reduzidas, mas o maior tempo de processamento pode não compensar. Outras abordagens além dessas de remoção são a estatística e a mixa. Para quantificar a perda de informação da palavra original existem as medidas de overstemming e understemming. Quando é removido não só o sufixo, mas também uma parte do radical, temos um caso de overstemming, e understemming é aconteceria quando o sufixo não é removido, ou apenas é removido parcialmente. Snowball é uma linguagem de processamento de texto usada para desenvolver algoritmos de stemming. Seu compilador transforma o código fonte em código fonte de linguagens como C, Java e Python. Os grafos de coocorrência de palavras são utilizados para proporcionar uma visualização gráfica das relações potenciais entre palavras, onde podemos estudar a organização das palavras e considerar propriedades topológicas para descoberta de conhecimento em um texto.
Humberto Vagner Tondinelli Correa Um sistema de busca deve permitir que documentos indexados com diferentes nomessejam recuperados usando quaisquer das suas formas de escrita. A normalização de palavras pode ser entendida como a redução, simplificação ou a radicalização de palavras, existindo duas técnicas mais importantes: Stemming e Lemmatization. O processo de stemming consiste em reduzir a palavra à sua raiz, deixando de lado a classe gramatical. Geralmente refere-se a um processo de heurística que corta as extremidades das palavras e inclui frequentemente a remoção de afixos derivacionais. Lembrando que não é a raiz da palavra na forma linguística, a palavra pode não ter significado. Resumindo o processo de stemming é a ação de reduzir em stems, onde um stem é parte de uma palavra e o stemmer um artefato (o programa). Enquanto que Lemmatization é a ação de reduzir em lemmas, onde um lemma é a forma básica da palavra e o lemmatizer um artefato (o programa). Existem diferentes algoritmos de stemming, dentre eles Lovins Stemmer e Porter Stemmer. O algoritmo de Lovins foi o pioneiro e influenciador de muitos stemmers. Desenvolvido por Julie Beth Lovins em 1968, é composto por 294 sufixos, 29 condições e 34 regras de transformação e o processamento é rápido: apenas 2 etapas. 1) Procurar pelo sufixo de maior tamanho na palavra e que satisfaz as condições e então removê-lo. 2) As 34 regras são aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. O algoritmo de Porter é mais completo e mais simples do que de Julie Lovins e é o stemmer mais utilizado atualmente.Foi descrito em 1980 por Martin F. Porter e publicado em um relatório de Recuperação de Informação. Possui 5 passos e todos foram bem definidos: Usam-se regras e operações de validação.Similar ao de Lovins, onde cada palavra é comparada sequencialmente com o maior sufixo possível, se o sufixo casou ele é removido da palavra. O algoritmo Orengo foi a primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa. Escrito em 2001 por Viviane Moreira Orengo e Christian Huyck, é constituído por 199 regras distribuídas por 8 passos e considera uma lista de excepções e executa uma série de reduções e remoções até o resultado final. Um bom recurso é o Python NLTK, uma biblioteca utilizada para stemming e lemmatization. Poderia ser utilizado uma base de dados para comparar as palavras reduzidas, entretanto esse procedimento requerirá maior tempo de processamento computacional e mesmo consumindo maior tempo o esforço poderia não valer a pena. Não há nenhum motivo teórico para não considerar a eliminação de prefixos nos stemmers. O algoritmo de stemming não deveria permitir a perda de muita informação e podem ser utilizadas algumas medidas de desempenho: Overstemming, quando é removido não só o sufixo, mas também uma parte do radical. Understemming, quando o sufixo não é removido, ou é apenas removido parcialmente. Snowball é um framework, ou ainda uma linguagem para criação de algoritmos de stemming.
Carlos Eduardo Ramos A Aula 4 teve o tema Normalização de texto, com enfoque na técnica de Stemming, baseada na redução ou corte das extremidades de palavras segundo uma determinada heurística. A normalização de palavras esta relacionada com mecanismos de busca, que devem retornar a partir de uma pesquisa, quaisquer das suas formas de escrita do objeto pesquisado. Na língua portuguesa, diferentes palavras são flexionadas em gênero, numero e grau, por exemplo: Jogador e Jogadora, criança e crianças, porta e portões. Neste contexto, a normalização de palavras apresenta a forma canônica de uma palavra, reduzindo e simplificando uma palavra. Temos duas técnicas de normalização: Stemming - reduz a palavra, cortando as extremidades dela a partir de uma heurística definida, i.e um conjunto de regras. Lemmatization- aplica técnicas para flexionar as palavras até sua forma de dicionário, retirando conjugação verbal, alterando substantivos ou adjetivos para masculino, etc. Exemplo de redução: Naturalmente, Natural, Nat. O resultado obtido é o radical da palavra, que é diferente da raiz da palavra. O radical pode não ter significado. Podemos chamar radical de stems. Na lematização, é possível obter a raiz da palavra, onde a palavra é reduzida em lemas. Exemplo: Produced, Produce.Existem diferentes algoritmos de Stemming, dentre eles temos: Porter Stemmer e Lovins Stemmer, escritos por Martin F. Porter em (1980) e Julie Beth Lovins em 1968, respectivamente. O algoritmo de Lovins foi o pioneiro na normalização de palavras. O algoritmo possui um conjunto de sufixos e prefixos armazenados, bem como um conjunto de regras para a transformação de palavras, ao passo que tem duas etapas bem definidas: procurar pelo maior sufixo possível na palavra alvo e remove-lo, e aplicar alguma determinada regra para a transformação final da palavra. Fizemos uma atividade prática para aplicar o algoritmo de Lovins em algumas palavras. O algoritmo de Porter possui 5 passos bem definidos, usados para operação e validação. O mecanismo é semelhante ao usado por Lovins, onde se há casamento entre o sufixo, o mesmo é removido. O primeiro algoritmo de radicalização para a língua portuguesa foi criado por Viviane Moreira Orengo, em 2001. O algoritmo de Orengo foi constituído por 199 regras distribuídas por 8 passos de modo que considera uma lista de exceções. Exemplo: palavra contraceptivo, reduzida para "contracept" após remoção do sufixo "tivo", cuja exceção é a palavra relativo. Outras propostas para diferentes línguas foram apresentadas em uma tabela. O framework do Python, NLTK foi usado em um teste com a operação de stemming, e fizemos uma comparação entre palavras únicas normalizadas sem radicalização e com radicalização. Para reduzir erros nos lematizadores, Martin Porter lançou uma implementação oficial em software livre de um algoritmo para stemming por volta do ano 2000. Ele estendeu esse trabalho nos anos seguintes, construindo o Snowball, uma estrutura para escrever algoritmos, e implementou um aprimorado stemmer em inglês junto com lematizadores para vários outros idiomas. Definimos grafos de ocorrência que modelam redes de palavras (vértices) e suas relações no texto (arestas). Estes grafos são digrafos ponderados.
Rodolfo Azevedo Dos Santos Normalização de texto: Stemming Ex: Busca por um termo no plural e resultados são mostrados no singular/plural e vice-versa. i.e.: Controladores Digitais: Retorna os seguintes resultados: Controles digitais/Controle digital. No português, as palavras são flexionadas (gênero, número, grau e tempos verbais). Ex: Homem / Homens. Pessoa/Pessoas. Degrau/Degrais. Normalização de palavras é a redução ou a simplificação ou a radicalização de palavras. Existem duas técnicas: 1) Stemming: Reduz a palavra até sua raiz. Não é a raiz da palavra da forma linguística. Ou seja, a palavra resultante pode não ter significado. Utiliza a heurística que corta a extremidade das palavras. Reduz em stems (trunca a palavra). Stem é parte da palavra. Stemmer é o programa que transforma a palavra em stems. Ex: Computationally / computational/ computation/ computa/ comput 2) Lemmatization: Reduz a palavra em Lemmas. É necessário um dicionário para realizar esse processo. Lemma: Forma básica da palavra. Lemmatizer é o programa que transforma a palavra em Lemma. Para ambos as técnicas existem algoritmos específicos. Algoritmo de Lovins: Pioneiro e influenciador de muitos outros stemmers. Possui 294 sufixos, 29 condiçõe e 34 regras de transformação. Todo o processo possui apenas 2 etapas, portanto, é rápido. 1) Procura o sufixo de maior tamanho na palavra e que satisfaz as condições – Remover Verificar as 29 condições Verificar as 34 regras 2) Aplicar as regras para transformar o final (aplicadas se um sufixo foi removido ou não na primeira etapa). Algoritmos para stemming em inglês: 68: Lovins 80: Porter (Stemming mais utilizado atualmente). É um algoritmo mais completo e “mais simples” do que o de Lovins. Possui 5 passos bem definidos. Utiliza regras e validação. Similar ao algoritmo de Lovins: Cada palavra é comparada com o maior sufixo possível. Caso haja um “match” com o sufixo então o remove da palavra. Orengo (2001) é um algoritmo para stemming para a língua portuguesa: Constituído de 199 regras distribuídas em 8 passos. (Considera uma lista de exceções ao aplicar as regras). Existem diversos outros algoritmos de stemming para outras línguas. Considerações: 1) Utilizar dicionário (base de dados) para comparar palavras reduzidas requer maior tempo de processamento e o esforço investido não vale a pena. 2) Não há motivo teórico que impeça de eliminar prefixos. 3) O algoritmo não deveria permitir grande perda de detalhe/informação (ou seja, reduzir demais de modo a descaracterizar o sentido da palavra). Overstemming: Quando a remoção ocorre além do sufixo mas também em parte do radical Understemming: Quando o sufixo não é removido ou é apenas parcialmente removido. Fool.stemmer.py: Trunca todas as palavras em 3 caracteres, por isso é um algoritmo “tolo”. Porter-stemmer.py: Algoritmo de Porter em Python Rede(grafo) de palavras: Servem para visualizar e estudar a relação entre palavras (com ou sem stopwords) O que é Snowball (contexto de algoritmos de stemming): É uma linguagem na qual algoritmos de stemming podem ser facilmente representados. (Converte um script de Snowball em um programa thread-safe C ou Java).
Laura Cestavo Borges Dos Santos Stemming consiste em reduzir a palavra à raiz dela, por exemplo, as palavras amigo, amiga e amigão todos se tornariam amig após um processo de stemming, que corta as extremidades das palavras. Tanto stemming quanto lemmatization são duas técnicas de normalização de palavras, porém a primeira reduz em stem (parte de uma palavra) e a segunda reduz em lemmas (forma básica da palavra). Por exemplo, a palavra produced ao aplicar o stemming, se transformamaria em produc, e ao aplicar lemmatization, viraria produce. Dentro da categoria de algoritmos de stemming, existem diversos tipos, especialmente para a língua inglesa. O algoritmo de Lovins foi pioneiro e influenciou diversos outros. Foi descrito por Julie Beth em um artigo publicado em 1968 e é composto por 294 sufixos, 29 condições e 34 regras de transformação. Tem rápido processamento, pois é feito em apenas duas etapas. Nesse algoritmo primeiro procura-se o maior sufixo na palavra e que satisfaz a condição, nessa etapa uma parte da palavra pode ser removida. Então são aplicadas regras para transformar o final, as quais são aplicadas se um sufixo é removido ou não na primeira etapa. Durante a aula, treinamos o algoritmo através de seis exercícios práticos. Alguns anos após o algoritmo de Lovins surgir veio o algoritmo de Porter. Ambos eliminam/removem consecutivamente os finais das palavras, porém o de Porter é mais completo e “simples” e é o mais utilizado atualmente. O algoritmo de Porter consiste em 5 passos bem definidos, onde existem regras e operações de validações. Para o português, um algoritmo bem conhecido é o Orengo, publicado em 2001, que foi a primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa. Nele existem 199 regras distribuídas por 8 passos e há uma lista de exceções. No contexto de stemmers, existe algo chamado Snowball, que é uma linguagem de processamento de pequenas cadeias projetada para criar algoritmos stemming de forma a usa-los na recuperação de informação. No site da linguagem é possível ver os algoritmos implementados na linguagem para diversas línguas, inclusive há duas implementações do algoritmo de Porter. É possível, após passar o algoritmo de stemmer, usar uma base de dados (dicionário) para comparar as palavras reduzidas, porém isso requer maior tempo de processamento e o esforço poderia não valer a pena. Uma preocupação em relação aos algoritmos de stemmer é que eles não devem permitir a perda de muita informação. Existem algumas medidas de desempenho para checar isso são elas: overstemming que é quando é removido não só o sufixo mas uma parte do radical, e o understemming que é quando o sufixo não é removido ou é só removido parcialmente. Um outro tópico coberto em aula foram os grafos de palavras, onde as palavras são os vértices e duas palavras se conectam se ambas são adjacentes em uma frase. Também é possível criar redes de co-ocorrência que são geralmente usadas para fornecer uma visualização gráfica de potencias relações entre pessoas, organizações, entre outros.
Fabio Figueiredo Rodrigues A quarta aula de processamento de linguagem natural foi abordado o tema normalização de texto focado para stemming. A aula ainda teve como base o capítulo 2 do livro Speech and Language Processing, Dan Jurafsky e James H. Martin. Atualmente quando pesquisamos algo no Google, por exemplo, independente se a pesquisa está no plural, aparecem resultados no singular também, e vice-versa. Ou seja, os sistemas de busca independente das formas de escrita devem recuperar todos os documentos indexados com nomes diferentes referindo-se ao mesmo significado. Na língua portuguesa temos inúmeras variações das palavras utilizadas, e a normalização das palavras pode ser uma ferramenta muito importante para as máquinas no entendimento dos textos. Na quarta aula o foco foi o processo de stemming que consiste em reduzir a palavra à sua raiz cortando as suas extremidades. Quando comparamos duas técnicas muito utilizadas, o “stem” pega parte de uma palavra enquanto o “lema” pega a forma básica da palavra, consistindo em um algoritmo mais caro. Julie Beth Lovins, em 1968, criou o algoritmo pioneiro influenciador de muitos stemmers, conhecido como algoritmo de Lovins, composto por 294 sufixos, 29 condições e 34 regras de transformação, onde o processamento é feito em apenas duas etapas. A primeira etapa consiste em procurar pelo sufixo de maior tamanho da palavra e removê-lo, sempre respeitando as condições atreladas, e ao final, aplica-se a segunda regra, que é utilizada para transformar o final da palavra restante da primeira etapa. Martin F. Porter diferentemente de Lovins, criou um algoritmo em 1980 com o mesmo propósito, que foi construído com 5 passos bem definidos, onde utiliza- se regras e operação de validação, porém, constitui em um algoritmo mais completo e mais simples, sendo o mais utilizado atualmente. Os dois algoritmos citados acima foram construídos para trabalhar com o inglês, já para o português, a primeira versão amplamente divulgada de radicalização para a língua portuguesa foi o Orengo em 2001, criado por Viviane Moreira Orengo e Christian Huyck, que é constituído por 199 regras distribuídas por 8 passos e considera uma lista de excepções. Para os algoritmos de stemming, eles não devem permitir a perda de informações. Overstemming é utilizado quando é removido não só o sufixo, mas também uma parte do radical, e understemming é quando o sufixo não é removido, ou é apenas removido parcialmente. Como exemplo, foi apresentado o algoritmo fool-stemmer, que basicamente deixa apenas os 3 caracteres iniciais de cada palavra, consistindo em um algoritmo que pode ser classificado com “overstemming”, pois em muitos casos uma parte do radical da palavra é removido. Foi apresentado também as redes (grafos) de palavras, que é um digrafo com arestas direcionadas entre as palavras sequentes de um texto, e através disso, pode-se identificar relações potenciais entre elementos, além de estudar a organização das palavras. Por fim, snowball é uma linguagem de programação de processamento de sequências projetada para criar algoritmos de stemming para uso na recuperação de informações.
Giselle Silva de Santana O tema desta quarta aula, do dia 13/06, foi “Normalização de texto: Stemming”, tema presente no segundo capítulo do livro texto utilizado na disciplina. A normalização de palavras tem muitas aplicações, como por exemplo, para um sistema de busca, que deve permitir que documentos possam ser recuperados usando qualquer de suas formas de escrita mesmo indexados com nomes diferentes. A normalização de palavras pode ser definida como redução ou simplificação ou radicalização de palavras, tendo como técnicas mais importantes, Stemming e Lemmatization. O processo de Stemming reduz a palavra à sua raiz, geralmente cortando suas extremidades removendo afixos derivacionais. Stemming pode ser representado por um conjunto de regras que dependem da linguagem. Existem diferentes algoritmos de Stemming, principalmente para a língua inglesa. O algoritmo de Lovins, desenvolvido por Julie Beth em 1968, foi pioneiro e influenciador de muitos stemmers. Possui duas etapas, contendo 294 sufixos, 29 condições e 34 regras de transformação. Na primeira etapa deve-se procurar pelo sufixo de maior tamanho na palavra e que satisfaça as condições. Após seguir as condições, deve-se aplicar as regras para transformar o final, aplicadas se um sufixo é removido ou não na primeira etapa. Após a apresentação do algoritmo de Lovins, foi realizada uma atividade em que se deveria aplicar as etapas do algoritmo em seis diferentes palavras, para que houvesse a fixação dos conceitos. Após os 15 minutos de atividade, foi também apresentado o algoritmo de Porter, que assim como o de Lovins, elimina/remove consecutivamente os finais das palavras, sem que seja necessário conhecimento à priori para sua redução. Porém, o algoritmo de Porter é o stemmer mais utilizado atualmente, por ser mais simples e completo do que o de Lovins. Porter também é responsável pela criação do Snowball, que é uma linguagem em que algoritmos de stemming podem ser facilmente representados, pois o compilador Snowball traduz um script próprio para um programa em Java, C, dentre outras linguagens. Uma das motivações para sua criação é para contribuir com a criação e disponibilização de algoritmos de stemming para outros idiomas além do inglês. Além disso, seu desenvolvedor se sentia culpado por propor implementações especificas de seu algoritmo de stemming sem fornecer um meio efetivo de aplica-las. Para a língua portuguesa, foi proposto um algoritmo, algoritmo de Orengo, que foi a primeira versão amplamente divulgada para a radicalização para a língua portuguesa, sendo este é constituído por 199 regras distribuídas por 8 passos e possui uma lista de exceções. Os algoritmos de stemming não deveriam permitir a perda de muita informação e para isso existem medidas de desempenho, como o Overstemming que é quando uma parte do radical é removida juntamente com o sufixo e o Understemming, que é quando o sufixo não é removido ou é removido parcialmente. Após apresentação teórica, houve a demonstração de alguns scripts em Python para demonstração prática, além de se apresentar a aplicação de stemming em grafos de palavras.
Lucas Ferraz Nicolau Iniciou-se a aula recuperando o tema de normalização de palavras abordado anteriormente, essencial por exemplo para sistemas de busca, como o do Google, que devem identificar diferentes palavras independente da forma como foi escrita. A normalização de uma palavra se trata de sua redução, ou simplificação, para um radical que não dependa de flexões de gênero, número, grau ou conjugação verbal. Foram apresentadas as duas técnicas mais importantes para normalização: lemmatization e stemming, onde esta última foi o tema principal da aula. O processo de stemming consiste na redução de uma palavra em um stem, isto é, em um radical que, mesmo não sendo formalmente uma palavra, carrega o significado da palavra original. O processo se refere normalmente a uma heurística que remove as extremidades das palavras e pode ser representado como um conjunto de regras aplicadas em determinada sequência e dependentes da linguagem. O algoritmo de Lovins foi pioneiro em sua função e influenciador de muitos stemmers. Criado por Julie Beth Lovins em 1968, o algoritmo é um stemmer para o idioma inglês e é composto por 294 sufixos, 29 condições e 34 regras de transformação sendo de rápido de processamento por possuir apenas duas etapas. Na primeira etapa, procura-se pelo sufixo de maior tamanho na palavra que satisfaça suas condições relacionadas, removendo-o em caso positivo. Na segunda e última etapa, são aplicadas as devidas transformações para modificar o final da palavra. Em 1980, Martin F. Porter desenvolveu um algoritmo de stemming que, de modo semelhante ao de Lovins, se baseava na remoção consecutiva do final de palavras sem conhecimento a priori de cada uma. O algoritmo de Porter é considerado mais completo e mais “simples” que seu antecessor, sendo o stemmer o mais utilizado atualmente. Se estrutura de modo semelhante ao de Lovins, entretanto, é dividido em 5 passos bem definidos de regras e operações de validação. A primeira versão amplamente divulgada de uma algoritmo de radicalização para a língua portuguesa foi o algoritmo de Orengo proposto Viviane Moreira Orengo e Christian Huyck em 2001. O algoritmo possui 199 regras distribuídas por 8 passos e considera uma lista de exceções. Algumas questões não aprofundadas em aula sobre stemmers mas que requerem atenção são: uso de dicionários para comparação, eliminação de prefixos, stemming na literatura, medidas de desempenho (overstemming e understemming) e stemming para nomes. Como atividade prática, analisamos a implementação em python com o pacote de linguagem natural NLTK de um stemmer “fool” que mantinha apenas as primeiras 3 letras de todas as palavras, e do algoritmo de Porter. Estudamos também a criação de uma rede, ou grafo, de palavras através de stemming, utilizada para estudo de co-ocorrência de palavras. Por fim, Snowball é um framework utilizado para desenvolvimento de stemmers criado por Martin Porter. Este o criou ao observar a ocorrência frequente de falhas nos diversos stemmers criados na época, tentando com o Snowball, melhorar e facilitar a criação das ferramentas.
Yago Sorrilha A aula de 13/06 foi sobre normalização de texto, mais precisamente sobre Stemming, que consiste em radicalizar as palavras. Por exemplo: Computationally Computational Computation Computa Comput Stemm não é a raiz da palavra (da forma linguístima), esse é o lemma A palavra pode não ter significado (radical da palavra) Stemming (a ação de reduzir em stems) \- Stem: parte de uma palavra \- Stemmer: o artefato (programa) \- Algorithm for stemming Lemmatization (a ação de reduzir em Lemmas) \- Lemma: forma básica da palavra \- Lemmatizer: o artefato (programa) \- Algorithm for lemmatization Algoritmos de Stemming \- Lovins Stemmer (1968) O algoritmo pioneiro e influenciador de muitos stemmers Composto por 294 sufixos, 29 condições e 34 regras de transformações O processamento é rápido: 2 etapas (1) Procurar pelo sufixo de maior tamanho na palavra que satisfaz as condições e remover (2) As regras são aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa \- Porter Stemmer (1980) É mais completo e mais "simples" do que Lovins É o stemmer mais utilizado atualmente Todos os 5 passos foram bem definidos: Usa-se regras e operação de validação Similar ao de Lovins: cada palavra é comparada sequencialmente com o maior sufixo possível. Casou o sufixo então o remove da palavra Os dois algoritmos eliminam/removem consecutivamente os finais das palavras Para cada palavra não é necessário conhecimento à priori para a sua redução Algortimos de Steeming para português 2001: Orengo Primeira versão amplamente divulgada de um algoritmo de radicalização para a língua portuguesa: \- Constituído por 199 regras distribuídas por 8 passos Algumas considerações não discutidas sobre os stemmers: 1) Uso de uma base de dados? Poderia ser utilizada uma base de dados (dicionário) para comparar as palavras reduzidas Entretanto, esse procedimento requerirá maior tempo de processamento computacional Mesmo consumindo maior tempo, o esforço investido poderia não valer a pena. 2) Porque não eliminar prefixos? Não há nenhum motivo teórico para não considerar a eliminação de prefixos nos stemmers 3) stemming na literatura Stemming aparece mais vezes na literatura do que snowball, segundo o Google Books Ngram Viewer 4) Perda de detalhe ou informação? O algoritmo de stemming não deveria permitir a perda de muita informação: Exemplo: Poder -> Po Medidas de Desempenho Overstemming: quando é removido não só o sufixo como também uma parte do radical Understemming: quando o sufixo não é removido, ou é apenas removido parcialmente 5) Stemmer para nomes? Exemplos: Pedrão para Pedro Guilherme para Gui No contexto de Stemming, Snowball é um framework para construção de algoritmos de stemming em aplicações de Recuperação de Informação. Grafos de co-ocorrencia de palavras: São grafos construídos a partir de um texto, que demonstra as relações de palavras conectadas, de forma a identificar visualmente essas relações Permitem identificar, de forma visual, relações potenciais entre elementos (palavras) Podemos considerar propriedades topológicas nos grafos para descoberta de conhecimento a partir de textos Podemos estudar a organização de palavras
Felipe Rigo Yoshimura A aula teve como tema a normalização de texto via stemming. Um sistema de busca deve permitir que documentos indexados com diferentes nomes sejam recuperados usando quaisquer das suas formas de escrita. Nos textos da língua portuguesa contém diversas palavras flexiondadas em gênero, número e grau além de vários tempos verbais distintos. Portanto, a normalização de palavras se baseia em uma simplificação, redução ou radicalização das mesmas. Duas técnicas importantes são o stemming e o lemmatization. O stemming é o processo de reduzir a palavra em sua raiz, sem levar em conta a classe gramatical. Geralmente ele utiliza uma heurística que corta as extremidades das palavras, variando conforme a linguagem escolhida. O lemmatization é o processo de redução das palavras para sua forma básica ou lemma, nesse processo é necessário a utilização de um dicionário. Existem diferentes algoritmos de stemming, principalmente para o inglês, os mais conhecidos são o algoritmo de Lovins e o de Porter. O algoritmo de Lovins foi o influenciador de diversos outros algoritmos, Julie Beth Lovins em 1968 apresentou esse algoritmo com 294 sufixos, 29 condições e 34 regras de transformação. Esse algoritmo é rápido, sendo aplicado em apenas duas etapas. A primeira etapa consiste em procurar pelo sufixo de maior tamanho na palavra que satifaz as condições e removê-lo. A segunda etapa consiste na aplicação das 34 regras no resultado da aplicação da primeira regra. Já o algoritomo de Porter foi proposto por Martin Porter em 1980 em um projeto de recuperação de informação, esse algoritmo é mais completo e mais simples do que o de Lovins, sendo o stemmer mais utilizado atualmente. Contendo cinco passos bem definidos, o algoritmo de Porter utiliza regras e operações de validação, comparando cada palavra com maior sufixo possível para executar sua remoção. Um stemming para a língua portuguesa foi proposto por Orengo em 2001, ele contém 199 regras distribuídas em 8 passos e possui uma lista de excessões. Pode-se utilizar um dicionário para comparar as palavras reduzidas do stemming, porém esse processo utilizará mais tempo de processamento computational e pode não valer a pena. Um outro ponto interessante é o fato dos stemming não considerarem a eliminação dos prefixos. Stemmings na literatura não são um tópico muito abordado, porém eles possuem muitos pontos para serem trabalhados. As métricas de desempenho para o stemming são overstemming e understemming, a primeira remove uma parte do radical junto com o sufixo e a segunda não remove o radical ou apenas parcialmente. Snowball é um framework para escrita de algoritmos de stemming, criado por Martin Porter, para evitar implementações errôneas de seu próprio algoritmo. Um texto pode ser representado por um digraph, onde os nós são radicais e as arestas quantidades de ocorrências de palavras adjacentes, chamadas de redes de co-ocorrencia, pode-se identificar relações potenciais entre elementos, propriedades topológicas para descoberta de conhecimento através de textos e estudar a organização das palavras.
Guilherme Beo Arqueiro A normalização de palavras consiste em uma redução, simplificação ou radicalização de palavras, que possui duas técnicas relacionadas, o Stemming e o Lemmatization. O stemming é uma técnica utilizada para reduzir uma palavra à sua raíz, ignorando a sua classe gramatical. Por exemplo: amigo, amiga e amigão são derivações da raíz “amig”. Esse processo se refere a um processo heurístico que corta as partes extremas da palavra, que em geral são afixos derivacionais. Além disso, esse processo pode ser representado por um conjunto predeterminado de regras que pode ser utilizado para cortar as palavras, sendo que cada linguagem pode ter um conjunto diferente de regras. O termo stemming vem da ação de reduzir a palavra em stems, sendo que Stem é a parte de uma palavra e o Stemmer é o programa que realiza essa função redução. Existem diferentes algoritmos que podem ser utilizados para a criação de um stemmer, como o de Lovins e de Porter. O algoritmo de Lovins foi desenvolvido por Julie Lovins, e é composto por 294 sufixos, 29 condições e 34 regras de transformação, sendo um processo de apenas duas etapas: 1 - Procurar pelo sufixo de maior tamanho na palavra que satisfaz as condições e remover o trecho da palavra; 2 - As regras de transformação são aplicadas para alterar o final da palavra, sendo aplicadas caso um sufixo tenha ou não sido removido na primeira etapa. Já o algoritmo de Porter foi desenvolvido por Martin Porter, e atualmente é o stemmer mais utilizado. Existem 5 passos bem definidos que utilizam regras e operações de validação, onde cada palavra é comparada sequencialmente com o maior sufixo possível e removendo-o, caso esteja em um dos sufixos da lista. Existe ainda um algoritmo de Stemming para português, desenvolvido por Viviane Orengo, que é constituído por 199 regras e 8 passos. Para alguns casos de stemming, poderia ser utilizado um dicionário para comparação das palavras reduzidas, porém esse procedimento levaria maior tempo de processamento computacional. Os sufixos das palavras são eliminados, pois caso os prefixos fossem os trechos cortados, as palavras podem perder o contexto. Podemos também medir o desempenho de algoritmos, com medidas como Overstemming (quando não é removido somente o sufixo, mas também parte do radical) e Understemming (quando o sufixo é removido apenas parcialmente). Vimos em aula também os grafos de co-ocorrência de palavras, que são redes das palavras relacionadas. Esse tipo de grafo permite a identificação de forma visual das relações entre os elementos estudados. No contexto de algoritmos de stemming, o termo Snowball é utilizado para dar nome a uma linguagem de processamento de strings, que foi projetada especificamente para algoritmos de stemming utilizados para recuperação de informação. O compilador de Snowball transcreve um script em snowball para outra linguagem (ISO C, Go, Java, Javascript, Python, Rust, C e Object Pascal). Dessa forma, o Snowball é um framework utilizado para escrita de algoritmos de stemming.
Ricardo Gomes Nesta aula foi dada continuidade sobre a normalização de texto, analisando o processo de Stemming mais a fundo, observando suas variações. O Stemming realiza um processo de corte numa palavra, reduzindo-a à sua raiz utilizando heurísticas baseadas na linguagem a ser analisada. Esta parte de uma palavra é chamada de Stem e é determinada por um Stemmer, um programa que realiza tal processo. Enquanto isso o processo de Lemmatização consiste em reduzir uma palavra em um Lemma, ou seja, uma forma básica da mesma. Tal processo também necessita de um algoritmo, o Lemmatizer. No Steeming, existem duas variações importantes de algoritmos, utilizadas na língua inglesa. O primeiro é o algoritmo de Lovins, criado em 1968 por Julie Beth Lovins, uma linguista computacional. O algoritmo é composto por 294 sufixos, 29 condições e 34 regras de transformação, caso necessário. O processo é realizado em duas etapas, inicialmente o algoritmo identifica o sufixo de maior tamanho presente na palavra e o remove obedecendo a condição imposta por tal sufixo e em seguida são aplicadas as regras de transformação no Stem. Foi realizada uma atividade prática em aula com o objetivo de aplicar e analisar o algoritmo de Lovins. A segunda variação é o algoritmo de Porter, criado em 1980 por Martin Porter, se trata de um algoritmo mais completo e simples do que o de Lovins e é o mais utilizado atualmente. Tal algoritmo é similar ao de Lovins ao comparar com o maior sufixo possível e consiste em 5 etapas, onde a primeira trata palavras que estejam no plural, as três seguintes substituem ou removem certos sufixos e a última realiza uma função de validação. Existem também algoritmos de Stemming adaptados a outros idiomas, como é o caso do algoritmo desenvolvido por Viviane Moreria Orengo feito especificamente para a língua portuguesa, e muitos outros criados ou adaptados ao idioma desejado. Sobre algumas considerações, o Stemming poderia ser utilizado com uma base de dados para comparação em vez de regras, porém o procedimento requer muito processamento e pode ser inviável, ele também pode remover prefixos de certas palavras. Um problema desse processo é a possível remoção errônea de sufixos, como nos casos de Overstemming, quando o algoritmo remove parte do radical da palavra, e de Understemming, quando não é removido todo o sufixo. No contexto de algoritmos de Stemming, existe a Snowball, uma linguagem de processamento de palavra desenvolvida para realizar a criação de tais algoritmos. Uma aplicação possível para encontrar relações entre palavras é o uso de um grafo. A utilização de grafos, em especial os direcionais, pode ser utilizada para analisar a ligação entre diversas palavras em um texto. Através de técnicas específicas da teoria de grafos, podem ser encontradas relações difíceis de se observar entre certas palavras, além de ser possível a identificação de agrupamentos e organização das palavras.
Paula Keiko Miyashita O tem abordado na aula 4 foi Stemming. Relembrando, stemming é um tipo de normalização que reduz as palavras em stems, por meio de poda, enquanto lemmatization reduz as palavras para lemas, formas de dicionário. O primeiro algoritmo estudado foi o algoritmo de Lovins, foi pioneiro e influenciador de muitos stemmers, desenvolvido por Julie Beth Lovins em 1968. O algoritmo é composto por 294 sufixos, 29 condições e 34 regras de transformação, além disso seu processamento é rápido pois é composto somente de 2 etapas. Para aplicar o algoritmo, baste primeiro procurar o sufixo de maior tamanho na palavra analisada (que satisfaça as condições impostas) e removê-lo, em seguida aplicam-se as regras para transformar o final da palavra (tendo sido previamente podada ou não). O algoritmo foi criado para palavras em inglês. Após a explicação do algoritmo, foram passados alguns exercícios e corrigidos em sala. O algoritmo seguinte foi o Algoritmo de Porter, criado por Martin F. Porter em 1980. É o stemmer mais utilizado atualmente, mais simples e mais completo que o algoritmo de Lovins. O algoritmo, assim como o de Lovins, compara a palavra e os sufixos para encontrar o maior sufixo possível, se encontrar verifica algumas regras para remover o sufixo (como tamanho mínimo e presença obrigatória de vogal). Foram vistas algumas partes do script do algoritmo de Porter e então o algoritmo de Stemming para a língua portuguesa. Sua primeira versão foi desenvolvida por Viviane Moreira Orengo em 2001, era constituída por 199 regras distribuídas por 8 passos, considerando uma lista de exceções. Foram apresentados alguns exemplos da aplicação deste algoritmo e outros algoritmos de Stemming em diferentes línguas. Algumas considerações foram feitas, a primeira era sobre a utilização de uma base de dados (dicionário) para comparar palavras reduzidas, no entanto o tempo de processamento seria muito maior e a melhoria do resultado poderia não crescer tanto quanto o custo. A segunda consideração foi sobre a eliminação de prefixos nos stemmers, que é válida mas não foi mostrada em aula. A terceira foi sobre o aumento da presença de stemming e snowball na literatura, Snowball é uma linguagem de programação desenvolvida por Porter para a criação de algoritmos de stemming. A quarta consideração foi sobre a perda de informação nos algoritmos de stemming, algo que não deveria acontecer mas acaba ocorrendo, assim pode-se medir o desempenho de um algoritmo de stemming por overstemming (quanto é removido a mais do sufixo) e understemming (quanto é removido a menos do sufixo). A última consideração foi de um stemming para nomes, que poderia ser desenvolvido como projeto final. Para finalizar a aula, foram mostrados grafos de palavras, onde os vértices são as palavras e as arestas são as ligações que indicam qual palavra sucede a outra, os pesos representam a quantidade de vezes que a sucessão acontece.
Marcelo de Souza Pena Na aula 4 continuamos no assunto normalização de texto vendo mais sobre Stemming. Buscadores devem permitir que documentos indexados com mais de um nome possível sejam encontrados por qualquer um desses nomes. A normalização pode ser entendida como redução, simplificação ou radicalização da palavra. Vimos que existem duas técnicas importantes: Stemming e Lemmatization. O Stemmer depende da heurística, um conjunto de regras, para cortar sufixos das palavras restando parte dela, mas pode ser O(1). O Lemmatizer, como usa dicionário, pode ser muito caro. Lovins e Porter são os principais algoritmos stemmers. Lovins usa sufixos (como “tional”), condições (o que fazer, se tira tudo, tira apenas o ‘s’, etc) e regras (o que adicionar quando necessário). No teste aplicamos o algoritmo de Lovins em seis palavras em inglês. Errei os dois primeiros, o primeiro por ter removido usando o sufixo "ally", ao invés de "ationally", o segundo por não ter compreendido bem a condição. Os matric acertei após ajuda do professor e os dois últimos foram fáceis. Não fazia ideia do que era um grafo de co-ocorrencia. Vimos algoritmo de Porter, que é mais completo e mais simples. Regras de transformação para plurais e outros casos, basicamente apenas ifs de cada caso, então faz tal coisa. Orengo é o algoritmo de Stemming em português, considerando acentos e outras regras gramaticais. Também existem algoritmos em outros idiomas. Vimos um site para processamento de texto usando stem. Algumas reduções podem deixar o texto incompreensível. Variações podem usar dicionários ou podem remover prefixos. Esse tipo de algoritmo não deveria permitir a perda de muita informação. Overstemming remove parte do radical além do sufixo, understemming é quando o sufixo não é removido como deveria, o ideal é um meio termo. Pode ser feito um stemmer para nomes. Na parte prática vimos um algoritmo que reduz toa palavra a até três letras, o que pode fazer com que palavras totalmente diferentes sejam reduzidas a um mesmo radical. Porter é mais utilizados que Lovins atualmente. Grafos de co-ocorrencia são grafos de palavras. As arestas direcionadas indicam quais as palavras ligadas a cada palavra, o peso da aresta é o número de vezes que aquela palavra é seguida. Ex: “palavra” é seguida de “chave”. Se em 10 ocorrências de “palavra” ela vem seguida de “chave”, então o peso da aresta entre os nós “palavra” e “chave” é 10. Geralmente usa-se arestas com peso maior que um na construção do grafo (usando o Graphviz). Esses grafos dígrafos podem ser úteis para identificar relações potenciais entre palavras, descoberta de conhecimento a partir de textos e estudar a organização das palavras. O Snowball é uma linguagem de processamento de pequenas strings projetada para criar stemmers para recuperação de informações. O compilador Snowball permite a tradução de scripts Snowball para diversas linguagens de programação.
Guilherme Oliveira da Silva Resumo Aula 4 Guilherme Oliveira, 11093713 Iniciou-se a aula relembrando alguns pontos de normalização, se focando um pouco em palavras português, mostrando seus casos gramaticais e como pode ser obtido a sua raiz retirando esses casos gramaticais, tomando isso como gancho entrou-se na explicação breve do que é stemming que é justamente a obtenção da raiz da palavra, ou seja retira-se qualquer gramática da palavra até mesmo a sua forma nominal e a deixa apenas na raiz. Falou-se brevemente também das diferenças básicas entre a stemming e a lemmatization demonstrando as suas definições. A aula se focou nos algoritmos de stemming e como eles se comportavam tanto da forma genérica, ou seja, para palavras e textos em inglês, assim também como se comportavam em português, iniciou-se com o algoritmo de Lovins que se baseava em duas regras, a primeira que era procurar pelo sufixo e depois se basear num conjunto de regras pré-definidos, o código não era muito complicado apesar de extenso pelas inúmeras regras definidas pelo algoritmo, após apresentado um pouco do algoritmos e de suas duas regras foi feita uma atividade que envolvia as duas regras do algoritmo de lovins, a atividade consistia na radicalização das palavras fornecidas pelos alunos se utilizando das regras de lovins, ao fim foi dado as respostas e debatido elas, e posteriormente inniciou-se a apresentação do próximo algoritmo fazendo um pequena comparação entre o algoritmo de lovins e o de porter, dois algoritmos voltados para o inglês. Após uma breve descrição da pessoa de porter e de como ela chegou a esse algoritmo entramos na explicação desse, que se baseava em 5 passos. Foi-se apresentado o algoritmo de porter e alguns exemplos do mesmo, não se demorou muito nesse algoritmo pois ele era bastante parecido com o de lovins com algumas regras adicionais, na verdade com alguns passos adicionais. Depois de apresentado o algoritmo de porter entramos no algoritmo de Orengo, voltado para o português, o primeiro algoritmo de stemming voltado para o português, constituído por 199 regras dívida em 8 passos, foi-se apresentado um diagrama e comentado esses passos brevemente. Após isso apresentou-se algumas outras propostas de algoritmos de stemming, é importante salientar que a aula toda foi a respeito de algoritmos de stemming e apresentado alguns desses algoritmos, os mais famosos. E por fim dessa parte apresentou-se brevemente também o python NLTK para algoritmos de stemming, lembrado que o NLTK tem as duas versões. Stemming e lemmatization. Depois da apresentação e explicação de alguns algoritmos de stemming, foi-se feito algumas comparações entre textos que foram aplicados esses algoritmos, comparando as palavras em sua raiz e sem raiz, finalizando o tema com alguns pontos não discutido e uma apresentação pratica do algoritmo de porter.
Felipe de Campos Mesquita Na última aula falamos um pouco sobre normalização de palavras e foi dada uma breve introdução a respeito de Stemming e Lemmatization. Na aula 4 deste resumo aprofundamos os conceitos. A bibliografia da aula continua sendo o livro de Daniel Jurafsky e James H. Martin, Speech and language processing: An introduction to natural language processing, computational linguistics, and speech recognition. Na língua portuguesa as palavras possuem diversas formas flexionadas em gênero, número ou grau, além de diversos tempos verbais que produzem variações de uma mesma palavra. A normalização de palavras pode ser entendida como a redução, simplificação ou radicalização de palavras, como dito nos slides da aula. As duas técnicas mais importante e que foram abordadas na aula foram Stemming e Lemmatization. Stemming é o processo de chegar a raiz da palavra, a parte da palavra mínima que traz sentido a sua definição, geralmente refere-se a um processo de heurística (pode ser representado por um conjunto de regras que dependem da linguagem) que corta as extremidades das palavras e frequentemente remove afixos derivacionais. No stemming podemos por exemplo ter a palavra amigo, com suas variações, amiga, amigão reduzida a amig ou então gato, gata, gatos, gatos reduzido a gat. Já o processo de lemmatization consiste em reduzir a palavra em sua forma básica, inflexionada, como a encontramos no dicionário, ainda com sentido na linguagem, por exemplo, a palavra produced em inglês terá o stemming produzindo produc e o processo de lemmatization produzindo a palavra produce que ainda tem sentido na linguagem e pode ser encontrada no dicionário. Existem diversos algoritmos de stemming em inglês, e o primeiro e um dos mais famosos é o de Julie Beth Lovins, Development of a stemming algorithm de 1968, com um stemming que compõe 294 sufixos, 29 condições e 34 regras de transformação em um processo de duas etapas. O teste aplicado em sala de aula diz respeito a este artigo, e a primeira etapa do processo de stemming é a remoção do maior sufixo da palavra e então aplicar uma das 29 regras condicionais associadas a remoção do sufixo, e para a segunda etapa são aplicadas algumas regras para transformação final mesmo que o sufixo não tenha sido removido na primeira etapa. Ainda vimos na aula um outro artigo de Martin F. Porter a respeito do assunto (An algorithm for suffix stripping) também muito famoso na área. Esse último é considerado mais simples e é o mais utilizado ultimamente. Para o português vimos um artigo de 2001 de Viviane Moreira e Christian Huyck (A stemming algorithm for the portuguese language) constituído por 199 regras e 8 passos, é possível ver o fluxograma nos slides da aula. Na aula também vimos alguns código em python para stemming e representações em grafos (rede de grafos de palavras).
Tamiris Gabriele da Silva Lira A quarta aula de Processamento de Linguagem Natural continuou trabalhando os conceitos do segundo capítulo do livro de Jurafsky e Martin, Speech and language processing: An introduction to natural language processing, computational linguistics, and speech recognition. Assim, o professor iniciou a aula retomando o conceito chave do encontro anterior: normalização de palavras, que é, em síntese, a simplificação de palavras. Para esse processo, foram destacados dois conceitos: Lemmatisation e Stemming. O segundo foi estudado mais a fundo nessa aula e consiste em reduzir as palavras ao seu radical para completar a normalização. O processo de stemming geralmente utiliza um conjunto de regras para fazer a normalização das palavras, onde tal conjunto de regras depende do idioma ao qual a palavra pertence. Existem diversos algoritmos para o processo de stemming, e dois deles foram explorados em detalhes nessa quarta aula de PLN: O algoritmo de Lovins e o algoritmo de Porter. O algoritmo de Lovins foi criado por Julie Beth Lovins e foi pioneiro entre os algoritmos de stemming. Ele é composto por apenas duas etapas: após receber a palavra, procura pelo maior sufixo na palavra entre uma lista de sufixos. Satisfazendo as condições necessárias, esse sufixo é removido e são aplicadas regras que transformam o final da palavra. Após a explicação do funcionamento do algoritmo, um teste no qual deveríamos aplicar o algoritmo de Lovins em uma lista de palavras foi empregado. O algoritmo de Porter, por sua vez, foi desenvolvido pelo bibliotecário Martin Porter e é mais completo que o algoritmo de Lovins. Possui 5 passos para a realização do processo de stemming, sendo que o último deles é uma verificação: o radical da palavra deve possuir uma vogal. Os últimos dois algoritmos são específicos para a língua inglesa. Para a língua portuguesa, a pesquisadora Viviane Orengo criou um algoritmo de 8 passos que realiza o processo de stemming. Algumas últimas considerações sobre os algoritmos de stemming foram feitas: o uso de uma base de dados para auxiliar a normalização das palavras poderia aumentar muito o tempo de processamento computacional, devemos considerar a possibilidade de não só eliminar os sufixos, mas também os prefixos das palavras e não se deve perder muita informação com o processo de stemming - assim, devemos minimizar overstemming e understemming. Para a parte prática, inicialmente foi apresentado um algoritmo fool-stemmer, que deixava apenas os três primeiros caracteres de cada palavra, e o algoritmo de Porter implementado em Python. Também foi discutido o Snowball, que é um framework criado por Porter para facilitar o desenvolvimento de algoritmos de stemming e diminuir o número de erros. Por fim, foi apresentada uma aplicação que consistia em uma rede de palavras e o conceito de grafos de co-ocorrência foi introduzido como forma de verificar relações entre palavras em um texto.
Diego Pereira de Lima A aula do dia 13/06 da disciplina de Processamento de Linguagem Natural, abordou em sua centralidade conceitos sobre a normalização de palavras. As palavras em diferentes contextos estão flexionadas em gênero, numero e grau dependendo de sua necessidade, porem para a redução e simplificação de processamento é necessário remover tais diferenças, sendo que de fato no momento do processamento abordam o mesmo conceito analisando apenas o seu radical. Desta forma, são utilizadas técnicas de Stemming ou Lemmatization como forma de extrair apenas uma forma única de cada palavra ou conjunto de variantes simplificando o processamento e tornando-o mais assertivo. O processo de stemming pode ser resumido em reduzir a palavra em sua forma raiz, sem levar em conta a classe gramatical, apenas retirando as extremidades e extraindo apenas o radical. Desta forma, o algoritmo tenta retirar os afixos derivacionais. O primeiro algoritmo de stemming foi desenvolvido por Julie Lovins, o qual era composto por 294 sufixos 29 condições e 34 regras de transformação. Tempos depois por Martin Porter, foi desenvolvido um algoritmo mas “simples” e completo o qual é amplamente utilizado atualmente. Também desenvolvido por Porter, como a maioria dos algoritmos de Stemming atuais, o Snowball é uma linguagem de processamento de strings com objetivo de recuperar informações e projetada para criar algoritmos de stemming. Anteriormente a criação do Snowball era comum a queixa da falta de algoritmos de stemming para linguagem diferente do inglês, alguns erros na codificação do algoritmo de Porter (o mais utilizado), a interpretabilidade do código além da falta de melhorias e desenvolvimento de implementações a este. Assim, com a implementação do Snowball ficou mais fácil com o desenvolvimento de novos algoritmos. Em resumo, o algoritmo de Porter funciona em 5 passos bem definidos, utilizando regras estabelecidas e operações de validação, o algoritmo se comporta como o de Lovins onde cada palavra é comparada sequencialmente com o maior sufixo e encontrado este é removido. Para o português a Dr. Viviane Orengo também desenvolveu um algoritmo que é constituído por 188 regras encadeadas a 8 passos de processamento. Neste processamento também é tomado cuidado para que não haja perda de informação sendo removido parte do sufixo(Understemming) ou parte do radical(Overstemming). Também ao decorrer da aula foi abordado primeiro conceito de vetorização de palavras utilizando grafos. Pela vetorização e ocorrências de conexão das palavras em frases é possível conectá-las como vértices (palavras) e suas ocorrências em pesos das arestas formando um grafo direcionado. Portando, ao visualizar o grafo é possível a relação das palavras e conexão dos conceitos ao longo do texto. Proporcionando efetuar grafos de co-ocorrencia de palavras e permitindo extrair relações potenciais, propriedades topológicas além da descoberta de conhecimento com o relacionamento das palavras e contexto e sua organização.
Willian Teruya Kimura Na aula referente ao dia 13/06, o professor deu continuidade ao conteúdo de normalização das palavras, dando o contexto da língua portuguesa, em que se tem diferentes palavras que estão flexionadas em gênero, número ou grau, levando em consideração também os tempos verbais distintos. Como visto na última aula, foi abordado de maneira mais aprofundada as técnicas de Stemming e Lemmatization, onde: Stemming consiste em um processo para reduzir a palavra até sua raíz, geralmente se referem a um processo de heurística em que corta as extremidades das palavras, baseados em um conjunto de regras que variam dependendo da linguagem. Lemmatization se trata em achar a forma básica da palavra, que difere um pouco do processo de Stemming, que verifica em grande parte das vezes a radical da palavra. Como há inúmeras linguagens, então é importante ressaltar que existem diferentes tipos de algoritmos para se tratar cada um. Um exemplo, no caso para o inglês, é o algoritmo de Lovins, em se compõe 294 sufixos, 29 condições e 34 regras de transformação. Para executar o algoritmo, são necessários dois passos: 1 – Procurar pelo sufixo de maior tamanho na palavra que satisfaça as condições do algoritmo, e em seguida remover; 2 – Utilizar das regras para transformar a raíz final. Para compreender os conceitos teóricos, foi realizado uma atividade para checar o entendimento do algoritmo, utilizando exemplos de palavras para achar a raíz da palavra. Ao finalizar a atividade, foi apresentado outro algoritmo: o algoritmo de Porter, que trabalha com a mesma finalidade que o algoritmo de Lovins (remoção dos sufixos das palavras), porém mais completo e relativamente simples, sendo um dos algoritmos mais utilizados na atualidade. O algoritmo possui 5 passos bem definidos, usando-se de regras e operações de validação. Ele trabalha com o mesmo fundamento que Lovins, ou seja, procura verificar o maior sufixo possível e, quando casa, se remove da palavra. No Brasil, existe um algoritmo chamado Orengo, em que se trabalha com o processo de radicalização para a língua portuguesa, constituído por 199 regras distribuídas por 8 passos, que leva em consideração uma lista de exceções. Em relação aos Stemmers, há alguns pontos que não são discutidos que podem ser essenciais: 1) Se o uso de base de dados poderia ser auxiliador, sendo que fora concluído não ser eficiente por usar muito processamento computacional; 2) Motivo de não eliminar os prefixos de palavras, sendo não há nenhum motivo teórico para considerar a eliminação de prefixos; 3) O stemming na literatura; 4) Perda de Detalhe ou informação 5) Stemmer para nomes. Uma outra alternativa para Stemming é o uso de grafos de palavras, em que se usa dígrafos para conseguir analisar a tendência encontrada nos textos analisados, visualizando a relação de recorrência entre as palavras.
Gabriel Peterlini Pinto Nesta aula, continuamos a estudar sobre a normalização de palavras em expressões regulares, mais especificamente com a aplicação das técnicas de Stemming e Lemmatization. Primeiramente, ao observarmos textos da língua portuguesa, vemos que diferentes palavras são flexionadas em gênero, número ou grau, além de inúmeros tempos verbais distinto, por exemplo: Trabalhador, Trabalhadora e Trabalhadores. O objetivo da normalização de palavras é reduzir, simplificar ou radicalizar palavras como estas utilizando técnicas como Stemming e Lemmatization. A técnica de Stemming consiste em uma heurística que corta as extremidades das palavras reduzindo-as à sua raiz ou parte da palavra original (stem), ela também inclui frequentemente a remoção de afixos derivacionais. Podemos reduzir as palavras amigo, amiga, amigos e outras variações para "amig". Existem vários algoritmos para aplicar o Stemming em um texto (especialmente em Inglês) porém, um dos mais relevantes é o algoritmo de Lovins que foi o pioneiro e influenciou muitos outros stemmers. O algoritmo de Lovins é composto por 294 sufixos, 29 condições e 34 regras de transformação ele possui apenas dois passo básicos: primeiro basta procurar o sufixo de maior tamanho e removê-lo de acordo com a condição associada, por último são utilizadas as regras para transformar o stem final. Outro algoritmo muito importante que é considerado o mais utilizado atualmente é o de Porter. Ele é mais completo e simples do que o de Lovins, possui 5 passos bem definidos e similares ao de Lovins onde cada palavra é comparada sequencialmente com o maior sufixo possível e, se encontrado, é removido da palavra. Apesar de serem algoritmos muito relevantes, são exclusivos da língua inglesa. Para a língua portuguesa, temos o algoritmo de Orengo, que foi a primeira versão amplamente divulgada de um algoritmo de radicalização em portugues. Ele consiste em 199 regras distribuídas por 8 passos e também considera uma lista de exceções. Também abordamos em aula, diversos considerações sobre o uso de Stemmers, como porque não vale a pena usar uma base de dados de dicionário para comparar as palavras reduzidas, já que o maior tempo de processamento seria um esforço desnecessário. Ou o por que não removemos sufixos já que não existe nenhum motivo téorico para não elminá-los. Também abordamos o conceito de Overstemming (quando removemos além do sufixo atingindo o radical) e Understemming (quando o sufixo não é removido totalmente) através da execução de um código prático chamada "fool-stemmer" que cortava as palavras em uma posição fixa, dessa forma, se aplicarmos um "fool-stemmer" que corta os 3 últimos caracteres, palavras curtas como "poder" sofrem overstemming, resultando, no caso, em apenas "po" que pode representar uma grande quantidade de palavras, além disso, palavras como "nacionalmente" sofreriam understemming não removendo o sufixo completamente, resultando em um stemming insuficiente "nacionalme".
Bruno Menezes Gottardo Ladeia A aula 4 da matéria segue de onde a última aula terminou, continuando a falar sobre a normalização de palavras. Normalização de palavras consiste em reduzir uma palavra em um núcleo, que seja possível a agregá-lo com outras palavras que apresentam características parecidas. Abstraindo-se o melhor sentido desta palavra. Esta poda pode se dar de diferentes formas, a depender do algoritmo utilizado, o que define como a palavra será diminuída (por exemplo: se conservará seu significado semântico, ou não). Existem duas técnicas principais de normalização: stemming e lemmatization. O Stemming consiste em reduzir a palavra à seu radical. Entenda-se radical como a menor estrutura essencial da palavra, que não necessariamente conserva significado semântico, utilizado para agrupamento com outras palavras. Isso a torna computacionalmente eficiente para buscas e análise da palavra. (e.g. palavra: amigo, radical: amig). Já Lemming, por sua vez, reduz a palavra à sua raiz (lemma), que possui valor semântico válido. Para isto ele faz “cross- referencing” da raiz com o dicionário da língua, a qual a palavra pertence. Isto torna o processo de Lemmatization computacionalmente “mais caro”, precisando de definições heurísticas para facilitar na busca. Os algoritmos mais famosos de stemming apresentam um fator comum, que refere-se a um processo de heurística que corta as extremidades das palavras (sufixos). Para a língua inglesa existem vários algoritmos de stemming, dentro destes o primeiro e pioneiro foi o algoritmo de Lovins, apresentado pela primeira vez em 1968. Esse algoritmo procura pelo maior sufixo presente nas palavras e remove-os de acordo com algumas condições definidas previamente. Depois, por meio de um conjunto de regras, faz a conversão deste radical que sobra, de forma que facilite o seu agrupamento com outras palavras. O algoritmo atualmente utilizado para a língua inglesa é o algoritmo de Porter. Onde foi apresentado pela primeira vez em 1980, no artigo “An algorithm for suffix stripping”. Já o primeiro algoritmo da língua portuguesa é o de Viviane Orengo de 2001. Foi a primeira versão amplamente divulgada e aceito de um algoritmo de radicalização para a língua. Existem algumas considerações que precisam ser feitas ao utilizar o algoritmo de stemming: A utilização de uma base de dados para comparar as palavras reduzidas, porém isto aumentará o tempo de processamento, prejuízo este que poderá ser maior do que o ganho de precisão. Não há nenhum motivo teórico que impeça que o algoritmo seja customizado de forma a eliminar os prefixos das palavras. Há algumas falhas no algoritmo que pode levar a perda de informação (understemming, ou overstemming). Sendo understemming não reduzir suficientemente a palavra e overstemming reduzir a palavra de forma demasiada.
Victor Conceicao Denis Nessa aula, demos prosseguimento ao tema de normalização. Como visto anteriormente, utilizamos duas técnicas para identificar os radicais das palavras e assim poder contar palavras e posteriormente entender. Dessas duas técnicas, utilizamos duas: Stemming e Lemming. O processo de Stemming utiliza uma técnica para identificar parte de uma palavra que possa também ser utilizada quando flexionamos gênero, número e grau, enquanto o processo de Lemming utiliza palavras nas sua forma básica, por exemplo, ao encontrar no texto a palavra “Fotos” ela seria identifica com “Foto” por este processo. Para essa aula estudamos alguns algoritmos de Stemming somente. O Lovins Stemmer foi o primeiro algoritmo conhecido de Stemming, sendo ele criado em 1968 por Julie Beth Lovins. O processo é rápido, composto somente de duas etapas e é composto por 294 sufixos, 29 condições e 34 regras de transformação. O Processo consiste em encontrar primeiro o maior sufixo listado e remover da palavra, depois verificar condição do sufixo. Após a remoção do sufixo, deve-se verificar as regras para o que restou da palavra e alterado o que for necessário. esse foi um dos primeiros e mais básicos algoritmos mas que serviu de inspiração para outros algoritmos mais modernos. Martin F. Porter, em 1980, baseado no algoritmo de Lovins escreveu seu algoritmo de Stemming. Conhecido como Porter Stemming, esse um dos algoritmos mais utilizados ultimamente sendo ele mais simples e mais completo do que o de Lovins. O algoritmo tem 5 passos bem definidos sendo que os passos tenta encontrar o maior sufixo e removê-lo, tendo preocupação com o plural das palavras e o tempo verbal de passado para os verbos mantendo pelo menos uma vogal na palavra resultante. Esse dois processos foram feitos considerando a língua inglesa, e suas regras adaptadas para essa língua. Para o português, vimos o algoritmo de Orengo. Esse algoritmo foi o primeiro amplamente divulgado para língua portuguesa em 2001, constituído de 199 regras distribuídas em 8 passos, com uma lista de exceções. Apesar de funcionarem consistentemente bem, os algoritmos descritos tem algumas falhas, conhecidas como overstemming e understemming, sendo que o overstemming elimina mais letras do que o necessário causando perda de significado para o resultado enquanto o understemming acontece quando poucas letras são eliminadas resultando em palavras distintas que tem o mesmo significado. Além desses algoritmos, foi criado o Snowball que consiste em recuperação de informação, Ele é um framework para gerar códigos de stemming em qualquer linguagem, facilitando o processo de criação. Ele precisa como entrada o dicionário de sufixos para fazer as condições para que seja executado depois num texto.
Ramon Neres Teixeira Jardim No início da aula foi retomado o assunto de normalização de palavras e foram apresentados os conceito de Stemming e Lemmatization. O processo de Stemming se dá por reduzir uma palavra ao seu radical, ou seja, remover o máximo possível de sua parte final de forma a deixar apenas um radical comum à todas as palavras de mesmo sentido, por exemplo, as palavras gato, gata, gatos e gatas seriam todas elas reduzidas à palavra "gat". Já o processo de Lemmatization, ou lematização, reduz a palavra para a sua forma de dicionário, por exemplo, todas as palavras do exemplo anterior seriam reduzidas para "gato" Existem diversos algoritmos para Stemming, principalmente para o inglês. O primeiro deles foi o algoritmo de Lovins, que influenciou muitos dos algoritmos que vieram posteriormente. O algoritmo consiste em duas etapas para reduzir uma palavra: primeiramente deve-se buscar o sufixo de maior tamanho em uma lista de 294 sufixos, então removê-lo e seguir a regra que está em conjunto com o sufixo na lista e em segundo verificar em uma lista de 34 regras se a sua palavra restante se encaixa em alguma das transformações. Outro algoritmo de Stemming é o Algoritmo de Porter, que é mais simples e mais completo que o de Lovins, sendo o mais utilizado atualmente. O algoritmo tem 5 passos, utiliza regras e possui validações, sendo similar ao de Lovins pois cada palavra é comparada com o maior sufixo e ele é removido. A primeira versão de um algoritmo de Stemmig divulgada de forma ampla para o português foi o algoritmo de Orengo, que é constituído por 199 regras em 8 passos , também considerando uma lista de exceções. Também foram feitas algumas considerações sobre os Stemmers, entre elas são: o uso de um dicionário para comparar palavras reduzidas resultaria num maior tempo de processamento que pode não valer a pena, a remoção de prefixos não parece vantajosa e as formas de medir o desempenho de um Stemmer por meio dos temos Overstemming, quando parte do radical é afetada pelo Stemmer e o Understemming, quando o sufixo não é removido completamente. Outro conceito apresentado foi o de redes de co-ocorrencia, que são grafos que permitem uma visualização as relações entre as palavras de um dado texto. Com eles é possível estudar a organização das palavras e adquirir novos conhecimentos a partir do estudo do grafo. Também foi deixado um questionamento sobre o significado de Snowball dentro do contexto de Stemmers. Snowball é uma linguagem de programação para processamento de strings criada para desenvolvimento de Stemmers.
Lucas Zanoni de Oliveira Relembrando a aula anterior, podemos trazer o conceito de normalização das palavras, que pode ser traduzido como a redução ou simplificação (ou até mesmo radicalização, como veremos futuramente). Um exemplo seria a palavra “amigão” que quando neutralizada toma a forma de “amigo”. As duas técnicas mais importantes do conceito são: steamming e lemmatization; sendo a redução da palavra à sua raiz (produced?produc) e redução em lemas (produced?produce), respectivamente. Para a técnica de Steamming, temos a existência de alguns algoritmos, sendo a maioria para inglês. O primeiro deles é o Algoritmo de Lovins que é considerado o pioneiro e influenciador do gênero, tendo um processamento bem rápido (2 etapas); a primeira consiste na busca por um sufixo de maior tamanho da palavra em questão e que satisfaça certas condições, depois na segunda parte regras são aplicadas para transformar o final da palavra (o algoritmo consiste em 294 sufixos, 29 condições e 34 regras). O segundo mais famoso é o Algoritmo de Porter que é mais completo e simples que o de Lovins, sendo amplamente utilizado atualmente, possuindo 5 etapas bem definidas, e utilizando de regras e operações de validação. O mesmo possui um processo similar ao de Lovins, onde é buscado o maior sufixo para cada palavra, para então removê-lo. Temos o também o Algoritmo de Orengo que é a primeira versão de um algoritmo de radicalização para a língua portuguesa, sendo constituído por 199 regras em 8 etapas, possuindo uma lista de exceções. Ainda sobre a técnica de Stemming, temos o questionamento do uso de uma base de dados que poderia ser utilizada para comparar as palavras reduzidas (um dicionário), porém o processo traria consigo um maior tempo de processamento computacional. A eliminação de prefixos que apesar de tudo, não possui um motivo teórico para não ser considerado. Outro ponto importante é que o algoritmo de Stemming não deve permitir a perda de muita informação, sendo assim temos duas medidas de desempenho, sendo “overstemming” que é quando parte do radical também é removido, e “understemming” que é quando o sufixo não é removido devidamente. Há também na literatura o termo de “Snowball” que se refere a um processamento linguístico de pequenas strings com o objetivo de criar algoritmos de Steamming para serem usados na recuperação de informações. Por fim, temos outras abordagens sobre a técnica em questão, com ênfase especial na aplicação de redes (ou grafos) de co-ocorrência de palavras que permitem a identificação visual das relações entre palavras, descobertas devido a propriedades topológicas nos grafos e a organização das mesmas.
Vinicius Narciso da Silva Sistemas de busca devem retornar resultados relacionados ao termo pesquisado. Para isso, são utilizadas técnicas de normalização de palavras. Normalizar uma palavra consiste em reduzir, simplificar ou radicalizar um termo. As duas principais técnicas utilizadas são Stemming e Lemmatization. O Stemming consiste em reduzir a palavra à sua raiz utilizando-se de uma heurística. Quanto maior a abrangência da heurística, ou seja, quanto mais sufixos ela cobrir e quanto mais regras de substituição que criará raízes iguais para as flexões da mesma palavra, melhores serão os resultados das buscas. Podemos definir o Stemming como a ação de reduzir palavras em Stems (Partes de uma palavra). O Stemmer é o programa que executa o Stemming. Já o Lemmatization é definido como a ação de reduzir palavras em Lemmas (Forma básica da palavra). Lemmatizer é o programa que executa o Lemmatization. Como se é de imaginar, por ser uma técnica, o Stemming tem vários algoritmos. Os mais famosos são os de Lovins e Porter. O algoritmo de Lovins foi pioneiro e influenciou diversos outros algoritmos de Stemming. Este algoritmo é de rápido processamento pois tem apenas duas etapas e é composto por 294 sufixos, 29 condições e 34 regras de transformação. É importante salientar que os algoritmos de Stemming dependem da língua em que são aplicados, pois as regras ortográficas variam de idioma (um algoritmo que pode ser aplicado em inglês, não gerará bons resultados em português, por exemplo). O algoritmo: 1) Procurar pelo sufixo de maior tamanho na palavra e que satisfaz a(s) condições e remova-o; 2) As regras são aplicadas para transformar o final. São aplicadas se um sufixo é removido ou não na primeira etapa. O algoritmo de Porter é mais completo e, diria eu, mais generalista que o algoritmo de Porter. Atualmente é o algoritmo mais utilizado. Consiste em 5 passos em que usa-se regras e faz-se operações de validação. Também reconhece um sufixo de maior tamanho e remove-o da palavra (como o de Lovins). Para o português, em 2001 foi criado o algoritmo de Orengo, que é similar ao de Lovins, porém aplicável ao português. Existe um framework para escrita de algoritmos de Stemming, o Snowball, criado pelo autor do algoritmos de Porter, Martin Porter. Para complementar, podemos correlacionar palavras para melhorar a previsão do algoritmo de busca. Para modelar essa correlação utilizamos grafos de co-ocorrência para ajudar na visualização dessas relações e com isso estudar a organização das palavras ou mesmo considerar propriedades topológicas nos grafos para descoberta de conhecimento a partir de textos.
Alex Arantes Goncalves Ao realizarmos uma busca de termos específicos em motores de busca na internet, estamos interessados em englobar na nossa pesquisa, termos similares, para isso utilizamos técnicas de normalização. Stemming é uma destas técnicas que consiste em reduzir a palavra à sua raiz, sem levar em conta a classe gramatical. Ex.: gat pode ser usado como radical para englobar os termos gato, gata, gatos, gatas.Importante notar que a raiz não pode se confundida com o conceito linguístico de raíz. Ao aplicar a técnica de stemming a palavra resultante pode não ter significado. Há também a técnica de normalização por lemmatization, reduzimos as palavras de interesse em palavras gramaticalmente originais, por exemplo, verbos conjugados: temos, tínhamos, terão são reduzidos a verbo na forma infinitiva ter. É um algoritmo um tanto custoso, pois requer a incorporação de dicionários de referência em sua estrutura. O algoritmo de Lovins, usado na normalização por stemming consiste em se utilizar de tabelas de sufixos, uma tabela de condição e outra de regras. Em sua aplicação priorizar palavras de maior comprimento possível. Outro algoritmo desenvolvido posteriormente baseado no mesmo princípio foi o algoritmo conhecido como de Porter, uma versão mais simplificada do algoritmo de Lovins em 5 passos que na verdade era uma incorporação das tabelas de condições e de regras de Lovin. Para o português Viviane Moreira Orengo desenvolveu a primeira versão amplamente divulgada para português, constituído por 199 regras distribuídas por 8 passos. Algoritmos similares foram desenvolvidos para os mais diversos idiomas. Algumas considerações sobre stemming: uma base de dados poderia ser utilizada para comparar palavras reduzidas (dicionário), entretanto isso iria requerer um tempo de processamento consideravelmente maior,e o esforço investido poderia não ser satisfatório; prefixos poderia ser utilizados nos algoritmos de steemming; O algoritmo de stemming não deveria permitir muita perda de informação; Duas medidas de desempenho podem ser Overstemming quando mais do que o sufixo é removido e Understemming quando sufixo é removido parcialmente. Snowball é uma linguagem de processamento de strings projetada para criar algoritmos de stemm em diversas línguas para recuperação de informação. Grafo de co-ocorrência é uma representação de um texto a ser analisado em que palavras consecutivas se tornam dois vértices interligados por uma aresta. Ao ser contabilizado todas as vezes que a ocorrência de um grafo com estas características, cada vértice passa a ter um peso representado pela quantidade de vezes em que uma associação ocorre. Ao se eliminar stopwords, obtem-se uma representação gráfica de um texto que transmite informações relevantes sobre a obra analisada.
Denildo Veloso Braga Tema da quarta aula: normalização de texto: stemming e grafos de palavras. Possível aplicação: sistemas de busca devem recuperar documentos indexados com diferentes nomes independente das suas formas de escrita. Palavras podem ser flexionadas em número, grau e gênero, além de tempos verbais. Existem técnicas de normalização de palavras que buscam simplificar e eliminar essas variações. Duas técnicas para normalizar texto: stemming e lemmatization. Stemming, que não considera a classe gramatical, elimina variações reduzindo a palavra ao seu radical, que, para a maioria dos casos, não terá significado. Lemmatization reduz a palavra à sua forma básica, a raíz, que tem significado. Na lemmatization, heurísticas são aplicadas para cortar as extremidades das palavras. As heurísticas podem ser entendidas como um conjunto de regras que dependem da linguagem. O resultado da lemmatization tem significado, aparecerá no dicionário. Algoritmo de Lovins: um algoritmo de stemming que elimina variações removendo o maior sufixo da palavra. O algoritmo de Lovins foi um dos primeiros na área e influenciou outros algoritmos de stemming, além de ser simples pois envolve apenas duas etapas. O processamento do algoritmo de Lovins consiste na validação do sufixo com possíveis aplicações de condições e regras de transformação. Algoritmo de Porter: um algoritmo de stemming que é mais utilizado, simples e completo e que o algoritmo de Lovins. O algoritmo de porter é similar ao de Lovins, mas tem cinco passos. Os algoritmos de Lovins e Porter podem ser utilizados para recuperação de informação e, modificando os algoritmos, também podem ser utilizados para eliminar prefixos. Existem diversos projetos para adaptar esses algoritmos para outras línguas, como o Orengo, um algoritmo de stemming para português. Considerações sobre stemmers: as palavras reduzidas poderiam ser comparadas usando uma base de dados ao custo de maior tempo de processamento, que poderia não valer a pena. Existem medidas de desempenho usadas para medir a perda de informação desses algoritmos. Overstemming: quando além de remover o sufixo, também remove-se parte do radical. Understemming: quando a palavra não é reduzida o suficiente. Existem diversos programas em python que implementam algoritmos de normalização, tais como Python NLTK. Os algoritmos de Lovins e Porter truncam a palavra, mas existem outras técnicas que usam estatística ou uma mistura de ambos. Snowball é uma linguagem de processamento de texto para criação de algoritmos de stemming para recuperação de informação. Grafos de co- ocorrência: digrafo formado pela relação das palavras em uma frase ou texto. Stepwords: palavras que concentram muitas arestas em um grafo de co- ocorrência, tais como “and” e “the”.
July Anne Pinheiro Aula 4: Normalização de texto Continuando o estudo de normalização de texto, foi detalhado e exemplificado via código os algoritmos de normalização de Stemming e efetuado uma comparação do mesmo com o Lemmatization referente a estrutura. Referente ao Stemming, foi visto os algoritmos criados por Lovins e Porter, para a língua inglesa, sendo o último o mais utilizado atualmente. É importante ressaltar que ambos focam na remoção dos sufixos das palavras contidas no texto para normalização, gerando a raiz da palavra, no caso, o resultado obtido não sendo a raiz da forma linguística, visto que a palavra pode não ter significado (alguns autores denominam isso de radical da palavra). Para a língua portuguesa a primeira implementação amplamente divulgada do Porter é o algoritmo Orengo desenvolvido por uma professora da UFRGS, Viviane Orengo. O algoritmo de Porter possui diversas versões para diversas línguas. Comparação entre Stemming e Lemmatization Stemming: ação de redução em stems. Stem: Parte de uma palavra. Stemmer: O artefato (programa) Algorithm for stemming. Lemmatization: ação de redução em Lemmas. Lemma: Forma básica da palavra. Lemmatizer: O artefato (programa) Algorithm for lemmatization. Durante a aula foi possível verificar o resultado obtido dos algoritmos em relação a comparação entre palavras únicas, sendo elas sem radicalização e com radicalização. Algumas considerações sobre os stemmers \- Uso de uma base de dados: Seria possível a utilização de uma de dados (dicionário) para comparar as palavras reduzidas. Porém, esse procedimento requerirá maior tempo de processamento computacional, podendo não valer a pena esse maior esforço investido. \- Por que não eliminar prefixos: Em relação a questões teóricas, não há nenhum motivo para não considerar a eliminação de prefixos nos stems. \- Perda de detalhe ou informação: O algoritmo de stemming não deveria permitir a perda de muita informação: Medidas de desempenho: * Overstemming: Processo de remoção não contempla apenas o sufixo,mas também uma parte do radical. Neste caso, temos a possibilidade de 2 palavras serem reduzidas a um mesmo radical. * Understemming: Processo no qual o sufixo não é removido, ou é apenas removido de forma parcial. Aplicação: Rede (grafo) de palavras - > Grafo de co-ocorrência de palavras Grafos de co-ocorrência de palavras , são utilizados para identificar (forma visual) relações potenciais entre elementos (palavras). Sendo possível considerar propriedades topológicas nos grafos para descoberta de conhecimento a partir de textos e estudar a organização das palavras durante o processo de análise. O que é Snowball? É uma pequena linguagem de processamento de strings projetada para criar algoritmos stemming para uso em Recuperação de Informações.
Matheus Fama Machado de Sousa Aula 04 – Como visto na aula anterior, aprendemos duas técnicas de normalização : Stemming e Lemmatization. O processo de stemming consiste em reduziar a palavra à sua raiz. Este processo refere-se a um processo de herística que corta as exrtremidades das palavras (removendo frequentemente afixos derivacionais). Representa um conjunto de regras que dependem da linguagem. Exemplo: Computationally – Computational – Computation - Computa – Comput Fazendo uma comparação entre os processos de Stemming e Lemmatization, percebe-se que: Stemming (a ação de reduzir em stems) Stem: Parte de uma palavra Stemmer: O artefato (programa) Algorithm for stemming Lemmatization (a ação de reduzir em Lemmas) Lemma: Forma básica da palavra Lemmatizer: O artefato (programa) Algorithm for lemmatization Alguns algoritmos foram propostos para o modelo de Stemming. Um dos pioneiros foi o Algoritmos de Lovins. Este algoritmo é composto por 264 sufixos, 29 condições e 34 regras de transformação. Seu processamento ocorre, de forma rápida, em apenas 2 etapas. (Etapa 1) Procurar pelo sufixo de maior tamanho na palavra e que satisfaz as condições e remove-lo. (Etapa 2) As regras são aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. Em 1980, surge o algoritmo de Porter com a mesma proposta de eliminar/remover os finais das palavras sem saber, à priori, o conhecimento para sua redução. O algoritmo proposto por Porter é mais completo e mais simples quando comparado com o de Julie Lovins e, por isso, é o stemmer mais utilizado atualmente. Para a língua portuguesa foi proposto, em 2001, um algoritmo de stemming: Orengo. O Oregno é constituído por 199 regras distribuídas por 8 passos e também considera uma lista de exceções. Após alguns dados históricos acerca dos algoritmos stemmers, vamos há algumas considerações. 1. Uso de uma base de dados? Poderia ser utilizado uma base de dados(dicionário) para comparar as palavras reduzidas. Entretanto, esse procedimento requer maior tempo de processamento. Mesmo consumindo mais tempo, o esforço investido poderia não valer a pena. 1. Por que não eliminar prefixos? Não há nenhum motivo teórico para não considerar a eliminação de prefixos nos stemmers Exemplo : Arqui duque , Protó tipo, Contra dizer, Ultral eve. 1. Perda de detalhe ou informação? O algoritmo de stemming não deveria permitir a perda de muita informação. Para isso, há duas medidas de desempenho : Overstemming e Understemming. Overstemming ocorre quando é removido não apenas o sufixo mas também uma parte do radical. Understamming ocorre quando o sufixo não é removido, ou apenas é removido parcialmente
Gustavo Murayama A normalização de palavras é o processo de redução ou simplificação ou a radicalização de palavras, uma vez que temos diferentes palavras flexionadas em gênero, número e grau, além dos tempos verbais. As duas técnicas mais importantes são o Stemming (ação de reduzir em stems) e Lemmatization (ação de reduzir em lemmas). O processo de stemming reduz a palavra à sua raiz sem levar em conta sua classe gramatical. Stem é uma parte da palavra e stemmer o programa (artefato). Stemming geralmente se refere a um processo de heurística que corta as extremidades das palavras e pode ser representado por um conjunto de regras, dependendo da linguagem. A diferença para Lemmatization é que o processo reduz a palavra em lemma, que é a forma básica da palavra, através de um Lemmatizer (programa). Existem diferentes algoritmos de Stemming, sendo apresentado em aula o Algoritmo de Lovins, que consiste em procurar pelo sufixo de maior tamanho na palavra que satisfaz as condições e as remove, depois aplica uma regra para transformar o final dependendo se o sufixo é removido ou não na etapa anterior. Outro algoritmo apresentado é o de Porter, que eliminam/removem consecutivamente os finais das palavras (não é requerido nenhum conhecimento prévio para a sua redução). O algoritmo é mais completo e simples do que o de Julie Lovins e é atualmente o stemmer mais utilizado. O processo é feito em 5 passos: usa-se regras e operações de validação, cada palavra é comparada sequencialmente com o maior sufixo possível e, caso seja encontrado, o remove da palavra. Há um algoritmo de stemming para o português, criado pela pesquisadora Viviane Orengo. É constituído de 199 regras distribuídas em 8 passos e considera uma lista de exceções. Há algumas considerações importantes a serem feitas dos Stemmers: a primeira é que pode ser utilizado um dicionário para comparar as palavras reduzidas, porém, requer um tempo computacional maior, muitas vezes não valendo o esforço investido. A segunda é eliminar prefixos (não há nenhum motivo teórico para não considerar a eliminação de prefixos). O terceiro seria que um algoritmo de stemming não deveria permitir a perda de muitas informações. Mede-se o desempenho com duas classificações: Overstemming, quando é removido parte do radical da palavra, e Understemming, quando sufixo não é removido ou removido parcialmente. No contexto de stemming, Snowball é um framework para escrever algoritmos de stemmings e implementada com um stemmer melhorado de inglês juntamente com outras línguas.
Rafael Ribeiro Gomes da Silva Nessa quarta aula da disciplina de PLN, vimos principalmente a técnica para normalização de texto conhecida como Stemming. Esse processo reduz uma palavra ao seu radical, através da remoção ou substituição dos sufixos. Como a maior parte dos estudos e da literatura para a área é em inglês, esse idioma possui a maior gama de algoritmos para Stemming. Foi feita uma introdução histórica sobre o algoritmo de Lovins e sua composição, feita por 294 sufixos, 29 condições e 34 regras de transformação. Todo o fluxo dura apenas duas etapas, o que faz com que o processamento seja rápido. Na atividade prática sobre o algoritmo de Lovins, entendemos que algumas palavras podem não ter nenhum sufixo correspondente, sendo assim é necessária a substituição pelas regras descritas no próprio algoritmo. Porém, apesar de ser muito eficiente não engloba alguns contextos. Com esse pretexto, foi criado o algoritmo de Porter nos anos 80, considerada uma evolução de Lovins e que atualmente é o mais utilizado, com versões para ser implementado em vários idiomas e linguagens de programação. Em Porter, existem 5 passos bem definidos onde através de substituições simples e definições IF-ELSE podemos chegar ao núcleo das palavras. O português é um idioma complexo, e devido a isso, sua implementação tem uma quantidade maior de regras e o auxílio de uma tabela de exceções, seu nome é Orengo. Uma base de dados contendo todos os verbetes de um idioma tornaria o processo muito oneroso e talvez não valesse o esforço para mitigar os erros da radicalização. Outros detalhes citados, são que todos os algoritmos são baseados em sufixos, não há uma implementação que trate dos prefixos,, o que para o português traria ótimos resultados, e, implementações de stemmer para nomes. O desempenho de stemming se dá por duas classificações: * Overstemming: quando parte do radical é removida junto ao sufixo; * Understemming: quando o sufixo não é removido em sua totalidade. Durante a codificação, percebemos que não é ideal uma super generalização e limitação por palavras, como observado no fool-stemmer e compreendemos como funciona Porter. Além disso, é possível aplicar grafos para identificarmos proximidade entre as palavras. Respondendo à pergunta sobre o que é snowball: Como supracitado, boa parte do stemmer e artigos são feitas para o inglês, o que causa um déficit em outros idiomas ou inexatidão em seus resultados. Com isso, snowball são aplicações colaborativas para superarem esse problema.
Matheus de Araujo Vargas Na aula do dia 13 de Junho do professor Jesus P. Mena foram apresentados alguns algoritmos de normalização de palavras (tokens) e exemplos de aplicação, além de uma prática em Python na parte final da aula. Os duas principais técnicas de normalização de texto são conhecidas como "Stemming" e "Lemmatization". O processo de stemming consiste em reduzir a palavra à sua raiz (sem levar em conta a classe gramatical). Exemplos: amig = amigo, amiga, amigão; gat = gato, gata, gatos, gatas. Já o processo de lemmatisation consiste em aplicar técnicas para deflexionar as palavras (retira a conjugação verbal, caso seja um verbo, e altera os substantivos e os adjetivos para o singular masculino, de maneira a reduzir a palavra até sua forma de dicionário). Exemplos: amigo = amigo, amiga, amigão; gato = gato, gata, gatos, gatas. Nessa aula o foco foi na técnica de stemming, sendo apresentados diferentes algoritmos para aplicar essa técnica. O primeiro algoritmo apresentado foi o "Algoritmo de Lovins", considerado o algoritmo pioneiro e influenciador de muitos stemmers. O algoritmo é composto por 294 sufixos, 29 condições e 34 regras de transformação. O processamento é rápido, podendo ser realizado em apenas 2 etapas. O algoritmo consiste em (1) Procurar pelo sufixo de maior tamanho na palavra e que satisfaz a(s) condições, e remove-lo. (2) As regras são aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. Um outro algoritmo apresentado na aula, que é mais completo e mais simples que o de Lovins (e o mais utilizado atualmente) é o algoritmo de Porter. Tal algoritmo é constituído de cinco fases, nas quais são aplicadas regras às palavras para a remoção dos sufixos mais comuns. Com base em uma métrica específica relacionada ao número de vogais-consoantes presentes em uma palavra, o stemmer tenta evitar a remoção de letras caso o stem seja muito pequeno. Foi apresentado na aula também um algoritmo que se adequa melhor à lingua portuguesa, que é o algoritmo de Orengo. Esse algoritmo funciona de maneira semelhante aos anteriores, sendo constituído por 199 regras distribuídas por 8 passos. Porém, o algoritmo de Orengo considera uma lista de exceções, necessárias à lingua portuguesa. Ao final da aula foi realizada uma atividade prática, onde foi utilizado um algoritmo de stemming para criar uma rede (grafo) de palavras.
Matheus Dos Santos Pereira Resumo da aula 04, sobre normalização de texto: Stemming, na aula anterior tivemos uma introdução de Stemming x Lemmatization, nesta aula vimos um pouco mais sobre o assunto, a “normalização de palavras” pode ser entendida como a redução ou a simplificação ou a radicalização de palavras, um exemplo da importância disto é, um sistema de busca deve permitir que documentos indexados com diferentes nomes sejam recuperados usando quaisquer das suas formas de escrita. Stem significa uma parte da palavra, e lemma é a forma básica da palavra. O algoritmo de Lovins é um Stemming, composto por 294 sufixos, 29 condições e 34 regras de transformação, o processo consiste em procurar o maior sufixo que satisfaz as condições, e depois as regras são aplicadas, independentemente se o sufixo é removido ou não. Após isso fizemos uma atividade prática deste algoritmo, outro algoritmo de Stemmer que vimos foi o suffix stripping do Martin F. Porter, ele p o algoritmo mais utilizado atualmente, é mais complexo que o algoritmo anterior, possui 5 passos, vimos o algoritmo em python, assim como a tabela de regras dele, estes últimos 2 algoritmos são utilizados em inglês, para o português temos o Orengo composto por 199 regras distribuídas por 8 passos, no python utilizamos o NLTK. È difícil comparar os resultados para avaliar a eficiência, podemos usar um dicionário para comparar as palavras, porém é um processo que consome muito tempo, por conta disso pode não valer a pena, o algoritmos não pode perder muita informação, temos dois casos o Overstemming onde não é removido só o sufixo, mais tambem o radical, e o understemming, onde o sufixo não é removido, ou removido parcialmente. Snowball é uma linguagem de processamento de strings projetada para criar algoritmos stemming para uso em Recuperação de Informações, a necessidade do Snowball vem da dificuldade de encontrar algoritmo de stemming fora da língua inglesa. Este site descreve Snowball, e apresenta vários stemmers úteis que foram implementados usando-o. Rede de Grafos permitem identificar, de forma visual, relações potenciais entre elementos (palavras), e podemos aplicar os conceitos de teoria dos grafos para tentarmos extrair informações, co-ocorrência pode ser usado para estudar o sentido de texto e para descoberta de conhecimento(retirar o conhecimento do texto), assim como o estudo da organização das palavras.
Felipe Dias Correia No dia 13 de Junho de 2019, foi iniciado a 3° aula de Processamento de Linguagem Natural, sobre Stemming. O professor fez uma breve resumo sobre normalização de palavras, usando o Google como exemplo, onde o programa de busca, ao procurar “Controladores”, também buscou a palavra Controle, e por conta deste exemplo, foi iniciada a aula sobre esse sistema. Conforme o exemplo dado, foi explicado o conceito de Radicais da Língua Portuguesa, onde a técnica de Stemming e Lemmatization se baseiam neste conceito. Stemming, onde é o tema desta aula, consiste em reduzir a palavra à sua raiz,e também foi explicado o conceito da palavra Stems, onde significa "parte de uma palavra" e de Lemmas, que significa "forma básica da palavra". Foi dado os Algoritmos de Stemming, iniciando pelo algoritmo de Lovins, onde ela influenciou as primeiras pesquisas de Stemmers. Onde sua biblioteca era composta por 294 sufixos, 29 condições e 34 regras de transformação, e seu algoritmo é processado em 2 partes: Procurar pelo sufixo de maior tamanho na palavra e que satisfaz as condições => remover e as regras são aplicadas para transformar o final, aplicadas se um sufixo é removido ou não na primeira etapa. Também foi explicado sobre o algoritmo de Poter, seu algoritmo é mais completo e mais simples comparado ao algoritmo de Lovin, onde há 5 passos bem definidos, usa-se regras e operação de validação, e parecido com de Lovins, cada palavra é comparada com o maior sufixo possível, e também foi exibido o algoritmo em Python. Também foi dado o algoritmo de Stemming, com as regras da língua portuguesa, feita pela Orengo, onde era constituido por 199 regras, distribuídas em 8 passos, e algumas excepções. Onde mostrou um fluxograma e uma tabela com as regras e oi mostrado o algoritmo em python NLTK, em que deixou um texto apenas com os sufixos. Foi abordado também a comparação de palavras, com ou sem radicalização e comparou os resultados e algumas considerações sobre stemmers, sobre o uso de uma base de dados, eliminar os prefixos, na literatura, perda de detalhes e informação e para nomes próprios. O final da aula mostrou a técnica de Stemmers na prática, com um algoritmo mais simples, o algorimo de Poter,e a sua aplicação, usando Grafos.
Marcelo Schirbel Gomes Aula 04 Normalização de texto: Stemming Um sistema de busca deve permitir que documentos sejam recuperados usando quaiquer forma, mesmo que com nomes diferentes. Como por exemplo a busca do Google, que normaliza as palavras da pesquisa para trazer os melhores resultados. Em portugues, por exemplo, temos o numero, grau e genero da palavra. Isso pode ser um problema para as normalizações. Stemming Stemming busca cortar, ou truncar, as extremidades das palavras. Exemplo: Computationally Computational Computation Computa Comput Todas elas partem da mesma raíz. Mas não necessariamente uma palavra com significado. Mas é robusta o suficiente para fazer buscas. Produced -> Produc(Stemming) | Produce(Lemmatization) Algoritmo de Lovins Etapa1: Procurar pelo sufixo de maior tamanho na palavra e que satisfaça as condições. Etapa2: 34 regras que podem ser aplicadas para transformar o final da etapa1. Os dois algoritmos, Porter e Lovins, eliminam o sufixo de palavras. Algoritmo de Porter É mais simples e mais completo que o de Lovins. É o mais usado atualmente. O algoritmo identifica qual o radical e baseado num conjunto de regras, ele calcula o tamanho do radical. Algoritmo de Orengo Adaptação do algoritmo de stemming para a lingua portuguesa. Consituído de 199 regras e 8 passos de análise. Comparação dos textos reduzidos É notório não fazer sentido semantico, pois o Stemming peca nisso, diferente do Lemmatization. Talvez, para ajudar com isso, poderiamos usar um banco de dados, mas isso aumentaria o tempo de execução. Não há nenhum motivo teorico para não considerar a eliminação de prefixos. O algoritmo de stem não pode permitir a perda de muita inforação sobre as palavras convertidas. Overstemming É quando removemos não só o sufixo mas o radical também. Como por exemplo o fool-stemmer, mostrado em sala. Understeming Quando o sufixo nao é removido, ou removido parcialmente Algoritmo Stemmer Snowball Snowball é um framework, ou seja, um conjunto de ferramentas, feito para escrever algoritmos de Stemming. Grafos de Co-ocorrência Um grafo de co-ocorrência mostra as relações de sequência entre as palavras. Isso pode indicar o sentido semântico de um texto. Mas é necessário aplicar uma remoção de stopwords, pois elas tem o maior peso na construção de arestas. Além de aplicar um stemming nos textos. Github: dreampuf/Graphviz
Tiago Suzukayama Em textos da língua portuguesa, temos diferentes palavras, flexionadas em gênero, número e grau. Além disso, temos inúmeros tempos verbais distintos. A normalização da palavra pode ser compreendida como a redução ou simplificação da mesma. Existem duas técnicas importantes: Stemming e lemmatization. Stemming consiste em reduzir a palavra à sua raiz, é a ação de reduzir para parte de uma palavra. Já Lemmatization consiste em reduzir a palavra em sua forma básica. Existem diferentes algoritmos de stemming. O pioneiro foi o algoritmo de Lovins, criado por Julie Beth Lovins. É composto por 294 sufixos, 29 condições e 34 regras de transformação. O processo é rápido e consiste de apenas 2 etapas: procurar pelo sufixo de maior tamanho na palavra e que satisfaz as condições, e removê-lo, e depois, regras são aplicadas para transformar o final da palavra restante. Outro algoritmo famoso é o algoritmo de Porter, construído por Martin F. Porter. É mais completo e mais simples que o de Lovins, e é o stemmer mais utilizado atualmente. É similar ao de Lovins: cada palavra é comparada sequencialmente com o maior sufixo possível. Caso encontrado é removido da palavra. O algoritmo de Orengo foi a primeira versão amplamente divulgada de um algoritmo de stemming para a língua portuguesa. Foi constuido em 2001, por Viviane Moreira Orengo. É constituido por 199 regras distribuídas em 8 passos. Existem algumas considerações que podem ser feitas sobre algoritmos de stemming. Poderia ser utilizado uma base de dados para comparar as palavras reduzidas. Entretanto, esse procedimento requer maior tempo de processamento computacional. Mesmo consumindo maior tempo, o esforço investido poderia não valer a pena. Não existe motivo teórico para não considerar a eliminação de prefixos em stemmers. O algoritmo não deve permitir grande perda de informação. O desempenho do algoritmo pode ser medido por duas métricas: overstemming, que ocorre quando é removido parte de seu radical junto com o sufixo, e understemming, quando o sufixo não é removido ou é apenas removido parcialmente. Snowball é um framework, construído por Martin Porter, para escrever algoritmos de stemming, visando eliminar as falhas de implementação que os algoritmos de stemming tinham.
Ruan Fernandes A aula iniciou mostrando que um buscador deve permitir encontrar palavras e documentos indexados nas suas diversas formas de escrita. Para isso, é realizado o processo de normalização da palavra, que consiste em sua radicalização (redução). Foi então, citado duas técnicas: stemming e lemmatization (ainda não abordado). Stemming consiste em reduzir a palavra à sua raiz, e é a ação de reduzir em “stems” - parte de uma palavra. Existem diferentes algoritmos de Stemming, tendo sido apresentado os de lovins stemmer e de porter stemmer. O de Lovins foi criado em 68 por Julie Lovins, composto por apenas 2 etapas: procurar pelo sufixo de maior tamanho da palavra e satisfaça a condição e depois removê-lo; aplicar as regras para transformar o final. Após esse ponto, foi feita uma atividade prática que consistia em aplicar o algoritmo de lovins stemmer em algumas palavras e uma questão sobre grafos de co-ocorrência. Então, foi apresentado o algoritmo de porter, criado por Martin Porter, que é atualmente mais utilizado que o de lovins e considerado mais simples. Foi mostrado um código do algoritmo de porter em python, que é relativamente simples embora longo, seguido de um algoritmo de stemming para português (os citados antes são apenas para o inglês). Esse algoritmo, chamado de Orengo, foi publicado em 2001, e é constituído de 199 regras distribuídas em 8 passos, considerando também uma lista de exceções. Depois, foi mostrada comparações entre texto original e texto normalizado por stemming. Uma base de dados (dicionário) poderia ser usada para comparar as palavras reduzidas e evitar perda de informação, porém, o tempo de processamento cresceria e talvez o resultado não seja o esperado. Overstemming: palavras diferentes que resultam no mesmo radical; Understemming: palavras que deveriam ser reduzidas ao mesmo radical mas ficam diferentes. Então, foi mostrado um simples fool-stemmer (stemmer bobo), reduzindo todas as palavras de um texto para no máximo 3 caracteres, um porter stemmer. A parte prática, consistiu em redes de grafos de palavras. Snowball é uma pequena linguagem de processamento de strings designada à criação de algoritmos de stemming para uso na recuperação de informação.
Pedro Ricardo Bronze Inicialmente realizamos uma breve revisão da aula passada, aborando Stemming e Lemmatization. Stemming sendo a redução a raiz e Lemmatization sendo reduzir a seu radical. O algoritmo de Lovins que pioneirou o campo e influenciou diversos stemmers. Esse algoritmo se baseia em sufixos, condições e regras de transformação para efetuar a normalização. Em seguida nos foi proposta uma atividade prática para familiarização com o algoritmo de Lovins, nas quais pudemos entender a robustez do algoritmo para convergir para mesmas raízes mesmo com diversos sufixos. Em sequência é apresentado o algoritmo de Porter, seu paper seminal: "An algorithm for suffix stripping" foi apresentado. Este algoritmo é facil de implementar uma vez que casa a busca do sufixo com a regra de remoção. O algoritmo de Orengo de 2001 foi desenvolvido por uma pesquisadora da UFRGS para o português que inclusive já considera acentos. Pudemos observar que já existem diversas variações de algoritmos de stemming para diferentes idiomas. Pode-se modificar os algoritmos para remoção de prefixos em alguns casos. Stemmers que removem informações demais (overstemming) podem comprometer a extração de características do texto, exemplo no caso de aplicar stemmers de outros idiomas no atual. Enquanto que understemming se refere a quando o sufixo é removido parcialmente apenas. Stemmer para nomes é outra possibilidade para chegar em apelidos. Foi apresentado um 'fool-stemmer' que fica com apenas os 3 primeiros caracteres de cada palavra, um exemplo que trunca de forma pouco inteligente os termos, constituindo assim overstemming. Grafo de co-ocorrência: cria-se um dicionário de tuplas com suas frequências de ocorrência. Podemos ainda adicionar um stemmer para encontrar tuplas de raízes de palavras. Uma forma de avaliar se o stemming funciona bem é utilizar um grafo de co-ocorrência para graficamente avaliar a adequação do stemmer. Exemplo prático utilizando interface gráfica na web podemos visualizar a análise da Ilíada de Homero em inglês. Redes de co-ocorrência também cria representações topológicas que permitem análise e extração de conhecimeto dos textos. Snowball é uma linguagem relativamente simples de programação para manipulação de strings e criação de stemmers desenvolvida por M. F. Porter.
Luana Ferreira do Nascimento Podemos reduzir palavras para agrupar utilizando dias técnicas diferentes: radicalização e lematização. Na radicalização vamos reduzir as palavras até um radical que seja comum entre todas as variações da palavra. Já em lematização vamos tentar reduzir as palavras para o singular masculino, porém para isso vamos precisar de um dicionário da língua que estamos tratando, que pode ser difícil. O algoritmo mais usado hoje em dia para agrupar palavras de acordo com seu significado é o algoritmo de Porter. Ele é um bibliotecário que nunca esteve na academia e nem sequer é da área da computação, mas inventou este algoritmo para um projeto e agora é muito bem sucedido na área dele, a biblioteconomia. Ele tem uma lista de sufixos e um conjunto de regras para serem aplicadas no caso de encontro de cada um, para ir transformando a palavra em um radical. Ele não chegou a programar seu algoritmo, mas como era da área de biblioteconomia e conhecia muito bem a língua inglesa, ele foi capaz de ditar o conjunto de regras que hoje é utilizado. Os principais algoritmos são feitos apenas com tratamento do sufixo, mas nenhuma regra lógica nos impede de tratar também o prefixo, pois muitas vezes eles são utilizados como modificadores das palavras, apesar de frequentemente mudar por completo o sentido delas. As mesmas regras utilizadas no algoritmo de Porter não conseguem ser utilizadas para outras linguagens, apenas para ingles. Isso acontece pois cada linguagem possui sua gramática e muitas vezes as transformações não vão fazer sentido, pois a própria estrutura de construção das palavras muda de uma linguagem para outra. Se tentarmos simplificar o problema e apenas reunir o grupo de sufixos conhecidos na linguagem em referência e tentar remover eles de todas as palavras de um documento, provavelmente vamos ter um problema de over- stemming, que significa que foram retiradas letras demais de algumas palavras, com uma alta probabilidade de remover parte do radical junto com o sufixo. Um algoritmo de snowball é uma linguagem desenvolvida.
Renan Baisso Em continuação da última aula, deu-se prosseguimento ao estudo de palavras e técnicas para normalização como stemming e lemmatization, ambos tem como objetivo realizar a substituição de palavras semelhantes por seu radical. O stemming faz este procedimento pela remoção de extremidades da palavra que inclui afixos derivacionais, isto é, causa o truncamento. Por exemplo, as palavras "outros" e "outra" podem ser substituídas apenas por "outr", que para linguística pode não ter muito sentido, mas que para procedimentos computacionais, gera uma melhora. Já o lemmatization faz a redução de palavras para sua forma masculina singular, a qual é encontrada no dicionário formal. Utilizando ainda o mesmo exemplo, as palavras seriam substituídas por "outro", claramente este procedimento tem um custo de processamento maior, pelo fato de precisar de um dicionário e fazer a busca para substituição. Métodos como o stemming são largamente utilizados em sistemas de busca como Google, em que independente da forma que um nome ou termo esteja escrito, ele será encontrado. Dentro dessas classes de técnicas, temos diferentes algoritmos, principalmente para o inglês. Dentre eles, temos o algoritmo de Lovins, o qual foi desenvolvido por Lovins, Julie Beth e publicado em seu artigo "Development of a stemming algorithm". Sua implementação foi construída em inglês com 294 sufixos, 29 condições e 34 regras de transformação. Sendo que as regras e condições são aplicadas depois do processo de stemming para adaptação do radical. Há também o algoritmo de Porter, criado por Porter, Martin. F., que também utiliza a técnica de stemming, porém é mais simples que o de Lovins. Ambos os algoritmos eliminam/removem consecutivamente os finais das palavras e para cada palavra não é requerido conhecimento à priori para a sua redução. Snowball em PLN é uma pequena linguagem para processamento de strings, projetada para produção de algoritmos de stemming, com principal utilização de recuperação de informação.
Murilo Bolzan Dionisio Normalizadores de texto: -Stemming é um método de reduzir palavras à sua raiz, pode ou não ter significado e com gênero, plural, aumentativo e etc sendo abstraídos; *Não há nenhum motivo teórico para não considerar a eliminação de prefixos nos stemmers. *Overstemming: Termo usado quando a redução do sufixo foi muito grande, generalizando muito a raiz. *Understemming: Termo usado quando a redução do sufixo foi muito pequena, não generalizando o bastante a raiz. *Algoritmo de Lovins: É feito em duas etapas, onde Primeiro se procura o sufixo de maior tamanho pertencente à palavra, é verificado sua condição de uso e, se validada, é removido. Segundo, verifica se é terminado em duplicatas específicas e depois se o sufixo é pertencente a tabela de substituições predefinida. *Para quaisquer algoritmos anteriormente citados, existe a implementação já feita em Python. -Lemmanation é um método de reduzir palavras à seu lema, sempre existindo um significado à palavra reduzida (com uso de dicionário); -Grafo de co-ocorrência é um tipo de grafo composto de forma que os vértices são as palavras contidas no texto e as arestas interligam os nós baseado na ocorrência dentro do texto, podendo então enumerar a quantidade de repetições destas próprias arestas. -Snowball é uma pequena linguagem de programação de processamento de sequências projetada com o intuito de criar algoritmos de stemming para uso na recuperação de informações. Seu compilador traduz um script (arquivo .sbl) em um programa ANSI C thread-safe ou em um programa Java. No ANSI C, cada script produz um arquivo de programa e um arquivo de cabeçalho correspondente (nas extensões .c e .h). O compilador também verifica a consistência de seu script e essa verificação foi usada para descobrir um erro de digitação em um trabalho acadêmico seminal de Lovins, que permaneceu indetectável por 30 anos.
Paulo Alexander Simoes Resumo - Aula 4 Normalização de texto - Stemming Normalização de texto são extremamente importantes para sistemas de buscas. Pois na língua portuguesa por exemplo temos nos textos diferentes palavras flexionadas em gênero, número ou grau, e ainda diversos tempos verbais para serem identificados. Em razão disso a normalização de palavras busca realizar a redução ou a simplificação ou até mesmo a radicalização de palavras.Onde temos duas técnicas importantes Stemming e Lemmatization. Stemming é uma heurística que consiste em cortar as extremidades das palavras e inclui frequentemente a remoção afixos derivacionais. Seu uso efetivo depende da criação de um conjunto que dependem da linguagem a ser usada. Lemmatization, quando se reduz a palavra em lemas, ou seja, a forma básica da palavra. Utilizando dessas técnicas diversos algoritmos foram criados a fim de resolver o problema de normalização de forma eficiente. Como algoritmo de lovins, algoritmo de stemming, martin f. porter, orengo, e stemming(snowball). O algortimo de Lovins, busca pelo maior sufixo da palavra que satisfaz as condições.E as regras são aplicadas para transformar o final. Isso ocorre se um sufixo é removido ou não na primeira etapa. O algoritmos de Porter segue a mesma linha de Lovins porém é mais completo e simples, considerado um dos temmers mais utilizado atualmente. Basicamente ele usa as reras de operação e validação, onde cada palavra ´pe comparada sequencialmente com o maior sufixo possível. Casou o sufixo, deve-se remover da palavra. Outra conceito de stemming utilizado é o snowball que consiste em uma pequena string desenhada para processamento de linguagem natural para a criação de stemming que evitam a perda de informação. Pois, um dos problemas mais discutidos, é a possibilidade de perda de informação, onde o algoritmo de stemming não deve permitir que esta seja muito grande.
Tamara Cavalcante dos Santos O processo de stemming são utilizados para reduzir as palavras à sua forma raiz, muitas vezes através da eliminação das extremidades das palavras. Um exemplo: cachorr -> cachorro, cachorra, cachorros, cachorras. O processo de stemming não considera a classe gramatical das palavras. Há diversos algoritmos para o processo de stemming, principalmente para a língua inglesa. Um dos primeiros algoritmos desenvolvidos para stemming é o Algoritmo de Lovins, criado em 1968, o qual possui um processamento rápido que ocorre em somente 2 etapas. Através dos seus 294 sufixos, 29 condições e 34 regras de transformação, o algorimo de Lovins age de forma a procurar o sufixo que possui maior tamanho na palavra, aplica as condições e após as regras de forma com que transforme o final da palavra (no caso de palavras em que o sufixo foi removido no início do processo). Outro algortimo criado para o processo de stemming é o algoritmo de Porter, criado em 1980, o qual é o mais utilizado atualmente e possui 5 etapas de processamento. Tanto o algoritmo de Porter como o algoritmo de Lovins funcionam de forma a eliminar os finais das palavras. Já para a língua portuguesa, a primeira versão de um algoritmo de stemming, o algoritmo Orengo, foi divulgada somente em 2001. Diferente de um stemming de língua inglesa, um stemming de língua portuguesa precisa considerar com acentos, cedilha e outras peculiaridades que a língua portuguesa possui. O Snowball é uma linguagem criada para o processamento de strings, projetada especificamente para a criação de algoritmos de stemming da língua portuguesa para uso em recuperação de informações. O snowball considera todas as formas de acentos, identificando-as como vogais ou não e possui um processamento dividido em 5 etapas.
Rafael Pauwels de Macedo A língua portuguesa possui palavras flexionadas em gênero, número ou grau, pra normalizar as palavras temos algoritmos como o stemming que consiste em levar uma palavra à seu radical e lemmatization que consiste em levar uma palavra à sua raiz. Ambos são algoritmos de normalização mas não devem ser confundidos. O algoritmo pioneiro e que é base de muitos dos algoritmos de radicalização foi criado por Julie Beth Lovins. Trate-se de algoritmo relativamente simples, são 294 sufixos e 29 condições na primeira parte e na segunda parte do algoritmo se aplica 34 regras ao restante. Depois do algoritmo de Lovins em 1968 surgiu o algoritmo de Porter 1980, que apesar de não ser do meio da computação influenciou todas as futuras gerações desse tipo de algoritmo. O algoritmo de Marin F. Porter consiste em 5 passos muito bem definidos e que agem de forma bem mais simples que o algoritmo de Lovins, dentro do sistema todo e qualquer sufixo reconhecido é automaticamente removido da palavra, sendo o algoritmo mais utilizado atualmente existem implementações em diversas linguagens de programação. A versão stemmer aplicada para o língua portuguesa só foi definido em 2001 por Orengo. Na segunda parte da aula vimos a execução prática desses algoritmos e discutimos sobre os resultados, comparando textos com e sem radicalização. Vimos também um pouco sobre redes de palavras (grafos) que podem indicar a co- ocorrência de palavras, podendo também revelar potenciais relações entre as palavras. Snowball é a uma pequena linguagem de processamento desenhada para facilitar a criação de algoritmos de stemming, utilizados na recuperação de informações. O compilador Snowball transforma o script escrito em outras linguagens suportadas como C, C, Go, Java, Javascript, Object Pascal, Python e Rust.
Estevao Crippa da Veiga A normalização de palavras consiste na redução da palavras. As duas técnicas mais importantes são stemming e lemmatization. A stemming consiste em reduzir a palavra a sua raiz, apenas realizando cortes na extremidade da palavra, enquanto a lemmatization consiste em reduzir a palavra à sua forma básica. Um dos primeiros algoritmos de stemming foi o de Lovins, que é composto por 294 sufixos, 29 condições e 34 regras de transformação e seu processamento é realizado em apenas duas etapas. Primeiro procurá-la e o sufixo de maior tamanho na palavra e que satisfaz as condições, então remove. Depois as regras são aplicadas para transformar o final, aplicadas se o sufixo é ou não removido na primeira etapa. Outro algoritmo de stemming conhecido é o de Porter. Ele é mais simples e mais completo, portanto mais utilizado, porém seus procedimentos não serão tratados neste resumo. Para o português, o primeira algoritmo divulgado é o de Orange, constituído por 199 regras distribuídas por 8 passos e algumas exceções. É importante ressaltar que os algoritmos de stemming não necessitam um conhecimento prévio a respeito do significado das palavras. Tem como um de seus propósitos não perder informação. Além disso, apesar de os algoritmos citados só considerarem sufixos, não existe nenhuma razão teórica apresentada ainda para não remover o prefixo. Outro ponto importante que devemos ressaltar é que as palavras reduzidas poderiam ser comparadas a palavras de um dicionário, mas isso envolve um alto custo computacional, por isso é importante avaliar sua utilização em cada situação. No contexto de normalização de palavras, existe uma linguagem de programação na qual o stemmer é definido exatamente, chamada Snowball. Ela foi criada por Martin Porter para criação de novos algoritmos de Stemming.
Rodrigo San Martin Ignacio Gomes Snowball é uma linguagem de programação desenhada para processamento de texto por algoritmos de stemming. A linguagem foi desenvolvida pelo Dr. Martin Porter em 2001. A primeira motivação para criação da linguagem é a falta de algoritmos de steeming em linguagens além do inglês. Em segundo lugar, é a falha de implementação exata do algoritmo original do Porter Steemer. Algoritmos de steeming para diversas línguas muitas vezes são desenvolvidos mas a sua codificação em C, Java, Perl, etc é dificultada devido a ambiguidade desses códigos. Codificações exatas são mais comumente encontradas em algoritmos mais simples, com o stemmer de Schinke para Latin e o de Popovic para esloveno. Um stemmer que representa o padrão que gera esse problema é o de Kraaij para holandês, que é muito complexo e é apresentado em ANSI C. A extração da descrição exata é muito trabalhosa. O próprio Steemer de Porter também apresenta implementações que apresentam variações entre si. Essas variações podem ocorrer devido a problemas de interpretação do algoritmo original, outra são bugs no desenvolvimento e a terceira ocorre quando os desenvolvedores decidem adicionar aprimoramentos ao algoritmo original. Um grande problema que essas variações geram é a falta de replicabilidade de trabalhos, visto que um algoritmo apresentado como Porter Steemer em uma linguagem ou implementação pode resultar em transformações muito diferente entre versões. Para resolver esse problema, Porter desenvolveu um sistema para definição de algoritmos de steeming, que é a linguagem Snowball. Nela, as regras são expressadas da forma mais natural possível. A linguagem é pequena, pode ser aprendida em menos de uma hora por um programador com experiência. Após implementado na linguagem Snowball, o algoritmo de steeming pode ser traduzido para C, Java, ou outras linguagens.
Gabriel Jose da Silva A quarta aula de PNL foi sobre o processo de normalização de texto usando algoritmos de Steeming, algoritmos em que as palavras são reduzidas a sua raiz. O primeiro algoritmo de steeming foi desenvolvido por Julie Beth Lovins, que era composto por 249 sufixos, 29 condições e 34 regras de transformação e necessitando de apenas duas etapas para obter a resposta final. Na primeira etapa é feita a identificação do sufixo da palavra que satisfaça alguma condição. Na segunda etapa ocorrem transformações na palavra segundo uma das 34 regras. O mais famoso algoritmo de steeming é o desenvolvido por Martin. F Porter, que é similar ao de Lovins. Ao todo são cinco etapas que visão a remoção dos sufixos mais comuns baseando-se em uma métrica relacionada ao número de vogais-consoantes presentes na palavra. Esse algoritmo também define um tamanho mínimo para a raiz, impedindo que ocorra overstemming. Como os steemers de Lovins e de Porter foram desenvolvidos para a língua inglesa, e existem grandes variações de sufixos entre línguas, é necessário que para cada idioma exista um steemmer capaz de radicalizar as palavras. Assim, para o português foi desenvolvido em 2001pela Dr. Viviane Moreira Orengo um steematizador para a língua portuguesa, possuindo 119 regras distribuídas por oito passos além de uma lista de exclusões (pois no português existem muitas variações para uma determinada raiz). Snowball é uma linguagem de processamento de pequenas _strings_ com o intuito de obter a raiz das palavras. Assim, podemos escrever o algoritimo de Porter usando Snowball. Podemos utilizar a biblioteca NLTK em python para radicalizar as palavras. Assim, com simples instruções podemos obter a radicalização de um corpus.
Victor Arruda Ganciar _Stemming_ Em textos da língua portuguesa temos diferentes palavras que variam em gênero, número e grau, além de inúmeros tempos verbais distintos. Chama-se de normalização o processo de reduzir, simplificar ou radicalizar tais palavras e para isso existem duas técnicas mais importantes: Stemming e Lemmatization. Stemming é um processo de heurística que corta as extremidades das palavras a um radical em comum e pode ser representado por um conjunto de regras que dependem da linguagem. Existem dois principais algoritmos para a língua inglesa: Lovins e Porter. Os dois removem os finais das palavras, o primeiro foi pioneiro e influenciador de muitos _stemmers,_ mas o segundo é mais completo e mais simples, além de ser o mais utilizado atualmente. Para a língua portuguesa, o algoritmo de Orengo foi a primeira versão amplamente divulgada de um algoritmo de radicalização de palavras. Poderia ser utilizada uma base de dados (dicionário) para comparar as palavras reduzidas, entretanto esse procedimento requer maior tempo de processamento computacional e o esforço investido poderia não valer a pena. O algoritmo de Stemming não deveria permitir a perda de muita informação, como nos casos: poder -> po; ver -> ve; chamo -> ch; national -> na. Existem duas medidas de desempenho: Overstemming, que consiste na remoção não só do sufixo, mas também uma parte do radical; Understemming que consiste na não remoção do sufixo ou este é removido parcialmente. Snowball Snowball é um framework utilizado para desenvolvimento de algoritmos de stemming utilizados em Information Retrieving. O compilador do Snowball traduz um script para outra linguagem, C, C, Python, Java e Javascript são exemplos de linguagens suportadas.
Gustavo Zanfelice Dib Normalização de texto: Stemming: Reduzir uma palavra a sua raiz, abstração de gênero, plural, aumentativo,etc. Esta raiz em questão pode não ter significado. Algoritmo de Lovins: 2 etapas: Primeiro procura o maior sufixo contido na palavra, verifica uma condição e o remove. Segundo, verifica duplicata de uma lista de caracteres e os remove, ou se contém algum sufixo dentre os predefinidos e os troca por outros. Antecessor de muitos outros algoritmos, Porter, Oregon... (Variações específicas para cada idioma). Algoritmo mais utilizado atualmente é o algoritmo de Porter, por ser mais completo que o de Lovins, contendo 5 passos bem definidos e seguindo os mesmos princípios, tenta-se encontrar o maior sufixo eliminável. Para o português, existe o algoritmo de Orengo. Para quaisquer algoritmos anteriormente citados, existe a implementação já feita em Python. Nenhum motivo teórico para não eliminar prefixos. Lematização: Reduzir a palavra ao seu lema, palavra existente (utiliza dicionário). Por exemplo Grafo de co-ocorrência: Este grafo é composto de forma que os nós são as palavras contidas no texto e as arestas conectam vértices baseado na ocorrência das duas palavras em conjunto dentro do texto. As arestas então podem ser enumeradas baseado na quantidade de co-ocorrência entre os vértices em questão. Snowball: Snowball é uma maneira de processar strings projetada para criar algoritmos de Stemming. Um compilador de SnowBall traduz um script (em extensão .sbl) em um outro programa (ANSI C/Java). A idéia para a criação dessa linguagem foi interpretar expressões de maneira natural. Neste paradigma, os dados são confrontados com lematizadores de idiomas diferentes.
Thiago Bruini Cardoso Silva A quarta aula teve como foco a exploração de diferentes algoritmos de normalização que trabalham realizando a radicalização. O princípio desses algoritmos é utilizar uma heurística para podar sufixos de palavras, reduzindo-as à raiz (prefixo comum a todas as palavras). Isso permite que sejam eliminadas palavras diferentes que têm a mesma informação no fundo. O primeiro algoritmo a ser estudado em sala foi o algoritmo de Lovins. Em síntese, ele trabalha com a identificação de sufixos e aplicação de diversas regras. O algoritmo estudado é voltado para texto em inglês. Para utilizá-lo, é necessário identificar o maior sufixo presente na palavra em questão e na tabela de regras. Caso o sufixo respeite a respectiva regra, a poda é realizada. Para finalizar a forma final da palavra é determinada de acordo com outra tabela de regras. Foram realizados diferentes exercícios com o intuito de perceber a complexidade do algoritmos e o conhecimento de linguística necessário para criação de um bom algoritmo de stemming. O segundo algoritmo a ser estudado em sala foi o algoritmo de Porter. Assim como o algoritmo de Lovins, o algoritmo de Porter também trabalha com lista de sufixos e regras associados a eles. Devido à sua eficiência, esse algoritmo é o mais utilizado em língua inglesa atualmente. Como curiosidade, é relevante saber que Porter não era cientista e sim um bibliotecário, desenvolvendo esse algoritmo para organização de acervos de livros. Snowball é uma linguagem de programação com foco na criação de algoritmos de stemming para processamento de texto e recuperação de informação.
Caique de Camargo Aula do dia 13 de junho de 2019 com o tema normalização de texto. O primeiro tópico abordado foi sobre stemming, com uma breve revisão da aula passada. Stemming nada mais é do que o processo de radicalizar a palavra, ou colocá-la na sua forma radical, reduzindo-a a stems (tronco da palavra). Existem diferentes tipos de algoritmos, sendo a maioria voltado para o inglês. Julie Beth Lovins criou o algoritmo que veio a ser o pioneiro na área e o grande influenciador dos demais. O algoritmo é composto por 294 sufixos, 29 condições e 34 regras de transformação, sendo extremamente rápido em apenas duas etapas. As regras são aplicas para transformar o final das palavras, independente de seu sufixo ter sido removido ou não. Foi realizada uma atividade prática com o intuito de desenvolver o entendimento do algoritmo, rodando-o para algumas palavras. Em 1980, Martin Porter desenvolveu um algoritmo que é mais simples e mais eficaz, que foi inicialmente publicado como um relatório final sobre recuperação de informação, é ainda hoje um dos algoritmos mais utilizados na área. Similar com o de Lovins, cada palavra é casada com o maior sufixo possível, que será removido da palavra, sendo que no final a raiz deve sempre ter uma vogal. Viviane Moreira Orengo, juntamente com Christian Huyk, publicaram em 2001, um algoritmo de Stemming voltado para a língua portuguesa, sendo o primeiro amplamente divulgado, constituído de 199 regras em 8 passos e com uma lista de exceções; Em python a biblioteca NLTK traz boa parte desses algoritmos já implementados, podendo ser facilmente utilizados. Foram realizados testes e comparações entre os algoritmos. Algumas observações: podem ser usados dicionários para comparação de palavras, mas o esforço a mais pode não valer a pena; podem ser eliminados não apenas sufixos, mas prefixos também. Stemming passou a ser amplamente utilizado na literatura depois da década de 80. Podem acontecer problemas como o Overstemming, quando se perde informação, ou o Understemming, quando sobram informações, como quando o sufixo não é removido totalmente. Foi mostrada uma aplicação utilizando redes de grafos de palavras ou de co-ocorrencia.
Matheus Miranda Teles Na língua portuguesa existem diferentes flexões para palavras, como gênero, número e grau, além de inúmeros tempos verbais. e para melhor análise de um texto, a normalização de palavra é uma prática comum, que pode ser entendida como a redução, simplificação ou radicalização de palavras. A diferença entre o stemming e o lemmatization é que o primeiro reduz cada palavra para uma parte dela, já o segundo busca transfomá-la numa forma básica. Existem diferentes algorimos para o stemming, um deles é o de Lovins. Ele é composto de 294 sufixos, 29 condições e 34 regras de transformação. O algoritmo se da em duas etapas, primeiro remove=se o maior sufixo, depois são aplicadas regras de transformação para se chegar no resultado. Outro exemplo de algoritmo é o de Porter, este sendo mais completo que o de Lovins, e é o mais usado atualmente. O algoritmo consiste em 5 passos bem definidos e usa um método similar ao de Lovins, onde cada palavra é comparada sequencialmente com seu maior sufixo possível. Existem também algoritmos para a língua portuguesa, como o Orengo. Este é contituido de 199 regras, 8 passos e casos de excessão, um deles pode, por exemplo, se observa no sufixo 'tivo', onde é retirado na palavra contraceptivo, porém não deve ser na palavra relativo. Para as normalizações poderia ser utilizado uma base de dados para comparar as palavras reduzidas, um dicionário, entretanto, isso iria requerir maior tempo de processaento, e não valeria o tempo investido. Existe também a consideração que algumas palavras compartilham prefixs que poderiam ser eliminados tal qual os sufixos, tais quais nas palavras: arquidique, protótipo, contradizer e ultraleve. Algumas vezes o stemming pode levar a perda de informação, o que não deveria ocorrer, como se reduzirmos a palavra "Poder" a "Po" ou "National" a "Na", nisso surgem duas medidas, o Overstemming e o Understemming, que significam respectivamente, quando é removido não só o sufixo mas também uma parte do radical da palavra, e quando o sufixo não é removido ou somente parcialmente.
Lucas Vitalino Severo Pais Nesta aula vimos uma introdução a uma técnica de normalização de texto chamadda stemming. Stemming é uma técnica de normalização de texto para extrair os radicais de uma palavra dentre suas diversas variações. Por exemplo em português algumas palavras como substantivos podem ser flexionadas em gênero, número e grau. Ou então verbos que mudam de acordo com o tempo verbal e plural. Por exemplo o verbo "fazer", ele pode assumir uma das seguintes formas: faz, fazem, fizeram, farão, feito, fará, fizera, fizesse, fiz entre outros, porém todas essas formas devem ter um mesmo radical que contém um significado que é a palavra 'fazer'. Algoritmos de stemming funcionam não identificando um radical comundo de um dicionário real obtendo assim um radical real mas sim truncando as palavras seguindo algumas regras com o intuito de obter um radical. No exemplo citado passado, todas essas variações de 'fazer' poderiam ser reduzidos para a palavra 'faz' ou 'fez' dependendo das regras de substituição e corte que seu algoritmo possui. Esses algoritmos são específicos para uma determinada língua. A maioria dos algoritmos de stemming existentes são para o inglês mas existem adaptações dos algoritmos do inglês para outras línguas. Nesta aula foi visto dois algoritmos de normalização de texto por stemming, o algoritmos Lovins stemmer e o algoritmo Porter stemmer. O algoritmos de Lovins foi o pioneiro e o grande influenciador dos outros. Ele possui 294 sufixos, 29 condições e 34 regras de transformação. Essas regras são aplicadas em apenas duas etapas. Além do algoritmo de Lovins vimos o algoritmo de Porter que é mais simples e mais completo que o algoritmo de Lovins, e é o mais utilizado nos dias de hoje. Ele possui 5 passos bem definidos e é similar ao algoritmo de Lovins pois cada palavra é comparada sequencialmente com o maior sufixo possível, caso o sufixo case, remova-o da palavra.
Lucas Monteiro de Oliveira Aula 04 – Normalização de texto: Stemming Stemming consiste em reduzir a palavra para que a mesma fique normalizada em relação às suas demais variações gramaticais. Dentre os algoritmos de Stemming mais famosos estão os de Lovins e o de Porter, ambos buscam o mesmo objetivo, Stemming, apesar de produzirem resultados um pouco diferentes. O algoritmo de Lovins funciona através da aplicação de algumas regras de redução e transformação, são 294 sufixos mapeados que podem ser identificados, além disso, existem outras 29 condições que devem ser respeitadas para que o processo funcione bem. Após este primeiro passo, podem ser aplicadas algumas das 34 regras de transformação final dependendo do resultado obtido da primeira fase. Alguns anos após a publicação do algoritmo de Lovins, Porter publicou o seu, que é mais completo e simples se comparado com o de Julie Lovins. No algoritmo de Porter existem 5 passos, no primeiro, de uma maneira semelhante ao que é executado no algoritmo de Lovins, regras de operação são utilizadas em validações para que cada palavra seja comparada sequencialmente com o maior sufixo possível. Foi somente em 2001 que a primeira versão amplamente divulgada de um algoritmo de Stemming para a língua portuguesa foi publicada. O algoritmo chama-se Orengo e é formado por um conjunto de 199 regras distribuídas em 8 passos, além disso, como complemento, existe uma lista de exceções que acompanha o mesmo. Ao compararmos textos com e sem radicalização, as vantagens da técnica ficam muito evidentes. Dentre eles, algum foram estudados em sala de aula como o menor tempo de processamento computacional se comparado com o a busca em dicionário, e a identificação de variações de um mesmo sentido semântico em aplicações diferentes.
Mayza Cristina da Silva Resumo Aula 04 – Normalização de Texto Normalização de palavras As palavras em diferentes idiomas possuem flexibilizações em gênero, numero e degrau, além dos diferentes tempos verbais. A normalização de palavras pode ser entendida como a redução ou radicalização de palavras. Para isto temos duas importantes maneiras de normalização: Stemming e lemmatization. O processo de stemming consiste em reduzir a palavra à sua raiz (sem levar em conta a classe gramatical) amig : amigo, amiga, amigão gat : gato, gata, gatos, gatas Stemming geralmente refere-se a um processo de heurística que corta as extremidades das palavras inclui frequentemente a remoção de afixos derivacionais. Pode ser representado por um conjunto de regras que dependem da linguagem. Não se trata da raiz da palavra (da forma linguistica) A palavra pode não ter significado (alguns autores denominam isto de radical da palavra) Lemmatization (a ação de reduzir em Lemmas) Lemma: Forma básica da palavra Lemmatizer: O artefato (programa) Algorithm for lemmatization Existem muitos outros tipos de algoritmos, principalmente alguns que se aplicam ao idioma inglês. O Algoritmo de Lovins Lovins, Julie Beth. (1968) Composto por 294 sufixos, 29 condições e 34 regras de transformação. O processamento é rápido: apenas 2 etapas. 1. Procurar pelo sufixo de maior tamanho na palavra e que satisfaz a(s) condições ? remover 2. As regras são aplicadas para transformar o final. Aplicadas se um sufixo é removido ou não na primeira etapa. Após este estudo teórico o professor aplicou um teste e pudemos realizar esta normalização em algumas palavras aplicando o algoritmo anterior e entendendo quais os melhores casos Algoritmo de Martin F. Porter O algoritmo é mais completo e mais “simples” do que Julie Lovins O stemmer mais utilizado atualmente.
Brian Alves Andreossi Processo de Stemming \- Importância: Eventualmente, alguns projetos pedem que seja checado mais o radical (pois deve ser desejo casar palavras em diversos gêneros, número ou grau). \- Stemming (a ação de reduzir em stems) \- Stem: Parte de uma palavra \- Stermmer: O programa \- Lemmatizatiom (a ação de reduzir em Lemmas) \- Lemma: Forma básica da palavra \- Lemmatizer: O artefato (programa) \- Mais custoso, pois usa dicionário Algoritmo de Lovins \- 1 → Procurar pelo sufixo de maior tamanho na palavra e que satisfaz as condições (294 sufixos). \- 2 → As regras são aplicadas para transformar o final. (34 regras). Algoritmo de Porter \- Muito utilizado no inglês. \- Mais completo e simples do que Algoritmo de Julie. \- Stemmer mais utilizado atualmente. Algoritmo de Stemming para português \- 2001: Orengo \- Primeira versão amplamente divulgada de um algoritmo de radicalização para português. Considerações não discutidas \- Uso de uma base de dados. \- Requer tempo \- Por que não eliminar prefixos? \- Arquiduque \- Protótipo \- Contradizer \- Ultraleve \- Existe outras \- Perda de detalhe \- Poder → Po \- Ver → Ve \- Chamo → Ch \- National → Na Deve-se tomar cuidado com: \- Overstemming \- Understemming O que é snowball (stemming)? Snowball é uma pequena linguagem de programação para processamento de texto, desenhada para criar algoritmos de stemming, para uso em recuperação de informação. O compilador de snowball traduz um script de snowball em alguma outra linguagem, entre elas, C, C, Go, Java, Javascript, Object Pascal, Python and Rust.


Número de resumos processados: 68.

Observação:


Arquivo gerado por um programa.