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.

Tony Berber Sardinha (2004), Lingüística de Corpus, Editora Manole, Brasil.

TUTORIAIS ON LINE (em espanhol):

http://glud.udistrital.edu.co/glud/manuales/Perl/http/evangelio_perl.html#quees

http://www.geocities.com/SiliconValley/Station/8266/perl/index.html

http://glud.udistrital.edu.co/glud/areas/doc/cursos/4_introduccion_perl/

http://kataix.umag.cl/~mmarin/topinf/perl.html

http://www.cicei.com/gsi/tutorial_perl/indice.htm
PLANO DO CURSO


Noções básicas

corpus e extracção

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
Noções básicas: corpus e extracção









Características dum corpus:
Deve estar formado por um conjunto de dados lingüísticos naturais (uso
oral ou/e escrito).
O conteúdo do corpus deve ser cuidadosamente escolhido segundo
certos critérios.
O corpus deve ser representativo duma língua ou variedade.
O corpus dever ser vasto para ser representativo.
O corpus deve ter como finalidade ser objecto de estudo linguístico.
Processos computacionais que se podem realizar num
corpus:
Anotação morfológica, sintática e semântica.
Extracção de informação
Noções básicas: corpus e extracção

Extracção de informação. Tipos de informação extraída:

Frequências de ocorrências de palavras, de tipos, de lemas, ...

Modelos estatísticos de desambiguação (tagger):
se uma palavra aparece no dicionário como NOUN e VERB e se encontra depois
dum DET no corpus, então deve ser etiquetada como NOUN.

Semelhança semântica entre palavras:
se duas palavras aparecem no corpus nos mesmos contextos sintácticos, então
devem ser sinómimos ou estar semanticamente relacionadas.

Equivalentes de tradução

Métodos de extracção:

Métodos supervisados
Métodos não supervisados

Noções básicas: Extracção de frequências

Contagem de palavras, ocorrências ou itens (tokens): cada
palavra conta como uma ocorrência, mesmo que seja repetida.

Contagem de palavras, formas ou tipos (types): conta-se o
número de palavras diferentes.

Contagem de lemas, ou lexemas (lemmas): conta-se o
número de temas diferentes (tema = palavra – morf. flexivos).

Contagem de Hapax Legomena: conta-se o número de
palavras que ocorrem apenas uma vez (isto é frequência 1) no
corpus.
Noções básicas: Extracção de frequências

Quais são as palavras mais frequentes num corpus
representativo dum domínio específico?
PALAVRA
FREQUÊNCIA
PALAVRA
FREQUÊNCIA
the
and
a
to
of
was
it
in
that
Tom
3332
2972
1775
1725
1440
1161
1027
906
877
679
la
que
en
el
y
a
los
las
del
se
Comisión
1.204.397
1.007.827
753.944
666.949
648.594
583.111
523.877
370.840
324.619
318.383
125.258
Palavras mais frequêntes de
“Tom Sawyer”
Palavras mais frequêntes de
Europarl (Parlamento Europeo)
Noções básicas: Extracção de frequências
69970 the
36410 of
28852 and
26149 to
23326 a
21341 in
10594 that
10102 is
9815 was
9542 he
9488 for
8760 it
7290 with
7251 as
6997 his
6742 on
6376 be
5377 at
5306 by
5178 i
5146 this
5131 had
4609 not
4394 are
4381 but
4370 from
4207 or
3942 have
3748 an
3619 they
3561 which
3297 one
3286 you
3284 were
3037 her
3001 all
2859 she
2725 there
2715 would
2670 their
2653 we
2619 him
2473 been
2439 has
2331 when
2252 who
2244 will
2216 more
2202 no
2199 if
2096 out
1985 so
1961 said
1908 what
1895 up
1858 its
1815 about
1791 into
1790 than
1789 them
1772 can
1747 only
1702 other
1635 new
1617 some
1599 time
1599 could
1573 these
1412 two
1400 may
1377 then
1362 do
1361 first
1345 any
1319 my
1314 now
1303 such
1290 like
1252 our
1237 over
1207 man
Palavras mais frequêntes do
corpus Brown (não específico).
Noções básicas: Extracção de frequências

Quantas ocorrências de palavras (tokens ou itens) tem
um corpus?





”Tom Sowyer” tem 71.370 ocurrências de palavras.
“El Quijote” tem 376.509.
“Brown” tem 1 milhão.
“EuroParl” tem 30 milhões 600 mil
Quantas palavras diferentes (tipos ou formas) tem um
corpus?


”Tom Sowyer” tem 8.018 palavras diferentes (8,9 tokens por tipo).
“El Quijote tem 38.552 (9.8 tokens por tipo).
(se consideramos os 71.000 primeiros tokens, extraem-se mais de 12.000 tipos)


“Brown” tem 55.734 (17 tokens por tipo).
“EuroParl” tem 159.211 (192 tokens por tipo).
Noções básicas: Extracção de frequências
Corpus Banco do Português:
Banda de
ocurrências
Formas
%
formas
Ocurrências %
ocurrências
frequência
média
1
186.275
39,65%
186.275
0,15%
1,0
2a9
160.228
34,11%
610.459
0,48%
3,8
10 a 99
82.174
17,49%
2.662.495
2,11%
32,4
100 a 999
31.065
6,61%
9.840.238
7,81%
316,8
1,83%
25.663.321
20,38%
2.930
1.323
0,28%
32.753.032
26,01%
24.756
78
0,02%
18.637.882
14,80%
238.947
16
0,00%
35.573.922
28,25%
2.223.370
469.745
100%
125.927.624
100%
268,1
1.000 a 9.999 8.586
10.000 a
99.999
100.000 a
999.999
1.000.000 en
diante
TOTAL
Noções básicas: Lei de Zipf
K = RxF

Existe uma relação constante, K, entre a frequência duma palavra,
F, e a sua posição ou ranking, R.

Se uma palavra está no ranking R e tem frequência F, a palavra
que se encontra no ranking 2R tende a ter uma frequência F/2

Hai poucas palavras mui frequêntes e muitas pouco frequêntes.
W
the
he
two
name
comes
F
3332
877
104
21
16
R
1
10
100
400
500
FxR
3332
8770
10400
8400
8000
W
group
friends
family
brushed
Applausive
F
13
10
8
4
1
R
600
800
1000
2000
8000
FxR
7800
8000
8000
8000
8000
Noções básicas: Concordâncias
A concordância é uma listagem das ocorrências duma forma específica,
dispostas de tal modo que a palavra de busca (aquela que se quere
investigar) aparece centralizada e acompanhada do seu contexto
original, isto é, das palavras que ocorrem junto com ela no corpus.
13 | acordo em nada prejudica os direitos, no
Reino da Dinamarca, dos nacionais dinamarqueses que res
14 | e algumas destas zonas na Bélgica, na Itália e no
Reino Unido estão situadas em regiões que têm já
15 | e Tournai. Itália: província de Nápoles. Reino Unido: região de Strathclyde, counties de Clevela
16 | veis; Considerando que algumas destas zonas no Reino Unido estão situadas em regiões que têm já um elev
17 | específica diz respeito às seguintes zonas de
Reino Unido: região de Strathclyde, condados de C
18 | grama especial», a apresentar à Comissão pelo Reino Unido. 2. O programa especial terá por fina
19 | izado a pedido dos governos da Irlanda e do
Reino Unido, assim como da Comissão, recomendou que a r
20 | entre a Comunidade Económica Europeia e o Reino da Noruega na sequência da adesão da República Hel
Noções básicas: Concordâncias

Palavra de busca (search word) ou Nódulo: palavra (ou grupo de
palavras) da qual o usuário tem interesse em obter uma concordância.

Janela (Window): distância máxima entre o nódulo e a primeira palavra
à esquerda (ou a ùltima à direita) dentro duma concordância.

Palavras de contexto (context words): palavras que estão próximas do
nódulo durante a busca (dentro da mesma janela). São opcionais, ou seja,
é possível fazer uma concordância sem especificá-las.
Vamos programar um pouco
A linguagem PERL
PERL =
Practical Extraction and Report Language.
Primeira versão em 1987, Larry Wall.
Objectivos
• ler o texto dum ficheiro (ou do terminal)
linha a linha.
• processar o texto lido:
tokenizer (quebrar o texto em palavras).
contagem de frequências: ocurrências de
palavras, de formas, de lemas, etc.
• escrever num ficheiro (ou no terminal)
os resultados.
Estrutura do Programa “nome.perl”
• O script escreve no terminal:
“Cómo te chamas?”
• O script lê o nome escrito pelo usuário
• O script escreve no terminal 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 (no terminal, num ficheiro...)
• <STDIN>
lê um conjunto de caracteres introduzidos através do terminal (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 no terminal)
as palavras do texto de entrada.
Cada palavra aparece numa linha.
Como executar o tokenizer?
cat arquivo_entrada.txt | ./tokenizer.perl
cat arquivo_entrada.txt | ./tokenizer.perl > arquivo_saída.txt
Instruções do tokenizer
while ($linha = <STDIN>) {
instrução1;
instrução2; ...
}
Lê uma a 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ção1;
instrução2...
}
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.
$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 no terminal) 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 $tokenDiff (keys %contar) {
$contarTokensDiff++;
print "$tokenDiff\t$contar{$tokenDiff}\n"
}
Iteração: Percorremos a lista de chaves (keys) do hash
%contar. Cada elemento é colocado na variável $tokenDiff.
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)
Download

Extracção automática de informação a partir de corpus