关于ZAKER 融媒体解决方案 合作 加入

python-tfidf.transform ( ) 函数未返回正确的值

CocoaChina 10-23

我正在尝试将 tfidf 矢量化器适合特定的文本语料库 , 然后使用相同的矢量化器来查找新文本的 tfidf 值的总和 , 但是总和不如预期 . 下面是示例:

text = [ "I am new to python and R , how can anyone help me","why is no one able to crack the python code without help" ] tf= TfidfVectorizer ( stop_words='english',ngram_range = ( 1,1 ) ) tf.fit_transform ( text ) zip ( tf.get_feature_names ( ) ,tf.idf_ ) [ ( u'able', 1.4054651081081644 ) , ( u'code', 1.4054651081081644 ) , ( u'crack', 1.4054651081081644 ) , ( u'help', 1.0 ) , ( u'new', 1.4054651081081644 ) , ( u'python', 1.0 ) ]

现在 , 当我用新文本尝试相同的 tf 时:

new_text = "i am not able to code"np.sum ( tf.transform ( [ new_text ] ) ) 1.4142135623730951

我预计输出约为 2.80. 关于这里可能出问题的任何建议都会非常有帮助 .

最佳答案

这是由于 " l2 归一化 " ( TfidfVectorizer 中的默认设置 ) .

如您所料 ,transform ( ) 的第一个结果是:

array ( [ [ 1.40546511, 1.40546511, 0. , 0. , 0. , 0. ] ] )

但是现在标准化已完成 . 在这种情况下 , 上述向量被除法器除法:

dividor = sqrt ( sqr ( 1.40546511 ) +sqr ( 1.40546511 ) +sqr ( 0 ) +sqr ( 0 ) +sqr ( 0 ) +sqr ( 0 ) ) = sqrt ( 1.975332175+1.975332175+0+0+0+0 ) = 1.98762782

因此 , 最终的数组为:

array ( [ [ 0.70710678, 0.70710678, 0. , 0. , 0. , 0. ] ] )

然后应用求和 , 其结果为 1.4142135623730951.

希望现在清楚了 . 您可以参考my answer here来完整了解 TfidfVectorizer.

以上内容由"CocoaChina"上传发布 查看原文
相关标签 python函数除法

觉得文章不错,微信扫描分享好友

扫码分享

热门推荐

查看更多内容