2010-06-22 4 views
4

question un peu ouverte ici car je suis surtout à la recherche d'opinions. Je prends quelques données de Craigslist pour les annonces apt dans ma région depuis que je cherche à déménager. Mon but est de pouvoir comparer des éléments pour voir quand quelque chose est un doublon afin que je ne passe pas toute la journée à regarder les mêmes 3 annonces. Le problème est qu'ils changent un peu les choses pour passer les filtres du CL.Quelle est la méthode la plus simple pour comparer de grandes quantités de texte similaire?

J'ai déjà quelques regex pour comparer l'adresse et les numéros de téléphone à comparer, mais ce n'est pas le plus fiable. Est-ce que quelqu'un est familier avec une méthode facile de comparer le document entier et peut-être montrer quelque chose de simple comme "80% similaire"? Je ne peux pas penser à quelque chose de désinvolte, donc je suppose que je vais devoir partir de zéro sur ma propre solution, mais je me suis dit que ça valait la peine de demander au génie collectif de stackoverflow :)

Les langues/méthodes préférées seraient python/php/perl, mais si c'est une bonne solution, je suis plutôt ouvert.

Mise à jour: une chose à noter est que, puisque je vais stocker les données éraflées du flux rss pour apts dans ma région (los angeles) dans une base de données locale, la méthode préférée inclurait un moyen de le comparer à tout Je sais actuellement. Cela pourrait être un peu un showstopper, car cela pourrait devenir un très long processus que le nombre de postes augmente.

Répondre

2

Vous pouvez calculer la différence Levenshtein entre les deux chaînes - après une normalisation saine comme la minimisation des espaces en double et ce qui ne l'est pas. Après avoir parcouru suffisamment de "doublons", vous devriez avoir une idée de ce que votre seuil est - alors vous pouvez exécuter Levenshtein sur toutes les nouvelles données entrantes et si c'est moins que votre seuil que vous pouvez considérer comme un doublon.

1

Il existe peu de projets assez complexes pour trouver des duplications de texte. L'un d'eux est Simian. Jetez un coup d'oeil.

+0

C'est un projet très sympa, merci de partager! Ma seule préoccupation, et peut-être celle dont j'ai besoin pour mettre à jour le post, est que parce que je vais essentiellement racler les flux rss, j'ai besoin d'une méthode qui me permettra de comparer les données stockées dans le mysql db local. du contenu du corps du poste). Comme je ne fais que regarder dans mon quartier de la ville, il serait possible de faire une comparaison avec tout ce qui existe encore dans la base de données, mais à un certain point, cela deviendra difficile, en particulier dans une ville comme grand comme los angeles – nick

1

Vous pouvez utiliser difflib pour calculer les différences en python directement. Éditer: vous pouvez envisager de créer un hachage du contenu d'une manière ou d'une autre afin de réduire la quantité de texte devant être «différée». Par exemple, supprimez tous les espaces, la ponctuation, les balises, etc. et regardez simplement le contenu réel.

0

Si vous vouliez le faire beaucoup et avec une certaine fiabilité, vous pourriez vouloir utiliser une approche semi-avancée comme une technique de «sac de mots». En fait, je me suis assis et j'ai écrit un croquis d'un algorithme plus ou moins fonctionnel (si horriblement non optimisé) pour le faire, mais je ne suis pas sûr qu'il serait vraiment approprié d'inclure ici. Il existe des bibliothèques préfabriquées que vous pouvez utiliser pour la classification de texte à la place.

Questions connexes