文本向量化

前言

文本向量化,就是把文本转化为向量形式。这里用两种方式实现本文向量,一种是TF方式,一种是TF-IDF方式,且这里向量的长度就是字典的长度。

TF就是词频、TF-IDF就是词频-逆频率。关于这两者的介绍已经满大街了,对于这两者概念如有不懂,自行百度。

本文基于python 实现,输入两篇短文本,输出文本向量,并用余弦相似度方式,计算两篇文档的相关性。

实现

计算两个向量余弦相似度

import math


def count_cos_similarity(vec_1, vec_2):
    if len(vec_1) != len(vec_2):
        return 0

    s = sum(vec_1[i] * vec_2[i] for i in range(len(vec_2)))
    den1 = math.sqrt(sum([pow(number, 2) for number in vec_1]))
    den2 = math.sqrt(sum([pow(number, 2) for number in vec_2]))
    return s / (den1 * den2)

TF 文本向量及相似性计算

from sklearn.feature_extraction.text import CountVectorizer

sent1 = "the cat is walking in the bedroom."
sent2 = "the dog was running across the kitchen."

count_vec = CountVectorizer()

sentences = [sent1, sent2]
print count_vec.fit_transform(sentences).toarray()
print count_vec.get_feature_names()

vec_1 = count_vec.fit_transform(sentences).toarray()[0]
vec_2 = count_vec.fit_transform(sentences).toarray()[1]

print count_cos_similarity(vec_1, vec_2)

这里写图片描述
说明:依次输出每个文本的向量表示、每个维度对应的词语、以及文本余弦相似度。

TF-IDF 文本向量及相似性计算

from sklearn.feature_extraction.text import TfidfVectorizer

sent1 = "the cat is walking in the bedroom."
sent2 = "the dog was running across the kitchen."

tfidf_vec = TfidfVectorizer()

sentences = [sent1, sent2]
print tfidf_vec.fit_transform(sentences).toarray()
print tfidf_vec.get_feature_names()
vec_1 = tfidf_vec.fit_transform(sentences).toarray()[0]
vec_2 = tfidf_vec.fit_transform(sentences).toarray()[1]
print count_cos_similarity(vec_1, vec_2)

这里写图片描述
说明:输出同上

小结

上文示例中给了两个句子:
  ”the cat is walking in the bedroom.”
  ”the dog was running across the kitchen.”
这两个句子其实从语义上看特别相似,但是实际得到的相似性却很低~~本质上原因在于两种方式计算的文本向量,都只能衡量文本之间的内容相似度,但难以衡量其中语义相似度。

这篇文章特别初级,之所以写这篇文章其实还有个原因,是想做个对比—和基于word2vec实现的文本相似性计算进行对比,后者下一篇博文进行介绍的~

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值