====== 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 #!/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); Resultdo: $ perl jspell.pl $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 Contagem de lemas... #!/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 /^ $oco{$a}} keys %oco){ print "$rad\t$oco{$rad}\n" } sub radicais { my $word = shift; return $dic -> rad($word); } Resultado: $ perl jspell.pl | head o 121406 de 45603 do 44633 a 39908 que 24364 e 22731 um 17779 no 17707 ser 12245 em 11686