Anzeige

PLN em Perl

Teacher, programmer um University of Minho
28. Sep 2012
Anzeige

Más contenido relacionado

Anzeige

Último(20)

PLN em Perl

  1. Processamento de Linguagem Natural em Perl Alberto Sim˜es o ambs@perl.pt Portuguese Perl Workshop 28 Setembro 2012 1 / 16
  2. Disclaimer / Aviso Ferramentas para a L´ ıngua Portuguesa do Projeto Natura 2 / 16
  3. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; 3 / 16
  4. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my $lang = langof ( $textstring ) ; ¦ ¥ 3 / 16
  5. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my $lang = langof ( $textstring ) ; ¦ ¥ § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my ( $lang , $prob ) = langof_file ( { 3 ’ a c t i v e −l a n g u a g e s ’ => [ ’ e s ’ , ’ p t ’ ] , 4 } , $filename ) ; ¦ ¥ 3 / 16
  6. Identifica¸˜o de L´ ca ıngua Lingua::Identify::CLD Implementa¸˜o em C++ do Chromium Compact Language ca Detector; C´digo C++ distribu´ diretamente no m´dulo Perl; o ıdo o Suporte para dezenas de l´ ınguas (incluindo pig-latin); 4 / 16
  7. Identifica¸˜o de L´ ca ıngua Lingua::Identify::CLD Implementa¸˜o em C++ do Chromium Compact Language ca Detector; C´digo C++ distribu´ diretamente no m´dulo Perl; o ıdo o Suporte para dezenas de l´ ınguas (incluindo pig-latin); § ¤ 1 u s e Lingua : : Identify : : CLD ; 2 3 my $cld = Lingua : : Identify : : CLD−>new ( isPlainText => 0 ) ; 4 my $lang = $cld−>identify ( ”Text ” ) ; ¦ ¥ 4 / 16
  8. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::PT::PLNbase Implementa¸˜o em Perl; ca Segmenta¸˜o e Atomiza¸˜o para a l´ ca ca ıngua Portuguesa; Alguns hacks para dar resultados menos maus noutras l´ ınguas; 5 / 16
  9. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::PT::PLNbase Implementa¸˜o em Perl; ca Segmenta¸˜o e Atomiza¸˜o para a l´ ca ca ıngua Portuguesa; Alguns hacks para dar resultados menos maus noutras l´ ınguas; § ¤ 1 u s e Lingua : : PT : : PLNbase ; 2 3 # o b t e r l i s t a de p a l a v r a s / t o k e n s 4 my @atomos = atomiza ( $texto ) ; 5 6 # obter frases 7 my @frases = frases ( $texto ) ; ¦ ¥ 5 / 16
  10. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c 6 / 16
  11. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c § ¤ 1 u s e FL3 ’ en ’ ; 2 3 $tokens = tokenizer−>tokenize ( $text ) ; 4 $sentences = splitter−> s p l i t ( $tokens ) ; ¦ ¥ 6 / 16
  12. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c § ¤ 1 u s e FL3 ’ en ’ ; 2 3 $tokens = tokenizer−>tokenize ( $text ) ; 4 $sentences = splitter−> s p l i t ( $tokens ) ; ¦ ¥ § ¤ 1 u s e FL3 ; 2 $atomos = tokenizer ( ’ p t ’)−>tokenize ( $texto ) ; 3 $frases = splitter ( ’ p t ’)−> s p l i t ( $atomos ) ; ¦ ¥ 6 / 16
  13. An´lise Morfol´gica a o Lingua::Jspell Interface ` biblioteca/aplica¸˜o C jspell; a ca Biblioteca e aplica¸˜o inclu´ no m´dulo Perl; ca ıda o Funciona com dicion´rios semelhantes aos do ispell; a Sem desambigua¸˜o; ca Dicion´rios para PT, ES, LA, EN, FR. a 7 / 16
  14. An´lise Morfol´gica a o Lingua::Jspell Interface ` biblioteca/aplica¸˜o C jspell; a ca Biblioteca e aplica¸˜o inclu´ no m´dulo Perl; ca ıda o Funciona com dicion´rios semelhantes aos do ispell; a Sem desambigua¸˜o; ca Dicion´rios para PT, ES, LA, EN, FR. a § ¤ 1 u s e Lingua : : Jspell ; 2 my $dict = Lingua : : Jspell−>new ( ”pt PT ” ) ; 3 4 my @radicals = $dict−>rad ( ”pode ” ) ; # p o d e r , p o d a r 5 6 my @analysis = $dict−>fea ( ” g a t i n h a ” ) ; 7 # { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t o ’ , . . 8 9 my @derivated = $dict−>der ( ”g a t o ” ) ; 10 # g a t a , g a t i n h o , g a t i n h a , g a t i n h o s , g a t a s , gato , g a t i n h a s , g . ¦ ¥ 7 / 16
  15. An´lise Morfol´gica a o Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.; ca co o E ainda outras funcionalidades (a ver. . . ) 8 / 16
  16. An´lise Morfol´gica a o Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.; ca co o E ainda outras funcionalidades (a ver. . . ) § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 7 # s e n t e n c e s ´ uma r e f e r ˆ n c i a p a r a uma l i s t a de o b j e t o s do e e 8 # t i p o ‘ ‘ L i n g u a : : F r e e L i n g 3 : : Word ’ ’ 9 my @analysis $sentences −>[0]−>analysis ; ¦ ¥ 8 / 16
  17. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); 9 / 16
  18. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>tag ( $sentences ) ; ¦ ¥ 9 / 16
  19. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>tag ( $sentences ) ; ¦ ¥ § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = relax−>tag ( $sentences ) ; ¦ ¥ 9 / 16
  20. Parsing de Dependˆncias e Lingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; 10 / 16
  21. Parsing de Dependˆncias e Lingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; § ¤ 1 u s e FL3 ’ e s ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>analyze ( $sentences ) ; 7 $sentences = chart−>parse ( $sentences ) ; ¦ ¥ 10 / 16
  22. NLGrep com Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o 11 / 16
  23. NLGrep com Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o $ fl3-nlgrep -l pt pg33056.txt ~ser A C A era grosso e baixo era excellente e detestavel e ´ pura e severa Sou exclusivo e pessoal era orgulhoso e fraco e ´ independente e superior era grande e vistosa era justo nem bonito e ´ trivial e chocho era restricta e mansa (...) 11 / 16
  24. NLGrep com Lingua::FreeLing3 § ¤ 1 open my $fh , ”<: u t f 8 ” , $filename ; 2 3 w h i l e (my $l = <$fh >) { 4 my ( $tokens , $frases ) ; 5 $tokens = tokenizer−>tokenize ( $l ) ; 6 $frases = splitter−> s p l i t ( $tokens ) ; 7 $frases = morph−>analyze ( $frases ) ; 8 $frases = hmm−>tag ( $frases ) ; 9 10 # para cada f r a s e 11 f o r my $frase ( @$frases ) { 12 my @words = $frase−>words ; 13 14 # janela deslizante 15 w h i l e ( @words > @query ) { 16 i f ( match ( @words , @query ) ) { 17 show_match ( @words [ 0 . . $ # query ] ) 18 } 19 s h i f t @words ; 20 } } } ¦ ¥ 12 / 16
  25. NLGrep com Lingua::FreeLing3 § ¤ 1 # v e r i f i c a p a l a v r a s c o n t r a e x p r e s s ˜o a 2 # de p e s q u i s a 3 s u b match { 4 f o r my $i ( 0 . . $#query ) { 5 # ignorar palavra se wildcard 6 n e x t i f $query −>[$i ] eq ” ” ; 7 8 # se procuramos p a l a v r a exacta 9 i f ( $query −>[$i ] =˜ / ˆ = ( . ∗ ) $ / ) { 10 r e t u r n 0 i f $1 ne $words −>[$i]−>lc_form ; 11 } 12 # s e p r o c u r a m o s p o r lema 13 e l s i f ( $query −>[$i ] =˜ / ˆ ˜ ( . ∗ ) $ / ) { 14 r e t u r n 0 i f $1 ne $words −>[$i]−>lemma ; 15 } 16 # c a s o c o n t r ´ r i o , e t i q u e t a POS a 17 else { 18 my $tag = $words −>[$i]−>tag ; 19 r e t u r n 0 i f $tag ! ˜ /ˆ $query −>[$i ] / i ; 20 } } 21 return 1; 22 } ¦ ¥ 13 / 16
  26. NLGrep com Lingua::FreeLing3 § ¤ 1 # imprime as p a l a v r a s . 2 s u b show_match { 3 p r i n t j o i n ( ” ” , map{ $_−>form } @_ ) , ”n ” 4 } ¦ ¥ 14 / 16
  27. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o 15 / 16
  28. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca 15 / 16
  29. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a 15 / 16
  30. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; 15 / 16
  31. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o 15 / 16
  32. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o Text::Ngram - c´lculo de ngrams (carateres); a 15 / 16
  33. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o Text::Ngram - c´lculo de ngrams (carateres); a Text::WordGrams - c´lculo de ngrams (palavras); a 15 / 16
  34. Obrigado! 16 / 16
Anzeige