2 votes

Algorithmes de calcul de la similarité de nombreux documents (par exemple, les livres de la Bible)

Mon objectif est de traiter la Bible d'une manière qui permette de calculer la similarité relative de deux livres quelconques de la Bible. Idéalement, deux livres devraient obtenir un score plus élevé si leurs distributions de mots sont similaires, mais aussi s'ils ont plus de phrases en commun. Par exemple, le livre de Matthieu emprunte beaucoup au livre de Marc, mais il est environ deux fois plus long, et si de nombreux passages sont dupliqués mot pour mot, l'ordre des versets dupliqués n'est pas cohérent.

Ce serait formidable si cela pouvait se faire de manière hiérarchique : les versets sont traités individuellement, puis regroupés en chapitres et enfin en livres. Pour un verset donné, il serait bon de pouvoir récupérer une liste classée de versets similaires, et ainsi de suite pour les chapitres et les livres.

Si le système pouvait accorder un crédit partiel pour des mots similaires (walk, walked, walking), ce serait également une bonne chose.

Une fois terminé, j'aimerais étendre ce système à n'importe quel ensemble de documents.

Jusqu'à présent, j'envisage de stocker chaque mot en tant que indice inversé dans une base de données de graphes, puis en utilisant des algorithmes de graphes pour évaluer la similarité des graphes, mais je ne sais pas quel algorithme utiliser pour l'évaluation ( Filtrage collaboratif ?).

Quelque chose comme Distance de Levenstein o BK-Trees peuvent être utiles (pour une correspondance floue) mais semblent inadéquates pour une solution totale. Peut-être que le prétraitement des mots par le BK-Tree et l'utilisation des résultats pour ajouter des liens supplémentaires dans le graphe peuvent aider à atteindre la capacité de correspondance floue.

4voto

mcdowella Points 10439

Les similitudes de fréquence des mots comprennent http://en.wikipedia.org/wiki/Cosine_similarity http://en.wikipedia.org/wiki/Jaccard\_index (notez la référence à http://en.wikipedia.org/wiki/MinHash - vous pourriez l'utiliser avec des phrases) Le http://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence n'est pas symétrique.

Tant que la seule chose qui vous intéresse est la fréquence des mots ou des phrases, vous n'avez besoin que de comptes, et avec MinHash vous n'avez besoin que de comptes sélectionnés. Si vous savez quelque chose sur la langue en question, vous pourriez être en mesure de regarder les mots similaires en réduisant chaque mot à une racine. Pour l'anglais, vous pourriez peut-être obtenir des informations sur la langue à partir de quelque chose comme http://en.wikipedia.org/wiki/Wordnet#Other_languages . Je ne connais pas l'hébreu et le grec du Nouveau Testament.

Lorsque de gros morceaux sont dupliqués entre deux documents, vous pouvez utiliser des tableaux de suffixes. http://algs4.cs.princeton.edu/63suffix/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X