对于文档中具有相同频率的每个Ngram,TF-IDF得分应该是相同的

时间:2017-08-17 16:08:17

标签: python python-3.x scikit-learn tf-idf

我正在使用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

0 个答案:

没有答案