2010-07-11 5 views
1

Je dois filtrer le flux d'articles de texte en vérifiant chaque entrée pour les correspondances floues d'une chaîne prédéfinie (je recherche des noms de produits mal orthographiés, parfois avec des mots différents et des caractères non-lettre comme ":" ou ","). J'obtiens d'excellents résultats en plaçant ces articles dans l'index sphinx et en effectuant des recherches dessus, mais malheureusement je reçois des centaines d'articles chaque seconde et je mets à jour l'index après avoir obtenu que chaque article soit trop lent (et je comprends qu'il n'est pas conçu pour ça) tâche). J'ai besoin d'une bibliothèque qui peut construire dans l'index de la mémoire d'un petit texte ~ 100kb et effectuer une recherche floue sur elle, est-ce que quelque chose comme ça existe?Recherche d'exécution floue sans base de données index

Répondre

1

Ce problème est presque identique à Bayesian spam filtering et les outils déjà écrits pour cela peuvent juste être formés pour reconnaître selon vos critères.

ajouté en réponse au commentaire:

Alors, comment allez-vous le partitionnement du flux dans des bacs maintenant? Si vous avez déjà un corpus d'articles séparés, alimentez-le dans le classificateur. Les classificateurs bayésiens sont le moyen de faire correspondre le contenu flou dans son contexte et peuvent classer tout, du spam aux nucléotides en passant par les catégories spectrales astronomiques.

Vous pouvez utiliser moins de méthodes stochastiques (par exemple Levenshtein), mais à un moment donné, vous devez décrire la différence entre les occurrences et les échecs. La beauté des méthodes bayésiennes, surtout si vous avez déjà un corpus séparé, c'est que vous n'avez pas besoin de savoir expressément comment vous classifiez.

+0

Thx, ceci est une idée très brillante, mais je ne peux malheureusement pas en ce moment former les filtres et le filtrage bayésien AFAIK ne fonctionnera pas bon pour les chaînes de recherche longues (6-7 mots). – Riz

+0

FAYK est incorrect. Apparemment, non seulement vous n'avez pas le temps de former des filtres, mais vous n'avez pas le temps de RTFWA. – msw

+0

LOL, ne vous méprenez pas, je ne voulais pas dire que je suis trop paresseux pour former des filtres (ou lire wikipedia), mais la quantité de ces filtres peut être assez grande (donc je ne peux pas préparer un ensemble de filtres formés pour tout le monde) et la création d'une boucle «ajouter un filtre - vérifier - former - répéter» n'est pas la meilleure solution pour ma tâche (les utilisateurs finaux préféreraient obtenir de mauvais résultats plutôt que de passer plus de temps sur les filtres d'entraînement). En ce qui concerne les longues chaînes de recherche je peux me tromper, c'est juste une expérience personnelle d'utiliser le filtrage de spam bayésien dans mon client de messagerie :) – Riz

1

Comment utiliser l'extension sqlite fts3?

CRÉER TABLE VIRTUELLE enrondata1 EN UTILISANT fts3 (content TEXT);

(Vous pouvez créer un nombre de colonnes - tous seront indexés)

Après que vous insérez ce que vous voulez, et pouvez effectuer une recherche sans reconstruction d'index - correspondant soit colonne spécifique, ou l'ensemble rangée.

(http://www.sqlite.org/fts3.html)

+0

Thx pour suggestion, joué avec sqlite pour un peu, en utilisant fts3 avec tokenizer porter donne des résultats vraiment sympa, mais ça ne fonctionne pas pour les cas où la chaîne de recherche est comme "Toy Story 3 quelque chose" et le texte "Histoire de jouets 3 some_other_word" :( – Riz

Questions connexes