Поиск TF-IDF с использованием значения sklearn списка n-грамм в Python - PullRequest
0 голосов
/ 28 февраля 2019

Во-первых, текст состоит из 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)
...