Aprimorando O Corretor Gramatical Cogroo William Daniel Colen De
Total Page:16
File Type:pdf, Size:1020Kb
Aprimorando o Corretor Gramatical CoGrOO William Daniel Colen de Moura Silva Dissertação apresentada ao Instituto de Matemática e Estatística da Universidade de São Paulo para obtenção do título de Mestre em Ciências Programa: Mestrado em Ciência da Computação Orientador: Prof. Dr. Marcelo Finger Durante o desenvolvimento deste trabalho o autor recebeu auxílio financeiro do CNPq São Paulo, 14 de janeiro 2013 Aprimorando o Corretor Gramatical CoGrOO Esta versão da dissertação contém as correções e alterações sugeridas pela Comissão Julgadora durante a defesa da versão original do trabalho, realizada em 06/03/2013. Uma cópia da versão original está disponível no Instituto de Matemática e Estatística da Universidade de São Paulo. Comissão Julgadora: • Prof. Dr. Marcelo Finger (orientador) - IME-USP • Prof. Dr. Alfredo Goldman Vel Lejbman - IME-USP • Prof. Dr. Marco Fernando Lopes - FFLCH-USP Agradecimentos Este trabalho é fruto de meses de pesquisa e dedicação, cuja conclusão dependeu, di- reta e indiretamente, da colaboração de várias pessoas e instituições, que merecem meus agradecimentos. Primeiramente, agradeço ao meu orientador, o Prof. Marcelo Finger, por acreditar no projeto, pelo seu empenho e por transmitir sua experiência prática e teórica que viabilizaram este trabalho. À Profa. Graça Nunes (ICMC-USP), por disponibilizar o corpus PROBI e NILC, usa- dos neste trabalho. Ao Prof. Marcos Lopes (FFLCH-USP) pelo apoio e por suas valiosas sugestões. Agradeço a todos que contribuíram diretamente com o desenvolvimento do CoGrOO 4.0.0, especialmente ao Arthur Branco Costa pelo pela implementação da nova API e verifi- cadores, pelo empenho no projeto Jspell.br, e pelas diversas discussões sobre particularidades da nossa gramática. À equipe de Laboratório de Programação Extrema 2010 (Eduardo Katayama, Wesley Seidel Carvalho, Robson Santos Sousa, Filipe Manoel Xavier Resina, Thiago Maciel Batista, Carlos Eduardo Dantas de Menezes), e ao Michel Oleynik, que construíram o portal CoGrOO Comunidade, que hoje é um valioso canal para a participação da comunidade de usuários no desenvolvimento do projeto. E claro, agradeço a todos os usuários que reportaram erros no portal, colaborando com a construção do corpus Comunidade. Ao Michel Oleynik, Wesley Seidel e Prof. Carlos Eduardo Dantas de Menezes, pelas diversas discussões sobre processamento de linguagem, software livre e correção gramatical, pelas revisões do texto e dicas. Agradeço as instituições CNPq, pelo financiamento deste projeto. À USP por disponibi- lizar os recursos necessários para me dedicar à dissertação, em especial ao Departamento de Ciência da Computação do IME e ao Centro de Competência em Software Livre (CCSL). Agradeço minha namorada, Giliane Rodrigues de Souza pelo incentivo e por toda sua paciência durante a minha ausência. Agradeço ainda todos meus familiares e amigos, que foram vitais durante todos estes anos de estudos. Finalmente, e mais importante, agradeço meus pais, Deoclécio de Moura Silva e Edmea Colen de Moura Silva, e Barbara, minha irmã, pelo apoio e dedicação durante toda a minha vida. Sem tal os quais nada teria sido possível. iii iv Resumo O CoGrOO é um corretor gramatical de código aberto em uso por milhares de usuários de uma popular suíte de escritório de código aberto. Ele é capaz de identificar erros como: colocação pronominal, concordância nominal, concordância sujeito-verbo, uso da crase, con- cordância nominal e verbal e outros erros comuns de escrita em Português do Brasil. Para tal, o CoGrOO realiza uma análise híbrida: inicialmente o texto é anotado usando técnicas estatísticas de Processamento de Linguagens Naturais e, em seguida, um sistema baseado em regras é responsável por identificar os possíveis erros gramaticais. O objetivo deste trabalho é reduzir a quantidade de omissões e intervenções indevidas e, ao mesmo tempo, aumentar a quantidade de verdadeiros positivos sem, entretanto, adicionar novas regras de detecção de erros. A última avaliação científica do corretor gramatical foi realizada em 2006 e, desde então, não foram realizados estudos detalhados quanto ao seu de- sempenho, apesar de o código do sistema ter passado por substancial evolução. Este trabalho contribuirá com uma detalhada avaliação dos anotadores estatísticos e os resultados serão comparados com o estado da arte. Uma vez que os anotadores do CoGrOO estão disponíveis como software livre, melhorias nesses módulos gerarão boas alternativas a sistemas propri- etários. Palavras-chave: PLN, Software Livre, Corretor Gramatical. v vi Abstract CoGrOO is an open source Brazilian Portuguese grammar checker currently used by thousands of users of a popular open source office suite. It is capable of identifying Brazilian Portuguese mistakes such as pronoun placement, noun agreement, subject-verb agreement, usage of the accent stress marker, subject-verb agreement, and other common errors of Brazilian Portuguese writing. To accomplish this, it performs a hybrid analysis; initially it annotates the text using statistical Natural Language Processing (NLP) techniques, and then a rule-based check is performed to identify possible grammar errors. The goal of this work is to reduce omissions and false alarms while improving true positives without adding new error rules. The last rigorous evaluation of the grammar checker was done in 2006 and since then there has been no detailed study on how it has been performing. This work will also contribute a detailed evaluation of low-level NLP modules and the results will be compared to state-of-the-art results. Since the low-level NLP modules are available as open source software, improvements on their performance will make them robust, free and ready-to-use alternatives for other systems. Keywords: NLP, FLOSS, Grammar Checker. vii viii Contents 1 Introduction1 1.1 Problem Statement................................2 1.2 Objectives.....................................3 1.3 Overview......................................3 2 Background5 2.1 Natural Language Processing..........................5 2.1.1 Statistical x Rule-Based Approach...................6 2.1.2 Corpora..................................6 2.1.3 Evaluation.................................7 2.2 NLP Frameworks and Annotators........................8 2.2.1 Brill....................................9 2.2.2 VLMM Tagger..............................9 2.2.3 Palavras..................................9 2.2.4 LX-Group................................. 10 2.2.5 Apache OpenNLP Framework...................... 10 2.3 Linguistic Resources............................... 12 2.3.1 Dictionaries................................ 12 2.3.2 Corpora.................................. 14 2.4 Proofreaders.................................... 16 2.4.1 ReGra................................... 16 2.4.2 LanguageTool............................... 17 2.4.3 LightProof................................. 17 3 CoGrOO - an Open Source Grammar Checker 19 3.1 Architecture.................................... 19 3.1.1 Sentence Boundary Detector....................... 20 3.1.2 Tokenizer................................. 21 3.1.3 Post Tokenizer.............................. 23 3.1.4 Part-of-Speech Tagger.......................... 23 3.1.5 Chunker.................................. 25 3.1.6 Shallow Parser.............................. 25 ix x CONTENTS 3.1.7 Grammar Error Detector......................... 26 3.2 Annotator Accuracy............................... 27 3.2.1 Discussion................................. 27 3.3 CoGrOO UIMA.................................. 28 3.4 CoGrOO Community............................... 28 4 A new grammar checker proposal 31 4.1 Apache OpenNLP 1.5.x.............................. 31 4.2 The New Software Architecture......................... 33 4.3 Experiments Plan................................. 36 4.4 Experiment Preparation............................. 37 4.4.1 Corpora preparation........................... 37 4.4.2 10-Fold Cross-Validation Tool...................... 38 4.4.3 Grammar Checker Evaluation Tool................... 39 5 Initial Evaluation 43 5.1 PROBI Corpus.................................. 43 5.2 Metro Corpus................................... 44 5.3 Bosque....................................... 44 5.4 CoGrOO Community Corpus.......................... 45 5.5 Conclusion..................................... 46 6 NLP Development and Evaluation 47 6.1 Code Changes................................... 47 6.1.1 Evaluation................................. 48 6.1.2 Conclusion................................. 50 6.2 Sentence Boundary Detector........................... 51 6.2.1 Default Contextual Predicates...................... 51 6.2.2 Additional Context Predicates...................... 53 6.2.3 Previous Work.............................. 56 6.2.4 Evaluating the Grammar Checker.................... 57 6.2.5 Conclusion................................. 61 6.3 Tokenizer..................................... 62 6.3.1 Default Contextual Predicates...................... 62 6.3.2 Previous Work.............................. 68 6.3.3 Evaluating the Grammar Checker.................... 69 6.3.4 Conclusion................................. 73 6.4 Name Finder................................... 74 6.4.1 Default Contextual Predicates...................... 74 6.4.2 Previous Work.............................. 77 6.4.3 Evaluating the Grammar Checker.................... 77 CONTENTS xi 6.4.4 Conclusion................................. 80 6.5 Contraction Finder................................ 81 6.5.1 Contextual Predicates.........................