Scikit - TF-IDF 空词汇表
Scikit - TF-IDF empty vocabulary
我必须计算两个或多个文本的 distance/similarity。有些文本真的很小或没有形成正确的英文单词等,"A1024515"。这意味着它应该接受列表中的每个单词。
作为测试用例,我使用了以下列表作为语料库。
words= ['A', 'A', 'A']
vect = TfidfVectorizer(min_df =0)
dtm = vect.fit_transform(words)
df_tf_idf = pd.DataFrame(dtm.toarray(), columns=vect.get_feature_names())
但是,我得到以下错误
ValueError: empty vocabulary; perhaps the documents only contain stop words
如何确保列表被接受为可能的词并确保停用词不会从语料库中删除?
问题不在于停用词,默认情况下没有停用词。问题是您的测试用例中的句子太短(1 个字符)。
By default tfidfVectorizer
uses r'(?u)\b\w\w+\b'
to tokenize 将句子语料库放入单词列表中。这不适用于单个字符串。
sklearn.feature_extraction.text.TfidfVectorizer(... token_pattern=’(?u)\b\w\w+\b’, ...)
您可以使用自己的正则表达式,将分词器作为构造函数参数(在这种情况下,给定的分词器会覆盖正则表达式)。或者使用更长、更真实的测试用例。
参考问题的答案:“CountVectorizer raising error on short words”:
words= ['A', 'A', 'A']
vect = TfidfVectorizer(token_pattern='(?u)\b\w+\b')
dtm = vect.fit_transform(words)
vect.get_feature_names()
给出输出:
['a']
我必须计算两个或多个文本的 distance/similarity。有些文本真的很小或没有形成正确的英文单词等,"A1024515"。这意味着它应该接受列表中的每个单词。
作为测试用例,我使用了以下列表作为语料库。
words= ['A', 'A', 'A']
vect = TfidfVectorizer(min_df =0)
dtm = vect.fit_transform(words)
df_tf_idf = pd.DataFrame(dtm.toarray(), columns=vect.get_feature_names())
但是,我得到以下错误
ValueError: empty vocabulary; perhaps the documents only contain stop words
如何确保列表被接受为可能的词并确保停用词不会从语料库中删除?
问题不在于停用词,默认情况下没有停用词。问题是您的测试用例中的句子太短(1 个字符)。
By default tfidfVectorizer
uses r'(?u)\b\w\w+\b'
to tokenize 将句子语料库放入单词列表中。这不适用于单个字符串。
sklearn.feature_extraction.text.TfidfVectorizer(... token_pattern=’(?u)\b\w\w+\b’, ...)
您可以使用自己的正则表达式,将分词器作为构造函数参数(在这种情况下,给定的分词器会覆盖正则表达式)。或者使用更长、更真实的测试用例。
参考问题的答案:“CountVectorizer raising error on short words”:
words= ['A', 'A', 'A']
vect = TfidfVectorizer(token_pattern='(?u)\b\w+\b')
dtm = vect.fit_transform(words)
vect.get_feature_names()
给出输出:
['a']