This is an old revision of the document!
SPLN
Diário de Bordo - Aula 4 - 2016-03-07
Sumário
* Revisão do estado dos TPC * Analisador Morfológico
- Uso básico de Jspell
- Criação de scripts perl com recurso ao Jspell
Palavra:
- Categoria = {verbo,subjetivo,adjetivo…}
- Substantivo → género, número…
- Verbo → tempo…
- Adjetivo → grau, género…
Análise Morfológica: palavra → análise*
análise -> lema categoria
Jspell * Instalação do módulo:
cpan Lingua::Jspell
* Instalar dicionário português:
jspell-installdic pt
* Entrar no modo de fazer queries ao dicionário português (A flag `-d` serve para indicar o dicionário a ser utilizado):
ujspell -d pt
* Exemplos de utilização:
a >> * para >> * para 0 :lex(para, [CAT=prep], [], [], []), lex(parar, [CAT=v,T=inf,TR=_], [], [P=3,N=s,T=p], []), lex(parar, [CAT=v,T=inf,TR=_], [], [P=2,N=s,T=i], []), lex(parir, [CAT=v,T=inf,TR=_], [], [P=1,N=s,T=pc], []), lex(parir, [CAT=v,T=inf,TR=_], [], [P=3,N=s,T=pc], []), lex(parir, [CAT=v,T=inf,TR=_], [], [P=3,N=s,T=i], []) gere >> * gere 0 :lex(gerar, [CAT=v,T=inf,TR=t], [], [P=1_3,N=s,T=pc], []), lex(gerar, [CAT=v,T=inf,TR=t], [], [P=3,N=s,T=i], []), lex(gerir, [CAT=v,T=inf,TR=_], [], [P=3,N=s,T=p], []), lex(gerir, [CAT=v,T=inf,TR=_], [], [P=2,N=s,T=i], []) quatro >> * quatro 0 :lex(quatro, [CAT=card,N=p], [], [], [])
### Scripting
Começamos por criar um exemplo básico do uso da biblioteca Jspell dentro do perl.
$ cat jspell.pl
```perl
#!/usr/bin/env perl
use warnings; use strict;
use Lingua::Jspell; use Data::Dumper;
my $dic = Lingua::Jspell -> new("pt");
my @analysis = $dic -> fea("era");
use Data::Dumper; print Dumper(\@analysis);
```
$ perl jspell.pl
```perl $VAR1 = [
{ 'rad' => 'era', 'G' => 'f', 'CAT' => 'nc', 'N' => 's' }, { 'P' => '1', 'TR' => '_', 'rad' => 'ser', 'T' => 'pi', 'N' => 's', 'CAT' => 'v' }, { 'CAT' => 'v', 'N' => 's', 'TR' => '_', 'rad' => 'ser', 'P' => '3', 'T' => 'pi' } ];
```
Agora que já conseguimos dar uso à biblioteca, vamos agora usá-la para descobrir os radicais das palavras no dicionário português e contar a frequência de cada radical.
$ cat jspell2.pl
```perl #!/usr/bin/env perl
use warnings; use strict;
use Lingua::Jspell; use Data::Dumper;
use Memoize; memoize('radicais');
my $dic = Lingua::Jspell → new(“pt”);
my (%oco, $c);
while (<>) {
next if /^</;
while ( /\w+(-\w+)*/g ){ my $word = $&;
my @rad = radicais($word); for my $rad (@rad){ $oco{$rad}++; }
}
}
for my $rad (sort { $oco{$b} <=> $oco{$a}} keys %oco){
print "$rad\t$oco{$rad}\n"
}
sub radicais {
my $word = shift; return $dic -> rad($word);
} ```
$ perl jspell.pl | head
o 121406 de 45603 do 44633 a 39908 que 24364 e 22731 um 17779 no 17707 ser 12245 em 11686