Como construir um mecanismo de pesquisa textual?

8

Estou tendo uma string HTML e quero descobrir se uma palavra fornecida é relevante nessa string.

A relevância pode ser medida com base na frequência do texto.

Um exemplo para ilustrar meu problema:

this is an awesome bike store
bikes can be purchased online.
the bikes we own rock.
check out our bike store now

Agora eu quero testar algumas outras palavras:

bike repairs
dog poo

bike repairsdeve ser marcado como relevante, ao passo dog pooque não deve ser marcado como relevante.

Questões:

  • Como isso poderia ser feito?
  • Como filtrar palavras ambíguas como inouor

Obrigado por suas idéias!

Eu acho que é algo que o Google faz para descobrir quais palavras-chave são relevantes para um site. Basicamente, estou tentando reproduzir seus rankings na página.

Hendrik
fonte
Tópico enorme, dê uma olhada no Into to RI , isso mostra os primeiros princípios básicos de como criar o que você está perguntando. Algo a pesquisa é tf-idf , em seguida, perceber isso não resolve tudo e olhada probabilidade Bayesian
EdChum
Por que você considera "reparos" relevantes?
ffriend
Foi apenas um exemplo. Não pensei muito sobre isso :). Eu acho que não é relevante?
Hendrik
@ Hendrik: por favor, use @ <nome de usuário> para abordar o usuário - a SE não me notificou sobre o seu comentário. Contar relevância é o ponto chave nos mecanismos de pesquisa (embora normalmente você calcule a relevância da página da Web para uma consulta de pesquisa, você precisa, certo?). Entendi direito que você só deseja calcular a relevância do documento em uma consulta de pesquisa quando houver palavras semelhantes, mas não exatas (por exemplo, "bicicleta" e, por exemplo, "ciclista")?
ffriend
Eu acho que você está pedindo duas coisas. Um é um problema de pesquisa bastante bem compreendido. Você pode usar o Solr ou o Elasticsearch para fazer o trabalho pesado para você. Ambos podem encontrar documentos relevantes em uma coleção ponderando os hits. No entanto, se você deseja uma compreensão semântica mais profunda do texto (por exemplo, "reparo" não é mencionado, mas é uma atividade típica de uma loja de bicicletas), o mecanismo de pesquisa puro pode falhar.
Eckes

Respostas:

3
  • pré-processe seus documentos (algumas das etapas podem ser ignoradas)
  • use um modelo de espaço vetorial para representar documentos (você pode usar TF, TF-IDF acima mencionado ou outros modelos)
  • faça o mesmo com a consulta: pré-processar e representá-lo no espaço vetorial
  • encontre os documentos mais semelhantes calculando a similaridade do vetor (por exemplo, usando a similaridade do cosseno )

Esse é um esboço do processo de recuperação de informações

Introdução à recuperação de informações de Christopher D. Manning, Prabhakar Raghavan e Hinrich Schütze é um livro muito bom para começar em RI.


Ou simplesmente use o Apache Solr para obter tudo o que você precisa imediatamente (ou o Apache Lucene , usado pelo Solr, para criar seu próprio aplicativo)

Alexey Grigorev
fonte
1

Há muito tempo, lembro-me de jogar com o Elastic Search (o site agora é muito diferente do que me lembro). Há algumas coisas sobre como lidar com a linguagem humana aqui: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/languages.html

Esteja avisado de que a pesquisa Elastic é como uma grande bazuca para o seu problema. Se o seu problema for muito simples, talvez você queira ir do zero. Existem alguns documentos na web sobre isso.

eri0o
fonte