J'essaie d'écrire un algorithme de recherche de texte libre pour trouver des messages spécifiques sur un mur (un type de mur similaire à celui utilisé par Facebook). Un utilisateur est supposé être capable d'écrire des mots dans un champ de recherche et d'obtenir des résultats positifs sur les messages qui contiennent les mots; avec le meilleur match en haut puis les autres posts en ordre décroissant en fonction du score du match. J'utilise la distance d'édition (Levenshtein) "e (x, y) = e" pour calculer le score de chaque publication par rapport au mot de requête "x" et au mot "y" après: (x, y) = 2^(2 - e) (1 - min (e, | x |)/| x |), où "| x |" est le nombre de lettres dans le mot de requête.Rédaction d'un algorithme de post-recherche
Chaque mot dans un article contribue au score total pour ce poste spécifique. Cette approche semble bien fonctionner lorsque les messages ont à peu près la même taille, mais parfois certains grands messages réussissent à accumuler des points uniquement en ayant beaucoup de mots en eux alors qu'en pratique, ils ne sont pas pertinents pour la requête. Est-ce que j'aborde ce problème de la mauvaise façon ou est-ce qu'il y a un moyen de normaliser le score auquel je n'ai pas pensé?
Merci, tf-idf semble prometteur. J'ai juste besoin de l'appliquer à mon problème puisque la requête de recherche que j'utilise peut se composer de plusieurs mots où leurs occurrences devraient être plus importantes si elles existent dans la même publication. Le nombre de messages dans le mur est assez modeste (10000 messages max), mais comme j'ai besoin de comparer chaque mot de recherche avec tous les mots de tous les messages, j'obtiens O (N^3) ... Peut-être est-il plus simple recherche de texte intégral incorporée dans la base de données MS SQL 2008 à la place. La raison pour laquelle j'ai commencé à l'étudier était parce que je voulais une recherche par mots flous, mais peut-être que la base de données peut gérer cela? – MdaG
Je ne connais pas MSSQL mais celui de Postgres est très bon et très personnalisable. J'ai essayé de faire quelque chose de similaire à vous (chaîne fuzzy correspondant à des documents, mais pas de texte). La solution actuelle consiste à diviser l'algorithme de correspondance floue au centre et à placer une recherche d'espace vectoriel au centre. Ça semble fonctionner pour moi! folktunefinder.com – Joe