User Tools

Site Tools


spln2016:diario5

This is an old revision of the document!


SPLN

Diário de Bordo - Aula 5 - 2016-03-14

Sumário

  • Exercícios com Análise Morfológica

Link para submissão de TPCs: natura.di.uminho.pt/jjbin/spln-exe

Revisões da ultima aula: - Lingua::Jspell

  1. tempos compostos:

ex. tenho passado

  1. → 'tenho': rad = ter
  2. → 'passado': cat = v, tempo = participio passado

exercício:
  nlgrep (natural language grep):
  [restrição 1][restrição 2] dar um padrão constituído por duas palavras
    #!usr/bin/perl
    use warnings;
    use strict;
    use utf8::all;
    use Data::Dumper;
    use Lingua::Jspell;
    use Memoize;
    use Data::Dumper;
    #cada padrão será um par chave:valor
    my (@patterns);
    my $dic = Lingua::Jspell->new("pt");
    if(!@ARGV){
      die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre
    } 
    @patterns = map{argparse($_)} @ARGV;
    print Dumper(\@patterns); #para 'debug'
    @ARGV = ();
    while (<>) {
      # @l = $dic->fea($word,{...att. value pair restriction})
      while (/\w+(-\w+)*|[.,;:!?]/g) {
        my $w = $&;
        #calcular as features
        if($dic->fea($w, $patterns[0])){            
          print "$. $_"; #numero da linha
        }
      }
    }
    sub argparse {
      my ($a) = @_;
      my %f = split(/[:,]/, $a); # construção de lista com pares chave:valor
      return \%f; #retorna um apontador para %f
    }
    .............
    perl ex1.pl rad:ter cat:v,t:pp
    $VAR1 = [
              {
                'rad' => 'ter'
              },
              {
                'cat' => 'v',
                't' => 'pp'
              }
            ];

ujspell -J

International Jspell Version 1.90 tempo * tempo 0 :lex(tempo,[CAT=nc,G=m,N=s])

categoria * categoria 0 :lex(categoria,[CAT=nc,G=f,N=s])


    #!usr/bin/perl
    use warnings;
    use strict;
    use utf8::all;
    use Data::Dumper;
    use Lingua::Jspell;
    use Memoize;
    use Data::Dumper;
    #cada padrão será um par chave:valor
    my (@patterns);
    my $dic = Lingua::Jspell->new("pt");
    if(!@ARGV){
      die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre
    } 
    @patterns = map{argparse($_)} @ARGV;
    my $len = @patterns; #comprimento da lista @patterns
    print Dumper(\@patterns); #para 'debug'
    @ARGV = ();
    while (<>) {
      my @window = map{""} @patterns;
      # my @window = ("") x @len; # ("") -> lista vazia vezes o tamanho de patterns
      while (/\w+(-\w+)*|[.,;:!?]/g) {
        my $w = $&;
        push @window, $w;
        shift @window; # tirar um elemento
        my $line = $.;
        if(multi_word_match(\@window)) {
        
          print "($line @window) $_\n";
        }
      }
    }
    sub argparse {
      my ($a) = @_;
      my %f = split(/[:,]/, $a); # construção de lista com pares chave:valor
      return \%f; #retorna um apontador para %f
    }
    sub multi_word_match {
      my ($window) = @_;
      for my $i (0..$len-1) {
        if(!$dic->fea($window->[$i], $patterns[$i])) {
          return 0;
        }
      }
      return 1;
    }
    __END__
    for my $elem(@ARGV){
      #calcular argumentos mais elaborados. para cada argumento transformá-lo já em algo processado
      #calcular o padrão e guardar no array patterns
      #fazer parsing a cada argumento
      push(@patterns, argparse(@elem)); 
    }
    .............
    perl ex1.pl rad:ter cat:v,t:pp
    $VAR1 = [
              {
                'rad' => 'ter'
              },
              {
                'cat' => 'v',
                't' => 'pp'
              }
            ];
    eu tenho fome
    5 eu tenho fome
    eu tinha um gato
    11 eu tinha um gato

——————————————————————————–

perl ex1.pl rad:ter CAT:v,T:ppa < file.txt $VAR1 = [

        {
          'rad' => 'ter'
        },
        {
          'CAT' => 'v',
          'T' => 'ppa'
        }
      ];

(24 tenho passado) Eu tenho passado bem.

(3 tenho passado) Eu tenho passado bem.


TPC Páscoa: - instalar freeling 3.1

(mac: brew install freeling)

- instalar Lingua::FreeLing3 - instalar VISL.CG3/CG3

(mac: brew vislcg3)

- o que poderiamos fazer de util com coisas deste género

mac: homebrew ubuntu: deb (&pray) linux: configure & make & make install windows: ??


spln2016/diario5.1458397325.txt.gz · Last modified: 2016/03/19 15:22 by ambs