我正在使用sklearn
从一组50个文档中查找bigrams的频率和tf-idf分数。假设其中一个已清理的文档“运行速度很慢”。
输出结果为:
ngram freq tfidf
run fast 1 .23
fast slow 1 .23
在其他文档中找到该文档的输出中的ngrams 。假设“快速运行”在文档集合中找到20次,“快速慢”找到30次。为什么具有相同频率的文档中的nfms的tfidf得分相同?
由于文档集合中的频率不同,因此这看起来不像是正确的输出。
这是我用来提取功能的代码。它需要一个分组的df和来自该df的文本列:
def extractFeatures(groupedDF, textCol):
cv = CountVectorizer(token_pattern=r"(?u)\b\w+\b", stop_words=None, ngram_range=(2,2), analyzer='word')
tv = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b", stop_words=None, ngram_range=(2,2), analyzer='word')
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['map'] = id
dfinner = dfinner.join(freq)
results = dfinner.join(tfidf)
features = features.append(results)
return features