Во-первых, каждый документ имеет вектор темы, список кортежей, который выглядит следующим образом:
[(0, 3.0161273e-05), (1, 3.0161273e-05), (2, 3.0161273e-05), (3, 3.0161273e-05), (4,
3.0161273e-05), (5, 0.06556476), (6, 0.14744747), (7, 3.0161273e-05), (8, 3.0161273e-
05), (9, 3.0161273e-05), (10, 3.0161273e-05), (11, 0.011416071), (12, 3.0161273e-05),
(13, 3.0161273e-05), (14, 3.0161273e-05), (15, 0.057074558), (16, 3.0161273e-05),
(17, 3.0161273e-05), (18, 3.0161273e-05), (19, 3.0161273e-05), (20, 0.7178939), (21,
3.0161273e-05), (22, 3.0161273e-05), (23, 3.0161273e-05), (24, 3.0161273e-05)]
Где, например, (0, 3.0161273e-05), 0 - это идентификатор темы, и3.0161273e-05 - вероятность.
Вам необходимо преобразовать эту структуру данных в форму, чтобы можно было сравнивать документы.
Here is what you can do:
#Create a dictionary, with topic ID as the key, and the value is a list of tuples
(docID, probability of this particular topic for the doc)
topic_dict = {i: [] for i in range(20} # Assuming you have 20 topics.
#Loop over all the documents to group the probability of each topic
for docID in range(num_docs):
topic_vector = lda_model[corpus[docID]]
for topicID, prob in topic_vector:
topic_dict[topicID].append(docID, prob)
Then, you can sort the dictionary to find the top 20 documents:
for topicID, doc_probs in topic_dict.items():
doc_probs = sorted(probs, key = lambda x: x[1], reverse = True)
docs_top_20 = [dp[0] for dp in doc_probs[:20]]
Вы получаете тему по 20 документов для каждой темы.Вы можете собрать в список (это будет список списков) или словарь, так что они могут быть выведены.