Pergunta

Estou me perguntando se os principais motores SQL por aí (MS SQL, Oracle, MySQL) têm a capacidade de entender que duas palavras estão relacionadas porque compartilham a mesma raiz.

Sabemos que é fácil combinar "networking" ao pesquisar na "rede" porque a última é uma substring do primeiro.

Mas os mecanismos SQL têm funções que podem corresponder à "rede" ao pesquisar "rede"?

Muito obrigado.

Foi útil?

Solução

Esta funcionalidade é chamada de Stemmer: um algoritmo que pode deduzir um caule de qualquer forma da palavra.

Isso pode ser bastante complexo: por exemplo, palavras russas шёл e иду são formas diferentes do mesmo verbo, embora não tenham uma única letra comum (ironicamente, isso também é verdade para o inglês: went e go).

A quebra de palavras também pode ser uma tarefa bastante complexa para alguns idiomas que não usam espaços entre as palavras.

SQL Server Permite o uso de candidatos e disjuntores de palavras em fulltext para o seu mecanismo de pesquisa de texto completo:

http://msdn.microsoft.com/en-us/library/ms142509.aspx

Outras dicas

Eu acho que o tópico é 'similaridade semântica'. Existem vários esforços tentando encontrar soluções ideais para esse problema.

Você pode tentar usar o SoundEx, embora possa não ser exatamente o que você deseja. Ver http://www.codeproject.com/kb/database/phonetic_search_mssql.aspx.

Como Quassnoi apontou, isso pode ser feito com Stemming. PostgreSQL implementa para Pesquisa de texto completo Se você ligá -lo.

ALTER TEXT SEARCH CONFIGURATION blah_en ADD MAPPING FOR english_stem;

Isso usa o Dicionário de bola de neve, que é baseado no Porter Stemmer. O Stemmer de Porter é provavelmente um dos candidatos mais utilizados, por isso fornecerá resultados decentes. É importante lembrar, porém, que o argumento não é sempre tão preciso quanto você quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top