User Tools

Site Tools


spln2016:diario5

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
spln2016:diario5 [2016/03/19 15:23] ambsspln2016:diario5 [2016/03/19 15:30] (current) ambs
Line 22: Line 22:
 === Exercício: nlgrep === === Exercício: nlgrep ===
  
- exercício+Permitir usar expressões com informação morfológica
-    nlgrep (natural language grep): + 
-    [restrição 1][restrição 2] dar um padrão constituído por duas palavras+   nlgrep rad=ter CAT=v,T=ppa 
 + 
 + 
 +Implementação
  
       #!usr/bin/perl       #!usr/bin/perl
Line 34: Line 37:
       use Memoize;       use Memoize;
       use Data::Dumper;       use Data::Dumper;
 +      
       #cada padrão será um par chave:valor       #cada padrão será um par chave:valor
       my (@patterns);       my (@patterns);
       my $dic = Lingua::Jspell->new("pt");       my $dic = Lingua::Jspell->new("pt");
- +       
 +      
       if(!@ARGV){       if(!@ARGV){
         die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre         die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre
       }        } 
 +      
       @patterns = map{argparse($_)} @ARGV;       @patterns = map{argparse($_)} @ARGV;
 +      
       print Dumper(\@patterns); #para 'debug'       print Dumper(\@patterns); #para 'debug'
 +      
       @ARGV = ();       @ARGV = ();
 +      
       while (<>) {       while (<>) {
         # @l = $dic->fea($word,{...att. value pair restriction})         # @l = $dic->fea($word,{...att. value pair restriction})
 +      
         while (/\w+(-\w+)*|[.,;:!?]/g) {         while (/\w+(-\w+)*|[.,;:!?]/g) {
           my $w = $&;           my $w = $&;
Line 61: Line 64:
         }         }
       }       }
 +      
       sub argparse {       sub argparse {
         my ($a) = @_;         my ($a) = @_;
Line 68: Line 71:
       }       }
  
-      .............+Exemplo: 
       perl ex1.pl rad:ter cat:v,t:pp       perl ex1.pl rad:ter cat:v,t:pp
 +
 +Resultado
 +
       $VAR1 = [       $VAR1 = [
                 {                 {
Line 80: Line 87:
               ];               ];
  
--------------------------------------------------------------------------------- 
  
-ujspell -J+=== Implementação Completa (nlgrep) ===
  
-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       #!usr/bin/perl
 +      
       use warnings;       use warnings;
       use strict;       use strict;
Line 101: Line 99:
       use Memoize;       use Memoize;
       use Data::Dumper;       use Data::Dumper;
 +      
       #cada padrão será um par chave:valor       #cada padrão será um par chave:valor
       my (@patterns);       my (@patterns);
       my $dic = Lingua::Jspell->new("pt");       my $dic = Lingua::Jspell->new("pt");
- +       
 +      
       if(!@ARGV){       if(!@ARGV){
         die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre         die "No arguments provided\n"; # sem o '\n' diz em que linha é que o die ocorre
       }        } 
 +      
       @patterns = map{argparse($_)} @ARGV;       @patterns = map{argparse($_)} @ARGV;
       my $len = @patterns; #comprimento da lista @patterns       my $len = @patterns; #comprimento da lista @patterns
 +      
       print Dumper(\@patterns); #para 'debug'       print Dumper(\@patterns); #para 'debug'
 +      
       @ARGV = ();       @ARGV = ();
 +      
       while (<>) {       while (<>) {
         my @window = map{""} @patterns;         my @window = map{""} @patterns;
         # my @window = ("") x @len; # ("") -> lista vazia vezes o tamanho de patterns         # my @window = ("") x @len; # ("") -> lista vazia vezes o tamanho de patterns
 +      
         while (/\w+(-\w+)*|[.,;:!?]/g) {         while (/\w+(-\w+)*|[.,;:!?]/g) {
           my $w = $&;           my $w = $&;
Line 133: Line 131:
         }         }
       }       }
- +       
 +      
       sub argparse {       sub argparse {
         my ($a) = @_;         my ($a) = @_;
Line 140: Line 138:
         return \%f; #retorna um apontador para %f         return \%f; #retorna um apontador para %f
       }       }
 +      
       sub multi_word_match {       sub multi_word_match {
         my ($window) = @_;         my ($window) = @_;
Line 150: Line 148:
         return 1;         return 1;
       }       }
- +       
- +       
- +Com input 
-      __END__ +      
- +
-      for my $elem(@ARGV){ +
-        #calcular argumentos mais elaborados. para cada argumento transformá-lo já em algo processado +
-        #calcular 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       eu tenho fome
       5 eu tenho fome       5 eu tenho fome
       eu tinha um gato       eu tinha um gato
       11 eu tinha um gato       11 eu tinha um gato
---------------------------------------------------------------------------------+      eu tenho passado bem
  
-perl ex1.pl rad:ter CAT:v,T:ppa < file.txt +e executando 
-$VAR1 = [+ 
 +      perl ex1.pl rad:ter CAT:v,T:ppa < file.txt 
 + 
 +obtem-se 
 + 
 +     $VAR1 = [
           {           {
             'rad' => 'ter'             'rad' => 'ter'
Line 191: Line 173:
           }           }
         ];         ];
-(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 +    (5 tenho passadoEu tenho passado bem.
-ubuntu: deb (&pray) +
-linux: configure & make & make install +
-windows: ??+
  
---------------------------------------------------------------------------------+=== TPC Páscoa ===
  
 + * Instalar freeling 3.1
 +   * Mac: brew install freeling
 +   * Linux: ver pacotes em http://nlp.lsi.upc.edu/freeling/ ou source
 +   * Windows: ver pacotes em http://nlp.lsi.upc.edu/freeling/
 + * Instalar Lingua::FreeLing3
 +   * Com cpan 
 + * instalar VISL.CG3/CG3
 +   * mac: brew vislcg3
 +   * Linux: procurar pacotes
 +   * Windows: http://beta.visl.sdu.dk/cg3/chunked/installation.html
  
  
spln2016/diario5.1458397426.txt.gz · Last modified: 2016/03/19 15:23 by ambs