Algoritmo de busca por termos em texto

690 views
Skip to first unread message

Georjuan Taylor

unread,
Nov 16, 2012, 7:57:16 PM11/16/12
to goj...@yahoogrupos.com.br, go...@googlegroups.com
Olá pessoal, gostaria de saber se alguém conhece algum algoritmo de busca por aproximação entre uma frase e um texto, conheço alguns algoritmos como "Booyer-Moore", "distancia de levenshtein", "soundex" mas que trabalham apenas palavra<>palavra ou palavra<>texto, e preciso de algo para fazer pesquisa no sentido texto<>texto

ex:

O usuário pesquisa "bolo de cenoura com cobertura de chocolate"

Nos resultados de pesquisa vem textos como

1: "Receita de bolos - Aprenda a fazer um delicioso bolo de cenoura com chocolate"

-----------

Seria basicamente o algoritmo parecido com o que os buscadores como google fazem, não conheço nenhum algoritmo para fazer isso, então pensei em uma forma de busca por tags, onde retiraria da frase de entrada artigos,preposições,pronomes etc depois quebrar o restante em tags assim conseguiria fazer uma busca por aproximação utilizando os algorítimos citados acima

ex:
O usuário pesquisa "bolo de cenoura com cobertura de chocolate"

O sistema gera "bolo cenoura cobertura chocolate", gera as tags "bolo - cenoura  - cobertura - chocolate" e busca nos textos.

Alguém tem uma sugestão melhor?



Att,

             Georjuan Taylor
---
Twitter:          twitter.com/georjuan
MSN/Gmail:  geor...@gmail.com
Facebook:     facebook.com/georjuan
LinkedIn:       http://br.linkedin.com/in/georjuan
Phone:          (62) 9638-0104

Analista Desenvolvedor
SysTec  - Inteligência da Informação
www.systecinfo.com.br

Guilherme Pereira

unread,
Nov 17, 2012, 2:59:53 AM11/17/12
to go...@googlegroups.com

Para buscas textuais, temos o projeto Apache Lucene.
http://pt.m.wikipedia.org/wiki/Apache_Lucene#section_1

O Zend Framework implementa a api

--
Você recebeu esta mensagem porque está inscrito na Lista "GOPHP" em Grupos do Google.
Para Postar: go...@googlegroups.com
Para Sair do Grupo: gophp-un...@googlegroups.com
Link: http://groups.google.com/group/gophp?hl=pt-BR
 
 

Guilherme Pereira

unread,
Nov 17, 2012, 5:41:25 AM11/17/12
to go...@googlegroups.com

Para buscas textuais, temos o projeto Apache Lucene.
http://pt.m.wikipedia.org/wiki/Apache_Lucene#section_1

O Zend Framework implementa essa api

Em 16/11/2012 22:57, "Georjuan Taylor" <geor...@gmail.com> escreveu:

Murilo Adriano

unread,
Nov 17, 2012, 8:25:12 AM11/17/12
to go...@googlegroups.com
Olá, 

Existe um algoritmo relativamente simples que pode ser usado para realizar esse tipo de consulta. O nome dele é term frequency-inverse document frequency (tf-idf). Ele é utilizado para identificar quais documentos (ex: páginas, registros em um banco de dados, arquivos) são mais relevantes para uma dada query. Ele funciona bem porque combina duas estatísticas, a freqüência do termo (tf) que diz quanto mais palavras aparecerem em comum no documento, mais relevante ele é e a freqüência inversa entre todos os documentos (idf)  que diz que uma palavra que aparece muito em muitos documentos tem importância pequena. Assim palavras comuns  como "de" e "com" teria baixíssima importância, enquanto "bolo" e "chocolate" contribuiriam muito mais para determinar a relevância de um documento.

Sem mais delongas, eis o link do artigo na Wikipedia: http://en.m.wikipedia.org/wiki/Tf%E2%80%93idf

Abraço,

Enviado via iPhone

Marcel Ferrante

unread,
Nov 17, 2012, 3:05:28 PM11/17/12
to go...@googlegroups.com
Exatamente Murilo,
esse ai é o modelo vetorial (exemplo em anexo).
ps: vcs recebem os anexos?
Abs
Marcel
--
Marcel Ferrante Silva
(62) 8108-1277 (TIM)
      9406-8366 (Claro)
      8408-5853 (OI)
"The Power of Ideas"
skype: marcelferrante
msn/gtalk: mar...@gmail.com


exercicio-sri-modelo-vetorial.pdf

Marcel Ferrante

unread,
Nov 17, 2012, 7:42:32 AM11/17/12
to go...@googlegroups.com
Georjuan,

este é um campo de estudo bem extenso, chamado recuperação da informação ou information retrieval

A indicação do Guilherme, o apache Lucene, é muito boa, pois é um projeto sólido de maquina de busca, iniciado pela IBM, que depois foi transformado em software livre.

Uma literatura básica é o livro Modern information retrieval - Baeza-Yates - Cited by 10138

O modelo vetorial é fundamental para este tipo de consulta. Anexei algumas apresentações que dão uma visão geral sobre essa isso.

Abs
Marcel
2-SRI-c.pdf
2-SRI-d.pdf

Georjuan Taylor

unread,
Nov 18, 2012, 7:17:06 AM11/18/12
to go...@googlegroups.com
Vlw galera, vou dar uma estudada nos algoritmos.

Att,

             Georjuan Taylor
---
Twitter:          twitter.com/georjuan
MSN/Gmail:  geor...@gmail.com
Facebook:     facebook.com/georjuan
LinkedIn:       http://br.linkedin.com/in/georjuan
Phone:          (62) 9638-0104

Analista Desenvolvedor
SysTec  - Inteligência da Informação
www.systecinfo.com.br



Google Grupos DS interativa

unread,
Nov 18, 2012, 5:07:23 AM11/18/12
to go...@googlegroups.com
não sei se é o que vc precisa, mas já implementei pesquisa do tipo FULL TEXT SEARCH por RELEVANCIA para um sistema interno de uma empresa médica chamada lifemed.
buscava termos no banco de dados e não somente palavras, quanto maior a frase, maior a relevancia sendo que DE DO DA e etc não eram considerados.

Espero que ajude
Giovanni Donda

Georjuan Taylor

unread,
Nov 18, 2012, 6:51:59 PM11/18/12
to GOJ...@yahoogrupos.com.br, go...@googlegroups.com
Vlw, como estou implementando em webservice estou usando a versão Lucene.Net, mas resolveu meu problema :)

O que vi de complicação é, ex:

Tenho no sistema cadastrado um item que fala sobre "bolo de chocolate", nada que fale sobre bolo de cenoura, mas o usuário vai é pesquisa "bolo gostoso de cenoura" e a biblioteca me traz como algo relevante um item que fala sobre "bolo de chocolate" já que é o que existe de mais próximo ao que o usuário esta pesquisando; 

Outro problema é o fato dela não conseguir fazer pesquisas quando o usuário escrever errado ou a informação esta no plural e o usuário busca no singular, acho que fazendo uma combinação com os algoritmos que citei antes ("distancia de levenshtein", "soundex") posso resolver isso, mas creio que a pesquisa irá ficar lenta já que teria que fazer centenas de cálculos;


Att,

             Georjuan Taylor
---
Twitter:          twitter.com/georjuan
MSN/Gmail:  geor...@gmail.com
Facebook:     facebook.com/georjuan
LinkedIn:       http://br.linkedin.com/in/georjuan
Phone:          (62) 9638-0104

Analista Desenvolvedor
SysTec  - Inteligência da Informação
www.systecinfo.com.br



Em 17 de novembro de 2012 00:35, Frederico Maia Arantes <frederi...@gmail.com> escreveu:
Olá Georjuan, já deu uma pesquisada sobre Apache Solr e Lucene? Pelo que
entendi do seu problema eles resolvem e muito bem.

*Frederico Maia Arantes
Instrutor e Desenvolvedor de Software (OCJP 6)
*
Gojava JUGLeader
*
Twitter  <http://twitter.com/fredmaia> /
Blog<http://fredericoarantes.wordpress.com>
*



2012/11/16 Georjuan Taylor <geor...@gmail.com>

> **
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

Para não mais assinar o Grupo, mande uma mensagem para:
GOJava-un...@yahoogroups.com

Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/GOJava/

<*> Para sair deste grupo, envie um e-mail para:
    GOJava-un...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html



Georjuan Taylor

unread,
Nov 19, 2012, 7:25:12 AM11/19/12
to GOJ...@yahoogrupos.com.br, go...@googlegroups.com
Frederico quanto ao caso o bolo realmente da p/ tratar c/ o score que ele gera, definindo uma faixa tem com ignorar resultados que não são muito próximos.

Já quando a busca por palavras erradas, plural-singular, até onde li ela não faz isso, mas permite integrar outros algoritmos p/ customizar a busca nesse sentido, mas ainda estou pesquisando para ver como fazer isso;



Att,

             Georjuan Taylor
---
Twitter:          twitter.com/georjuan
MSN/Gmail:  geor...@gmail.com
Facebook:     facebook.com/georjuan
LinkedIn:       http://br.linkedin.com/in/georjuan
Phone:          (62) 9638-0104

Analista Desenvolvedor
SysTec  - Inteligência da Informação
www.systecinfo.com.br



Em 19 de novembro de 2012 10:17, Frederico Maia Arantes <frederi...@gmail.com> escreveu:
Estranho Georjuan, pois pelo que sei o Lucene busca mesmo com palavras
erradas. E quanto à busca com resultado errado do bolo de chocolate, tem
vários ajustes que podem ser feitos, como definir a proximidade que as
palavras devem ter para ser um resultado correto, vários parâmetros nesse
sentido que podem ser customizados não necessitando que se implemente
algoritmos complexos.


*Frederico Maia Arantes
Instrutor e Desenvolvedor de Software (OCJP 6)
*
Gojava JUGLeader
*
Twitter  <http://twitter.com/fredmaia> /
Blog<http://fredericoarantes.wordpress.com>
*



2012/11/18 Georjuan Taylor <geor...@gmail.com>

> **
Reply all
Reply to author
Forward
0 new messages