Pergunta

Eu ia fazer uma pergunta hoje cedo quando fui apresentado a uma funcionalidade surpreendente no Stackoverflow.Quando escrevi o título da minha pergunta, o stackoverflow me sugeriu várias questões relacionadas e descobri que já havia duas questões semelhantes.Isso foi impressionante!

Então comecei a pensar como implementaria tal função.Como eu ordenaria as perguntas por parentesco:

  1. Pergunta que têm um número maior de palavras correspondem à nova pergunta
  2. Se o número de correspondências forem iguais, a ordem das palavras é considerada
  3. Palavras que aparecem no título têm maior relevância

Isso seria um fluxo de trabalho simples ou um algoritmo de pontuação complexo?Algumas derivações para aumentar o recall, talvez?Existe alguma biblioteca que implementa esta função?Que outros aspectos você consideraria?Talvez Jeff pudesse responder sozinho!Como você implementou isso no Stackoverflow?:)

Foi útil?

Solução

Uma forma de implementar tal algoritmo envolveria classificar as questões de acordo com uma função heurística que atribui um fator de peso de 'relevância' usando as seguintes etapas:

  1. Aplique um filtro de ruído à pergunta 'Novo' para remover palavras comuns em um grande número de objetos, como:'o', 'e', ​​'ou', etc.
  2. Obtenha a quantidade de palavras contidas na pergunta 'Nova' que correspondem às palavras do conjunto de perguntas já postadas no site.[A]
  3. Obtenha o número de correspondências de tags entre as palavras da pergunta 'Novo' e as disponíveis.[B]
  4. Calcule o 'peso de relevância' com base em [A] e [B] como 'x[A] + y[B]', onde x e y são multiplicadores de peso (atribua um multiplicador de peso mais alto a [B], pois a marcação é mais relevante do que uma simples busca por palavras)
  5. Obtenha as 5 principais perguntas com o maior 'peso de relevância'.

A heurística pode exigir ajustes para obter resultados ideais, mas deve funcionar.

Outras dicas

Sua pergunta parece semelhante a Este, que tem algumas respostas adicionais.

@marcio

Desculpe, não tenho conhecimento de nenhuma referência direta à API que possa sugerir aqui e nunca trabalhei com Lucene.

No entanto, estou ciente de que o Google Desktop usa uma API de consulta para classificar e sugerir resultados de pesquisa relevantes.Mais informações sobre a API podem ser encontradas aqui.

Talvez outros possam intervir e orientá-lo.

O StackOverflow não será de código aberto em algum momento?Nesse caso, você sempre poderá descobrir como eles fizeram isso lá.

Atualizar:Parece que eles dizem que poder código aberto.Espero que sim.

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