2009-05-09 6 views

Répondre

12

Le cas simple est un index inversé.

Le plus algorithme de base est tout simplement:

  • analyser le fichier pour les mots, la création d'une liste de mots uniques
  • Normaliser et filtrer les mots
  • lieu une entrée nouage ce mot au fichier votre index

Les détails sont là où les choses deviennent difficiles, mais les principes fondamentaux sont les mêmes. Par "normaliser et filtrer" les mots, je veux dire des choses comme convertir tout en minuscules, enlever les "mots d'arrêt" communs (le, si, dans, etc.), éventuellement "radicaliser" (enlever les suffixes communs pour les verbes et pluriels et autres). Ensuite, vous avez une liste unique de mots pour le fichier et vous pouvez créer votre index à partir de cela.

Il y a des optimisations pour réduire le stockage, des techniques pour vérifier la localité des mots (c'est "ceci" près de "ça" dans le document, par exemple).

Mais, c'est la façon fondamentale dont cela est fait.

2

Vous pouvez toujours regarder quelque chose comme Apache Lucene. Apache Lucene est une bibliothèque de moteurs de recherche de texte performante et complète, entièrement écrite en Java. C'est une technologie adaptée à presque toutes les applications qui nécessitent une recherche en texte intégral, en particulier multi-plateforme.

10

Voici une description vraiment basique; pour plus de détails, vous pouvez lire ce manuel (gratuit en ligne): http://informationretrieval.org/ ¹

1). Pour tous les fichiers, créez un index. L'index est constitué de tous les mots uniques qui se trouvent dans votre ensemble de données (appelé "corpus"). Avec chaque mot, une liste d'identifiants de document est associée; Chaque identifiant de document fait référence à un document contenant le mot. Variations: parfois, lorsque vous générez l'index, vous voulez ignorer les mots d'arrêt ("a", "le", etc.). Vous devez faire attention, cependant ("être ou ne pas être" est une véritable requête composée de mots vides).

Parfois, vous arrêtez également les mots. Cela a plus d'impact sur la qualité de recherche dans les langues autres que l'anglais qui utilisent des suffixes et des préfixes dans une plus grande mesure.

2) Lorsqu'un utilisateur entre une requête, recherchez les listes correspondantes et fusionnez-les. S'il s'agit d'une requête booléenne stricte, le processus est assez simple - pour AND, un docid doit se produire dans toutes les listes de mots, pour OU, dans au moins une liste de mots, etc.3) Si vous voulez classer vos résultats, il y a plusieurs façons de le faire, mais l'idée de base est d'utiliser la fréquence avec laquelle un mot apparaît dans un document, par rapport à la fréquence à laquelle vous l'attendez se produire dans n'importe quel document du corpus, comme un signal que le document est plus ou moins pertinent. Voir le manuel.

4) Vous pouvez également les positions de mot de magasin pour déduire des phrases, etc.

La plupart de c'est hors de propos pour la recherche de bureau, que vous êtes plus intéressé par le rappel (tous les documents qui contiennent le terme) que le classement.


¹ Précédemment http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html, accessible via Wayback Machine

+1

Le lien fourni est cassé. – kta

Questions connexes