Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais] ·  Efetividade ·  Linux in Brazil ·  Floripa  

Versão alternativa em Java para Corretor Ortográfico


“Aproveitando o post anterior sobre a versão em C para o corretor ortográfico do Peter Norvig, fiz uma versão em Java. No artigo original está apontada uma outra versão (já mandei um email para o Norvig pedindo referência). Fiz esta nova versão por 2 motivos: licença (esta é LGPL, ante o copyright), e a outra implementação tinha 372 linhas. Fiz uma com 87: não tão bonita/elegante como a versão em Python, mas nem tão grande como a versão em C. Ainda não medi a performance. Toda ajuda é bem-vinda!”


Enviado por Rael Cunha (rael·gcΘgmail·com) - referência (raelcunha.com).

Comentários dos leitores

Os comentários abaixo são responsabilidade de seus autores e não são revisados ou aprovados pelo BR-Linux. Consulte os Termos de uso para informações adicionais. Esta notícia foi arquivada, não será possível incluir novos comentários.
Comentário de nemesis
esforçado o rapaz!: blz, fez o dever de casa bonito. Tirou comentários, usou generics e for com iterators. Tá de parabéns.

Coube em 87 linhas, exceto claro, que fazer if foo: bar() em python não tem problema, pq fica conciso e legível. Botar tudo na mesma linha em java apenas deixa ela kilométrica e pedindo um irritante scroll lateral...

--
;; ((lambda (x) x) "Isto é um comentário e não será executado nunca")

Comentário de Douglas Augusto
Comparações em vão: Acho essas comparações de "em qual linguagem consigo código mais sucinto" fúteis. Porque na verdade a comparação se resume a "qual linguagem possui bibliotecas com ferramentas mais adequadas para implementar este algoritmo". Com bibliotecas de terceiros disponíveis aos montes por aí, a questão ser nativo vs não-nativo é pouco relevante.

Se pretendem algo mais conciso, então que computem também as linhas de código das bibliotecas utilizadas (pelos import, #include, etc.). Ou então que implementem o algoritmo usando apenas os comandos estritamente essenciais de cada linguagem.
Comentário de Peter Parker
Comparações: Douglas,

Minha implementação não foi para comparar com outras linguagens, e sim para comparar com a outra implementação em Java.

Até porque comparar com python/ruby seria covardia, pois estas são linguagens dinâmicas muito mais suscintas e elegantes. O alvo inicial de Java sempre foi ser um alternativa simples ao C/C++.

Ainda sobre usar coisas nativas: sim, eu só usei bibliotecas que acompanham a JVM por padrão.
--
Rael - http://www.raelcunha.com
Comentário de Peter Parker
Ei :): Nemesis, como eu comentei, é injusto comparar com python/ruby :D

O bom de fazer essa implementação aliás, foi justamente aprender melhor python. E claro, deixar lá o código para alguém que queira usá-lo/melhorá-lo.

--
Rael - http://www.raelcunha.com
Comentário de xebe
Parabens: Parabens cara, e se vc quisesse deixar ainda com menos linhas poderia deixar os metodos todos grudados igual o pessoal costuma fazer para "comparar" qtde de linhas, oq é um absurdo se fazer se tratando de linguagens com propositos diferentes.
Comentário de Douglas Augusto
"Ainda sobre usar coisas: "Ainda sobre usar coisas nativas: sim, eu só usei bibliotecas que acompanham a JVM por padrão."

Mas aí que está, você e o outro programador Java usaram bibliotecas (ainda que venham com a JVM) escritas na linguagem Java, não a própria linguagem em si. Idem para a versão em Python e também para a versão em C (o cara usou p.e. funções prontas que tratam strings), e provavelmente para todas as outras versões deste problema escritas nas diferentes linguagens.

É esta comparação que é sem sentido, de pouca valia. É parecido com o desafio de implementar um algoritmo de ordenação em C++ e para isso usar o sort da STL. O código final ficaria super reduzido, pois o trabalho não está efetivamente ali, mas em outros códigos.

Então, se quiser estabelecer alguma medida razoável para comparar implementações, há duas opções: 1) conte as linhas de código das bibliotecas/funções utilizadas (nativas ou não); ou 2) implemente usando apenas os comandos estritamente necessários da linguagem.
Comentário de nemesis
ao C++ talvez, embora tenha: ao C++ talvez, embora tenha continuamente trazido cada vez mais tralha daquele lado. Mas existem poucas coisas mais simples que C, cuja maior dificuldade é um entendimento sobre ponteiros e sua singular, mas prática, sintaxe para declará-los.

--
;; ((lambda (x) x) "Isto é um comentário e não será executado nunca")

Comentário de nemesis
observem, porém, que: observem, porém, que independente de todas as bibliotecas, frameworks e o que mais acessíveis a uma linguagem, você ainda precisa chamá-las. E chamadas em Java continuam mais custosas, tediosas e cheias de indireções do que em outras linguagens, inclusive C.

--
;; ((lambda (x) x) "Isto é um comentário e não será executado nunca")

Comentário de Peter Parker
Entendo: Douglas, entendi seu ponto de vista.
Mas a questão é que em Java, tirando os tipos primitivos, é tudo escrito em Java (inclusive Strings, listas, e classes para IO), já que devido ao desempenho razoável da JVM, não faz sentido ficar escrevendo bibliotecas em C, como é feito para PHP/Ruby/Python.
Portanto, pelo seu critério, nem OO eu poderia usar... faz mais sentido usar um set mínimo da linguagem nestes casos (eu optei pelo que vem na JRE).
No caso de C, então também nem IO o autor poderia usar. Se no atermos a um conjunto mínimo, realmente, strings não fazem parte do ansi C (ao menos quando eu usava muito, há alguns anos atrás).
--
Rael - http://www.raelcunha.com
Comentário de Peter Parker
57 Linhas: Não que alguém vá ainda ler isso... :)
Mas removi alguns lixos.
--
Rael - http://www.raelcunha.com
Comentário de nemesis
que pena, cheguei a pensar: que pena, cheguei a pensar que tinha removido o java! ;)

--
;; ((lambda (x) x) "Isto é um comentário e não será executado nunca")

Comentário de silveira
Claro que importa: Nossa que bobagem!
Programar em uma linguagem utilizando os recursos padrão da linguagem é perfeitamente aceitável, normal, razoável e natural. Se você vai programar em Java você usa os recursos que o uma implementação padrão de Java te fornece. Se você programar em Python, idem. O fato de isso facilitar sua vida não torna isso feio ou imoral, claro que não! Se fosse assim, eu não poderia usar o qsort do C.
Se você quer fazer uma implementação do exemplo do Peter Norvig numa determinada linguagem, faça uso dos recursos dessa linguagem. Quando eu vou dizer o quão bom uma linguagem é eu não posso considerar somente o poder expressivo da linguagem, eu tenho que levar em conta também todo o arcabouço de recursos que ela fornece. Se fosse assim eu diria simplesmente que eu prefiro programar utilizando autômatos finitos em detrimento de Java porque ambas tem o mesmo poder expressivo.
O_o que nonsense

---
Silveira Neto - Fortaleza-CE.
www.eupodiatamatando.com
silveiraneto.net

BR-Linux.org
Linux® levado a sério desde 1996. Notícias, dicas e tutoriais em bom português sobre Linux e Código Aberto. "A página sobre software livre mais procurada no Brasil", segundo a Revista Isto É.
Expediente
Sobre o BR-Linux
Enviar notícia ou release
Contato, Termos de uso
FAQ, Newsletter, RSS
Banners e selos
Anunciar no BR-Linux
BR-Linux apóia
LinuxSecurity, Tempo Real
Suporte Livre, Drupal
Verdade Absoluta
Pandemonium
Efetividade, Floripa.net
sites da comunidade
Ajuda
Moderação
Flames: não responda!
Publicar seu texto
Computador para Todos
Notícias pré-2004
Tutoriais, HCL pré-2004