TfidfTransformer和 CountVectorizer的使用

构建词向量简单的有两种分别是TfidfTransformer和 CountVectorizer,这里探索一下他们的使用方法

第一种使用方法,先使用CountVectorizer对原始文本数据进行处理,转换成各个词的频率,没有出现的就是0(这里需要注意的是,直接忽略词汇的长度小于2的,这里的"我"直接被删除了), 然后再使用对产生的数字矩阵进行处理,从而产生tf-idf的矩阵,实例代码如下:

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

vectorizer = CountVectorizer()
corpus = ["我, 中国, 中国, 黄河",
          "富强, 民主"]
corpus_vector = vectorizer.fit_transform(corpus)
words = vectorizer.get_feature_names()
print("模型中的词汇:", words) # 单词长度小于2的直接删除,不进入统计范围
print("原文转换为的向量:\n", corpus_vector)  # 由于矩阵比较稀疏,所以只显示有数据的元素
print("原文转换为的向量:\n", corpus_vector.toarray())

transformer = TfidfTransformer()
tf_idf = transformer.fit_transform(corpus_vector)
weight = tf_idf.toarray()
print("文本数据的tf-idf的值:\n", weight)

产生的输出是:

模型中的词汇: ['中国', '富强', '民主', '黄河']
原文转换为的向量:
   (0, 0)	2
  (0, 3)	1
  (1, 1)	1
  (1, 2)	1
原文转换为的向量:
 [[2 0 0 1]
 [0 1 1 0]]
文本数据的tf-idf的值:
 [[0.89442719 0.         0.         0.4472136 ]
 [0.         0.70710678 0.70710678 0.        ]]

这里需要指出的是,如果我们只想要特定的词汇, 而忽略其他的词汇,则可以在CountVectorizer()指定词汇,如下代码,这里忽略上面词汇中的"黄河":

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

vocabulary = [ "中国","富强", "民主"]
vectorizer = CountVectorizer(vocabulary=vocabulary)
corpus = ["我, 中国, 中国, 黄河",
          "富强, 民主"]
corpus_vector = vectorizer.fit_transform(corpus)

words = vectorizer.get_feature_names()
print("模型中的词汇:\n", words) # 单词长度小于2的直接删除,不进入统计范围
print("原文转换为的向量:\n", corpus_vector.toarray())

transformer = TfidfTransformer()
tf_idf = transformer.fit_transform(corpus_vector)
weight = tf_idf.toarray()
print("文本数据的tf-idf的值:\n", weight)

产生的结果是,从这里可以看出,少了黄河的频率和tf-idf的数值

模型中的词汇:
 ['中国', '富强', '民主']
原文转换为的向量:
 [[2 0 0]
 [0 1 1]]
文本数据的tf-idf的值:
 [[1.         0.         0.        ]
 [0.         0.70710678 0.70710678]]

第二种方法: TfidfTransformer也可以直接对原始的文本数据进行处理,但是他不会删除长度小于2 的词汇,为了测试与上面的数据得到的tf-idf结果一致,这里删除了"我"这个单字

from sklearn.feature_extraction.text import TfidfVectorizer

tfidfvector = TfidfVectorizer()
text = ["中国, 中国, 黄河", 
        "富强, 民主"]
tf_idf = tfidfvector.fit_transform(text)
weight = tf_idf.toarray()
print("每个单词的tf-idf的值:\n", weight)

结果如下,与上面的结果一致:

每个单词的tf-idf的值:
 [[0.89442719 0.         0.         0.4472136 ]
 [0.         0.70710678 0.70710678 0.        ]]

 

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值