Comment construire un moteur de recherche textuel?


8

J'ai une chaîne HTML et je veux savoir si un mot que je fournis est pertinent dans cette chaîne.

La pertinence pourrait être mesurée en fonction de la fréquence dans le texte.

Un exemple pour illustrer mon problème:

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

Maintenant, je veux tester quelques autres mots:

bike repairs
dog poo

bike repairsdoivent être marqués comme pertinents alors dog pooqu'ils ne doivent pas être marqués comme pertinents.

Des questions:

  • Comment cela pourrait-il être fait?
  • Comment filtrer les mots ambigus comme inouor

Merci pour vos idées!

Je suppose que c'est quelque chose que Google fait pour déterminer quels mots clés sont pertinents pour un site Web. J'essaie essentiellement de reproduire leur classement sur la page.


Sujet énorme, jetez un œil à Into to IR , cela vous guide des premiers principes de base sur la façon de construire ce que vous demandez. Quelque chose à rechercher est tf-idf alors réalisez que cela ne résout pas tout et regardez la probabilité bayésienne
EdChum

Pourquoi considérez-vous les «réparations» comme pertinentes?
ffriend

C'était juste un exemple. Je n'y ai pas trop réfléchi :). Je suppose que ce n'est pas pertinent?
Hendrik

@Hendrik: s'il vous plaît, utilisez @ <nomutilisateur> pour contacter l'utilisateur - SE ne m'a pas informé de votre commentaire. Compter la pertinence est le point clé dans les moteurs de recherche (bien que normalement vous calculez la pertinence d'une page Web pour une requête de recherche, vous en avez besoin, non?). Dois-je comprendre que vous voulez simplement savoir comment calculer la pertinence d'un document par rapport à une requête de recherche lorsqu'il y a des mots similaires mais pas exacts (par exemple, «vélo» et, par exemple, «cycliste»)?
ffriend

Je suppose que vous demandez deux choses. L'un est un problème de recherche assez bien compris. Vous pouvez simplement utiliser Solr ou Elasticsearch pour faire le gros du travail pour vous. Ils peuvent tous deux trouver des documents pertinents dans une collection en pondérant les résultats. Cependant, si vous voulez une compréhension sémantique plus approfondie du texte (c.-à-d. "Réparer" n'est pas mentionné mais une activité typique dans un magasin de vélos), alors le moteur de recherche pur pourrait tomber à plat.
eckes

Réponses:


3
  • prétraitez vos documents (certaines étapes peuvent être ignorées)
    • tokenize
    • supprimer les mots vides
    • tige ou lemmatize
    • faire la normalisation (par exemple USA -> USA, météo -> meteo, etc.) et la correction orthographique
    • effectuer une normalisation phonétique (par exemple avec Soundex )
    • trouver des classes d'équivalence (en utilisant des thésaurus, par exemple WordNet )
  • utiliser un modèle d'espace vectoriel pour représenter des documents (vous pouvez utiliser TF, TF-IDF susmentionné ou d'autres modèles)
  • faire de même avec la requête: prétraiter et la représenter dans l'espace vectoriel
  • trouver les documents les plus similaires en calculant la similitude vectorielle (par exemple en utilisant la similitude cosinus )

C'est un aperçu du processus de recherche d'informations

Introduction à la recherche d'informations par Christopher D. Manning, Prabhakar Raghavan et Hinrich Schütze est un très bon livre pour commencer en IR.


Ou utilisez simplement Apache Solr pour obtenir tout ce dont vous avez besoin (ou Apache Lucene , qui est utilisé par Solr, pour créer votre propre application)


1

Je me souviens il y a longtemps de jouer avec Elastic Search (le site Web est très différent de ce dont je me souviens). Il y a des trucs sur le traitement du langage humain ici: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/languages.html

Soyez averti que la recherche élastique est comme un gros bazooka à votre problème. Si votre problème est très simple, vous voudrez peut-être recommencer à zéro. Il existe quelques documents sur le Web à ce sujet.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.