Question

Voici le problème - j'ai quelques milliers de petits extraits de texte, allant de quelques mots à quelques phrases - le plus grand extrait est sur 2k sur le disque. Je veux être en mesure de comparer chacun à chacun, et calculer un facteur de connexité afin que je puisse montrer aux utilisateurs des informations relatives.

Quelles sont les bonnes façons de le faire? Y at-il des algorithmes connus pour ce faire qui sont bons, sont-il des solutions sous licence GPL, etc?

Je ne suis pas besoin de ceci pour fonctionner en temps réel, comme je peux tout précalculer. Je suis plus préoccupé à obtenir de bons résultats que l'exécution.

Je pensais juste que je demande à la communauté Stack Overflow avant d'aller et d'écrire ma propre chose. Il doit y avoir des gens qui ont trouvé des solutions à cela avant.

Était-ce utile?

La solution

Ces articles sur sémantique et connexité similarité sémantique peut être utile. Et cette SO question sur Latent Semantic Analysis .

Vous pouvez également regarder dans Soundex des mots qui « sonnent aussi bien » phonétiquement.

Autres conseils

Je ne l'ai jamais utilisé, mais vous pourriez regarder dans Levenshtein

Jeff a parlé de quelque chose comme ça sur le pod cast pour trouver des questions connexes figurant sur le côté droit ici. ( dans le podcast 32)

Une grande astuce était de supprimer tous les mots , comme « le » « et » « ce », etc. cela vous laissera avec des mots plus significatifs à comparer.

Et voici une question similaire y at-il un algorithme qui indique la similitude sémantique des deux phrases

Ceci est tout à fait faisable pour les textes grands raisonnables, mais plus difficile pour les petits textes.

Je l'ai fait une fois comme ça, et ça a marché assez bien:

  • Filtrer tous les mots "générales" (comme un, une, la, dans, etc ...) (filtre environ 10 à 30% des mots)
  • Compter les fréquences des mots restants, stocker les X de la plupart des mots fréquents, ce sont vos sujets.
  • Comme une étape supplémentaire, vous pouvez créer des groupes de mots suivants 2/3/4 et de les comparer avec les groupes dans d'autres textes. Je l'ai utilisé comme mesure pour plagerism.

Voir les notes de cours et Manning Raghavan sur MinHashing et la recherche de articles similaires, et un C # Version (?) . Je crois que les techniques proviennent de la recherche Ullman et Motwani.

peut être utile.

Edit: voici une associée question SO

algorithmes phonétiques

L'article, Au-delà SoundEx - Fonctions pour la recherche floue dans MS SQL Server , montre comment installer et utiliser le bibliothèque SimMetrics dans SQL Server. Cette bibliothèque vous permet de trouver relative similitude entre les chaînes et comprend de nombreux algorithmes.

J'ai fini par la plupart du temps en utilisant Jaro Winkler pour apparier les noms. Voici plus d'informations où je leur ai demandé les noms correspondants sur le SO: les enregistrements correspondants basés sur Nom de la personne

Quelques algorithmes basés sur Levenshtein sont également disponibles dans la bibliothèque SimMetric et serait probablement utile dans votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top