Ich habe eine gruppierte df:TfidfVectorizer Rückkehr 0 für ngrams in Pandas DF mit doppelten IDs
id text
100 he loves ice cream
100 she loves ice
100 i hate avocado
Ich Extrahieren Bigramme, Frequenzen und TFIDF punktet mit dieser Funktion:
def extractFeatures(groupedDF, textCol):
features = pd.DataFrame()
for id, group in tqdm(groupedDF):
freq = cv.fit_transform(group[textCol])
tfidf = tv.fit_transform(group[textCol])
freq = sum(freq).toarray()[0]
tfidf.todense()
tfidf = tfidf.toarray()[0]
freq = pd.DataFrame(freq, columns=['frequency'])
tfidf = pd.DataFrame(tfidf, columns=['tfidf'])
dfinner = pd.DataFrame(cv.get_feature_names(), columns=['ngram'])
dfinner['id'] = id
dfinner = dfinner.join(freq)
results = dfinner.join(tfidf)
features = features.append(results)
return features
Diese Ergebnisse im folgenden df:
id ngram frequency tfidf
100 hate avocado 1 0
100 he loves 1 .3
100 i hate 1 0
100 ice cream 1 .3
100 loves ice 2 .6
100 she loves 1 0
Die Tfidf-Ergebnisse sind erfunden. Also, die Funktion findet die Frequenzen korrekt. Es findet dann tfidf-Ergebnisse für die erste Zeile des gruppierten df (einschließlich für das Bigramm, das in mehreren Zeilen erscheint. Schließlich findet es nicht die tfidf-Bewertungen für Bigramme, die für die zweite und dritte Zeile eindeutig sind.
Zusätzlich Obwohl die Tfidf-Werte konstruiert sind, stimmt es, dass sie für jedes Bigramm, das die gleiche Häufigkeit innerhalb eines bestimmten Dokuments hat, identisch sind, so dass jedes Bigramm mit einer Häufigkeit von 1 in der ersten Zeile den .3-Tfidf-Wert aufweist .. mit einer Frequenz von 1 in einer anderen Zeile könnte eine TFIDF Punktzahl von .24 hat das ist seltsam, weil der Begriff Frequenz jeden Bigramm sicherlich anders ist
Zwei Fragen:
- Warum werden die Tfidf-Scores für die zweite und dritte Zeile nicht gefunden?
- Warum sind die Tfidf-Werte für ein bestimmtes Bigramm identisch, das in einem bestimmten Dokument mit der gleichen Häufigkeit angezeigt wird?
Vielen Dank für einen Einblick, den Sie alle haben könnten!