Во-первых, текст состоит из n граммов в списках из n граммов, таких как [('a', 'b', 'c'), ('b', 'c', 'd'), ('c ',' d ',' e ')] для каждого документа.
Затем вычисляется значение TFIDF, и для каждого документа должны быть рассчитаны сходство и уникальность.
У меня есть вопрос, как рассчитать сходство с помощью списка в n-граммах и найтиуникальность и сходство для каждого документа.Пожалуйста, обновите следующий код, чтобы решить мою проблему.
В настоящее время я использую следующий код.
from sklearn.feature_extraction.text import TfidfVectorizer
tokens_list = stemmed
ngramArray = []
n = 3
trigrams = ngrams(tokens_list, n)
for grams in trigrams:
ngramArray.append(grams)
documents = []
documents.append({
'name': read_file_name,
'ngram_list': ngramArray
})
texts = [x['ngram_list'] for x in documents]
tf_idf = TfidfVectorizer().fit_transform(texts)
pairwise_similarity = tf_idf * tf_idf.T
similarities = pairwise_similarity.toarray().tolist()
result_list = []
for index in range(0, len(similarity_list)):
similarities = [x for i, x in enumerate(similarity_list[index]) if i != index]
uniqueness = 1 - (max(similarities) if len(similarities) > 0 else 0)
result_list.append(uniqueness)
uniqueness = [
{
'file': documents[i]['name'],
'uniqueness': round(x * 100, 2)
} for i, x in enumerate(uniqueness)
]
docs = [
{
'file': documents[i]['name'],
'similarities': [
{
'file': documents[j]['name'],
'similarity': round(y * 100, 2)
} for j, y in enumerate(x)
]
} for i, x in enumerate(similarities)
]
for doc in docs:
doc['similarities'] = sorted(doc['similarities'], key=lambda k: k['similarity'], reverse=True)
doc['similarities'] = [x for x in doc['similarities'] if x['file'] != doc['file']][0:1]
context = {
'results': uniqueness,
'docs': docs
}
Print(context)