User Tools

Site Tools


spln2016:diario5

Differences

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

Link to this comparison view

Next revision
Previous revision
spln2016:diario5 [2016/03/19 15:22] – created ambsspln2016:diario5 [2016/03/19 15:30] (current) ambs
Line 7: Line 7:
   * Exercícios com Análise Morfológica   * Exercícios com Análise Morfológica
  
-Link para submissão de TPCs: +=== Notas ===
-natura.di.uminho.pt/jjbin/spln-exe+
  
 +  * Link para submissão de TPCs: http://natura.di.uminho.pt/jjbin/spln-exe
 +
 +=== Deteção Tempos Compostos ===
  
 Revisões da ultima aula: Revisões da ultima aula:
-- Lingua::Jspell 
- - tempos compostos: 
- ex. tenho passado 
- --> 'tenho': rad = ter 
- --> 'passado': cat = v, tempo = participio passado 
  
 +  * Lingua::Jspell
 +    * tempos compostos: //ex: tenho passado//
 +      --> 'tenho': rad = ter
 +      --> 'passado': cat = v, tempo = participio passado
 +
 +=== Exercício: nlgrep ===
 +
 +Permitir usar expressões com informação morfológica:
 +
 +   nlgrep rad=ter CAT=v,T=ppa
  
--------------------------------------------------------------------------------- 
  
- exercício: +Implementação
-    nlgrep (natural language grep): +
-    [restrição 1][restrição 2] dar um padrão constituído por duas palavras+
  
       #!usr/bin/perl       #!usr/bin/perl
Line 33: 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 60: Line 64:
         }         }
       }       }
 +      
       sub argparse {       sub argparse {
         my ($a) = @_;         my ($a) = @_;
Line 67: 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 79: 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 100: 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 132: Line 131:
         }         }
       }       }
- +       
 +      
       sub argparse {       sub argparse {
         my ($a) = @_;         my ($a) = @_;
Line 139: 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 149: 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 190: 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.1458397325.txt.gz · Last modified: 2016/03/19 15:22 by ambs