Я ломал голову над этим в течение недели.
Я хочу
- запустить моделирование темы NMF
- Назначить каждому документу тему, посмотрев на максимальный вес,
- График распределенияв виде гистограммы% с использованием matplot.(То есть: темы на оси X и% документов, которые являются этой темой на оси Y.)
Вот некоторые игрушечные данные и выполнение шагов 1 и 2:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import NMF
import pandas as pd
# Get data
data = {
"Documents": ["I am a document",
"And me too",
"The cat is big",
"The dog is big"
"My headphones are large",
"My monitor has rabies",
"My headphones are loud"
"The street is loud "]
}
df = pd.DataFrame(data)
# Fit a TFIDF vectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(df['Documents'])
# Run NMF
nmf_model = NMF(n_components=4, random_state=1).fit(tfidf)
# Weights
W = nmf_model.transform(tfidf)
# Topics
H= nmf_model.components_
Теперь вот как я могу назначить документ для topcic:
# Will return document topics as list like [1, 4, 1...] to
# represent that the first document is topic 1, the second 4, and so on.
topics = pd.DataFrame(W).idxmax(axis=1, skipna=True).tolist()
Хорошо, теперь я смогу получить то, что хочу, с этими двумя структурами, но я в растерянности.