Iグループ化されたDFがあります。TfidfVectorizer重複IDを持つパンダDFでNgramsのための0を返す
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
この結果:
id text
100 he loves ice cream
100 she loves ice
100 i hate avocado
を私はこの機能をバイグラム、周波数、およびTFIDFスコアを抽出しています次の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
tfidfのスコアが考案されています。したがって、関数は周波数を正しく見つけることができます。グループ化されたdfの最初の行(複数の行に表示されるbigramを含む)でtfidfのスコアを検索しています。
さらに、tfidfのスコアは2番目と3番目の行に固有のものです。 tfidfのスコアは人為的なものですが、特定のドキュメント内で同じ頻度を持つバイグラムが同一であることは真実です。したがって、1行目の頻度が1のバイグラムは.3 tfidfのスコアを持ちます。 。。各バイグラムの用語頻度は確かに異なっているので、0.24のTFIDFスコアを持っているかもしれない別の行における1の周波数でこれは奇妙です
二つの質問:
- 2番目と3番目の行のtfidfスコアが見つからないのはなぜですか?
- 特定のドキュメントで同じ周波数で出現する特定のバイグラムのtfidfスコアが同じであるのはなぜですか?
ありがとうございました!