如何在修剪tfidfvectorizer后检查术语是否为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在修剪tfidfvectorizer后检查术语是否为空相关的知识,希望对你有一定的参考价值。

我正在使用tfidfvectorizer从许多不同的语料库中获得术语。 这是我的代码

tfidf = TfidfVectorizer(ngram_range=(1,1), stop_words = 'english', min_df = 0.5)
for corpus in all_corpus:
    tfidf.fit_transform(corpus)

每个语料库中的文档数量是多种多样的,因此在构建词汇表时,某些语料库仍为空并返回错误:

after pruning, no terms remain. Try a lower min_df or higher max_df

我不想改变最小或最大DF。我需要的是当没有术语时,跳过转换过程。所以我做了如下的条件过滤器

for corpus in all_corpus:
    tfidf.fit_transform(corpus)
    if tfidf.shape[0] > 0:
    \execute some code here

但是,这种情况无法奏效。有办法解决这个问题吗?

所有答案和评论都非常感谢。谢谢

答案

首先,我相信,您的问题的最小工作示例如下:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(ngram_range=(1,1), stop_words = 'english', min_df = 0.5)
tfidf.fit_transform(['not I you'])

我无法复制包含您分享的错误消息部分的错误消息,但这给了我一个ValueError,因为我的文档中的所有单词都是英语停用词。 (如果删除上面代码段中的stop_words = 'english',代码就会运行。)

在for循环的情况下处理错误的一种方法是使用try / except块。

for corpus in all_corpus:
    try:
        tfidf.fit_transform(corpus)
    except ValueError:
        print('Transforming process skipped')
        # Here you can do more stuff
        continue  # go to the beginning of the for-loop to start the next iteration
    # Here goes the rest of the code for corpus for which the transform functioned

以上是关于如何在修剪tfidfvectorizer后检查术语是否为空的主要内容,如果未能解决你的问题,请参考以下文章

Tfidfvectorizer - 如何查看已处理的令牌?

如何在 Redshift UDF 中修剪变量

如何在python中保存修剪后的波形文件?

如何在编写变量 ejs、node.js 时禁用默认修剪?

在 TfidfVectorizer 中如何计算词频?

在实践中如何使用 TfidfVectorizer 和元数据进行分类?