====== jSpell ====== {{http://natura.di.uminho.pt/~ambs/jspell.png}} O Jspell é um analisador morfológico derivado do corrector ortográfico ispell. (jspell = ispell++). O seu principal desenvolvimento tem sido com vista à sua utilização para a língua portuguesa. No entanto, existem dicionários para outras línguas. ===== Download ===== O método canónico para instalação do Jspell é a instalação do módulo Perl [[https://metacpan.org/release/Lingua-Jspell|Lingua::Jspell]]. Em sistemas Unix: sudo cpan Lingua::Jspell Em Windows, recomenda-se a instalação do [[http://strawberryperl.com/|Strawberry Perl]] e instalação do módulo na linha de comando com cpan Lingua::Jspell A instalação de dicionários é feita com o comando jspell-installdic pt (precedido de sudo nos sistemas Unix) ==== Versões antigas ==== * [[http://natura.di.uminho.pt/download/sources/Jspell|Código fonte do jspell]] * [[http://natura.di.uminho.pt/download/Windows/jspell-1.2.0-win-0.0.1.zip|Binário Windows]] * [[http://natura.di.uminho.pt/download/sources/Dictionaries/jspell|Dicionário português]] * [[http://natura.di.uminho.pt/download/sources/Dictionaries/jspell|Dicionário inglês]] ===== Publicações ===== * José João Almeida and Alberto Simões (2007). Jspellando nas morfolimpíadas: Sobre a participação do Jspell nas morfolimpíadas. //In Diana Santos, editor, Avaliação conjunta: um novo paradigma no processamento computacional da língua portuguesa.// IST Press, 2007. * Alberto Manuel Simões and José João Almeida (2001). jspell.pm — um módulo de análise morfológica para uso em processamento de linguagem natural. //In Actas da Associação Portuguesa de Linguística, pages 485–495//. [[http://ambs.perl-hackers.net/publications/jspell.pm.pdf|PDF]] * José João Almeida e Ulisses Pinto (1995). Jspell -- um módulo para análise léxica genérica de linguagem natural. //In Actas do X Encontro da Associação Portuguesa de Linguística//. [[http://www.di.uminho.pt/~jj/pln/jspell1.ps.gz|PostScript]] ===== Algumas características ===== Os dicionários jspell: * são externos (pode haver vários...) * usam regras morfológicas que podem ser redefinidas [[jspell-aff]] Vários modos de funcionamento: * como biblioteca C (libjspell.so) * como biblioteca perl (Man 3 jspell) * como corrector ortográfico * como comando Unix (Man jspell) * como interface online: ([[http://natura.di.uminho.pt/webjspell|WebJspell]]) Dos seus dicionários são gerados: * dicionários ispell * dicionários aspell * dicionários winedt * dicionários para abiword * dicionários myspell ====== Jspell.pm by example ====== ===== Funções jspell_dict, setmode, featags ===== #!/usr/bin/perl -s use jspell; jspell_dict("port"); # select portuguese dictionary setmode("+flags"); # show feature "flag" in output while(<>){ chop; if($tag){ print join(" ",featags($_)). "\n"} else { print any2str([fea($_)],1) . "\n"} } ===== Funções flags, rad, fea, any2str ===== #!/usr/bin/perl use jspell; jspell_dict("port"); setmode("+flags"); while(<>){ chop; print "\n($_)----------\nflags="; for(flags($_)){print "$_!";} print "----------\npossíveis radicais="; for(rad($_)){print "$_!";} print "\n----------\nanálise"; print any2str([fea($_)],1). "\n"; print "----------\n"; } ===== Função nlgrep ===== #!/usr/bin/perl -s use jspell; jspell_dict("port"); %opt=(); $opt{sep}=$sep if $sep; $opt{max}=$max if $max; $opt{radtxt}=$radtxt if $radtxt; my @a= nlgrep({%opt},@ARGV); print join("\n======\n",@a),"\n"; ===== Função onethat ===== #!/usr/bin/perl use jspell; use Data::Dumper; jspell_dict("port"); print(any2str({onethat({CAT=>"np"},fea("Porto"))}, "compact")); print(any2str({onethat({CAT=>"np"},fea("Suíça"))}, "compact"));