User Tools

Site Tools


spln2016:diario4

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  
spln2016/diario4.1457542013.txt.gz · Last modified: 2016/03/09 17:46 by ambs