Corpus lingsticos proceso de elaboracin e extraccin automtica
Corpus lingüísticos: proceso de elaboración e extracción automática de información María Paula Santalla del Río Pablo Gamallo Otero Elaboración do material informático (CD LIVE): Susana Sotelo Docío
Extracção automática de informação a partir de corpus Pablo Gamallo Otero http: //gramatica. usc. es/~gamallo/
Bibliografia Levi Lúcio, Vasco Amaral (2001), Programação em PERL, FCA Editora de Informática. Hammond, Michael (2003), Programming for linguistics: Perl for language researchers, Blackwell Publishing. Tanguy, Ludovic (2007), Perl pour les linguistes, Hermès Lavoisier. http: //perl. linguistes. free. fr/. Tony Berber Sardinha (2004), Lingüística de Corpus, Editora Manole, Brasil. M. Baroni (To appear), “Distributions in text”. In Anke Lüdeling and Merja Kytö (eds. ), Corpus linguistics: An international handbook, Berlin: Mouton de Gruyter. pode-se descarregar em: http: //gramatica. usc. es/~gamallo/aulas/lingcomputacional/biblio/Baroni_distributions. pdf TUTORIAIS ON LINE (em espanhol): http: //www. geocities. com/Silicon. Valley/Station/8266/perl/index. html http: //kataix. umag. cl/~mmarin/topinf/perl. html
PLANO DO CURSO Noções básicas corpus e extracção de frequências de palavras (tokens e formas) lei de zipf concordâncias Iniciação à programação em PERL ler o texto dum ficheiro processar o texto lido escrever os resultados do processamento
Vamos programar um pouco A linguagem PERL = Practical Extraction and Report Language. Primeira versão em 1987, Larry Wall.
Objectivos • ler o texto dum ficheiro (ou da consola) linha a linha. • processar o texto lido: tokenizer (quebrar o texto em palavras). contagem de frequências: ocorrências de palavras, de formas, de lemas, etc. • escrever num ficheiro (ou da consola) os resultados.
Estrutura do Programa “nome. perl” • O script escreve na consola: “Cómo te chamas? ” • O script lê o nome escrito polo usuário • O script escreve na consola o nome que foi lido.
Como tornar executável o script “nome. perl” ? chmod +x nome. perl Atribuimos ao ficheiro “nome. perl” a propriedade: ser executável
Estrutura do Programa “nome. perl” • print escreve texto (na consola, num ficheiro. . . ) • <STDIN> lê um conjunto de caracteres introduzidos através da consola (por exemplo, através do teclado). • $x=<STDIN> lê um conjunto de caracteres introzidos através do teminal e os coloca na variável $x. • chop $x corta o carácter de nova linha (n) que se encontra no valor de $x.
Que é um programa (ou script)? • Um programa é um conjunto de instruções (print, assignação, leitura, . . . ) • As instruções simples sempre acabam com o símbolo ‘; ’ (ponto e vírgula) • Quando executamos o programa, as instruções são executadas sequencialmente.
Tipos de entidades dum programa • escalares: números, cadeias de caracteres • instruções: simples: print, =, chop. . . complexas: if, while. . . • Descritores Input/Output: STDIN, STDOUT, arquivos de entrada, arq. de saída. . . • listas • tabelas (hashes)
Tipos de variáveis • escalares: $var • listas: @var • tabelas: %var
Estrutura do tokenizer • Lê linha a linha o texto de entrada. • Escreve noutro ficheiro (ou na consola) as palavras do texto de entrada. Cada palavra aparece numa linha.
Como executar o tokenizer? cat arquivo_entrada. txt |. /tokenizer. perl > arquivo_saída. txt
Instruções do tokenizer while ($linha = <STDIN>) { instrução 1; instrução 2; . . . } Lê uma as linhas do ficheiro, e cada linha é colocada na variável $linha. Após a leitura de uma linha, executa se o bloco de instruções (entre chaves). Isto é repetido até chegar á última linha do ficheiro
Instruções do tokenizer @pals = split (“ ”, $linha); Divide se a cadeia $linha cada vez que aparece um espaço em branco. As sucessivas divisões são colocadas na lista @pals. foreach $pal (@pals) { instrução 1; instrução 2. . . } Uma vez tomado um elemento da lista @pals e colocado na variável $pal, executam se as instruções do bloco. Isto é repetido com todos os elementos da lista.
Instruções iterativas foreach $var @lista { bloco } O bloco de instruções será executado um número de vezes correspondente ao número de elementos na lista, sendo que para cada iteração uma variável conterá o valor do elemento da lista. while (expressão) { bloco } O bloco será executado até que a expressão se torne falsa: while ($cont < 5) { print “$cont n”; $cont++; }
a instrução IF if (expressão) { bloco do if } else { bloco do else } Se a expressão é verdade, executam se as instruções contidas no bloco do if. Caso contrário, executa se o bloco de instruções do else. Expressões falsas: 1 > 2 ; 0 ; “”, 1 -1 Expressões verdadeiras: 1 < 2 ; os números excepto o 0; as strings excepto “”
Pattern Matching if ($line =~ m/Maria/) { print $line; } Se a subcadeia “Maria” se encontra dentro da cadeia $line, então afichamos a cadeia $line =~ s/, /; Se aparece o caracter “, ” na cadeia $line, então substituimos esse caracter pelos dois caracteres “ , ” (i. e. introduzimos um espaço antes da vírgula).
Estrutura de “contagem. perl” • Lê linha a linha o ficheiro tokenizado : • Realiza as contagens: conta as ocurrências de cada token (palavras e marcas), conta o número total de ocorrências de palavras, conta as ocurrências da cadeia “relac”, conta o número total de formas de palavras. • Escreve num ficheiro (ou na consola) os resultados das contagens.
Instruções de contagem. perl while ($token = <STDIN>) { $contar{$token}++; } Lê se linha a linha o arquivo e construe se uma tabela: %contar. Cada elemento duma tabela é uma estrutura “chave > valor”. Cada chave da tabela é um token. O valor para cada chave é o número de vezes que o token é lido: $contar{“livro”} = 2 $contar{“Maria”} = 3 $contar{“, ”} = 8
Listas e Tabelas @notas = (“pedro”, 5, “maria”, 8) $notas[0] $notas[1] $notas[2] $notas[3] = = “pedro” 5 “maria” 8 %notas = (“pedro” => 5, “maria” => 8) $notas{“pedro”} = 5 $notas{“maria”} = 8
Instruções de contagem. perl foreach $token. Diff (keys %contar) { $contar. Tokens. Diff++; print "$token. Difft$contar{$token. Diff}n" } Iteração: Percorremos a lista de chaves (keys) do hash %contar. Cada elemento é colocado na variável $token. Diff. Bloco de Instrucções: - contamos os tokens diferentes (formas de palavras) - escrevemos o token (chave de %contar) e a frequência do token (valor de %contar)
- Slides: 23