Общий способ сделать это заключается в преобразовании документов в ТФ-IDF векторов, то вычислить косинуса сходство между ними. Любой учебник по поиску информации (IR) охватывает это. См. Introduction to Information Retrieval, который является бесплатным и доступен онлайн.
Tf-idf (и аналогичные текстовые преобразования) реализованы в пакетах Python Gensim и scikit-learn. В последнем пакете, вычисление косинуса сходства является столь же легко, как
from sklearn.feature_extraction.text import TfidfVectorizer
documents = [open(f) for f in text_files]
tfidf = TfidfVectorizer().fit_transform(documents)
# no need to normalize, since Vectorizer will return normalized tf-idf
pairwise_similarity = tfidf * tfidf.T
или, если документы являются простыми строками,
>>> vect = TfidfVectorizer(min_df=1)
>>> tfidf = vect.fit_transform(["I'd like an apple",
... "An apple a day keeps the doctor away",
... "Never compare an apple to an orange",
... "I prefer scikit-learn to Orange"])
>>> (tfidf * tfidf.T).A
array([[ 1. , 0.25082859, 0.39482963, 0. ],
[ 0.25082859, 1. , 0.22057609, 0. ],
[ 0.39482963, 0.22057609, 1. , 0.26264139],
[ 0. , 0. , 0.26264139, 1. ]])
хотя Gensim может иметь больше возможностей для такого рода задач.
См. Также this question.
[Отказ от ответственности:. Я был вовлечен в scikit учиться Tf-IDF реализации]
Аналогичный вопрос здесь http://stackoverflow.com/questions/101569/algorithm-to-detect-similar-documents-in-python-script witch some nice answer –