利用余弦相似度做文本分类:

在数学中余弦相似度的公式:cos(a,b)=a*b/(|a|+|b|),而在文本上,我们的余弦相似度通常是这样计算而成:

(文本a,b共同出现的词条数目)/(文本a出现的词条数目+文本b出现的词条数目)

处理两个纯文本的相似度可以这样处理,但对于文本分类来说,我们更多使用的是“训练集”与“测试集”的概念,具体我们会抽取训练集的词条,形成语料库,然后统计这些语料库中的词条在测试集中出现的频数以及在训练集中出现的频数,形成词条词频特征码,进而计算相似度。

在现实中,文本a,b都出现相同而不重要的词条,如:“的,地,我们,你”等。我们的解决的方案可以是,建立停用词库,对文本先预处理,去除文本的不重要词条。或者,用TF-IDF,TextRank等算法提取重要的特征词。而我在多次实验中发现,文本中较为重要的往往集中于实体名词,也就是说,我们可以提取带有vn,n等词性的词条,然后统计相同出现的数目,计算余弦相似度。

具体的步骤如下:

步骤一:提取文本

提取文本的词条我是用结巴分词,因为我的环境是linux平台,所以只需sudopip-install jieba即可,代码如下:

import jieba

import jieba.posseg as pseg

f1=open(sampfn) #打开训练集文本

test_words={}

all_words={}

try:

f1_text= f1.read()

f1_text= unicode(f1_text,'utf-8') #文本解码为utf-8,支持中文

finally:

f1.close()

f1_seg_list=pseg.cut(f1_text) #将文本分词,得到每一个词条以及其词性

for w in f1_seg_list:

if 'n' in w.flag : #抽取实体名词

test_words.setdefault(w.word,0) #构建语料库字典

all_words.setdefault(w.word,0) #创建训练集词条字典,并统计词条词频

all_words[w.word]+=1

ftest1= open(ftest1fn) #打开测试样本1

mytest1_words= copy.deepcopy(test_words) #复制语料库

try:

ftest1_text= ftest1.read()

ftest1_text= unicode(ftest1_text,'utf-8')

finally:

ftest1.close()

ftest1_seg_list=pseg.cut(ftest1_text) #将文本分词,得到每一个词条以及其词性

for w in ftest1_seg_list:

if  'n' in w.flag :

if  mytest1_words.has_key(w.word):

mytest1_words[w.word]+=1 #统计语料库中的词条在测试集中的频数

步骤二:形成词条词频特征码

sampdata=[] #特征码用列表,方便使用numpy计算

test1data=[]

for key in all_words.keys():

sampdata.append(all_words[key])#训练集的特征码

test1data.append(mytest1_words[key]) #测试集的特征码

test1simi=get_cossimi(sampdata,test1data) #计算余弦相似度

步骤三:计算余弦相似度

我们可以借助numpy类,这是一个专门计算复杂数学公式的类,具体的函数如下:

def get_cossimi(x,y):

myx=np.array(x) #将列表转化为数组,更好的数学理解是向量

myy=np.array(y) #将列表转化为数组,更好的数学理解是向量

cos1=np.sum(myx*myy) #cos(a,b)=a*b/(|a|+|b|)

cos21=np.sqrt(sum(myx*myx))

cos22=np.sqrt(sum(myy*myy))

return cos1/(float(cos21*cos22))

python余弦相似度文本分类_利用余弦相似度做文本分类相关推荐

  1. excel分类_利用Excel快速进行SEO关键词分类

    短视频,自媒体,达人种草一站服务 科学技术是第一生产力.作为身在第一线的商务顾问,除了熟知产品知识,擅长营销之道外,各种方案.报表也是一个商务顾问的能力体现.在与客户交涉之中,客户通常都会希望商务们能 ...

  2. 文本匹配_如何又好又快的做文本匹配

    BERT推理速度慢,导致落地困难:找到效果不错,推理速度快的模型是一个方向,ESIM是一个很好的选择: ESIM[1] 推理速度快,效果不错,堪称文本匹配的利器: 对于ESIM,重点掌握就一点:是两个 ...

  3. python 文本相似度计算函数_一文讲述常见的文本相似度计算方法

    作者 | LU_ZHAO 责编 | 徐威龙 前言 在自然语言处理中,我们经常需要判定两个东西是否相似. 比如,在微博的热点话题推荐那里,我们需要比较微博之间的相似度,让相似度高的微博聚集在一起形成一个 ...

  4. 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有

    相信许多人都看到过下面这样的词云图,词云图是一种很好的可视化工具,其作用主要是为了文本数据的视觉表示,既酷炫又能突出重点. 关于词云图的制作,网上能够搜集到很多的教程,许多都是利用了专用的工具,这些工 ...

  5. python snownlp情感分析_白杨数说 | 不会做文本情感分析?试试这两个Python包

    情感分析是自然语言处理(NLP)领域的一类任务,又称倾向性分析,意见抽取,意见挖掘,情感挖掘,主观分析等,它是对带有情感色彩的主观性文本进行分析.处理.归纳和推理的过程.具体到数据新闻领域,文本情感分 ...

  6. python word中表格字体设置_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体样式等...

    前言: 前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息. 本篇博客主要内容有: 1.获取文档的章节信 ...

  7. python读取word中的文字格式_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体等...

    前言: 前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息. 本篇博客主要内容有: 1.获取文档的章节信 ...

  8. 机器学习:分类_机器学习基础:K最近邻居分类

    机器学习:分类 In the previous stories, I had given an explanation of the program for implementation of var ...

  9. 短文本相似度在线计算_短文本相似度在线比较_短文本相似度在线查询_自然语言处理_百度AI开放平台

    短文本相似度计算服务能够提供不同短文本之间相似度的计算,输出的相似度是一个介于0到1之间的实数值,越大则相似度越高.相似度数值建议在一组数据中进行整体比对选用,输出数值越大,则代表语义相似程度相对越高 ...

  10. kind富文本编辑器_在项目中集成富文本编辑器

    前   言 现在学程序的都离不开 Markdown 语法了吧,Markdown 已经成为典型的转换为HTML的非正式规范和参考实现,现在市场上也出现了许多Markdown实现,在基本语法之上额外增加了 ...

最新文章

  1. Linux C中strcpy , strncpy , strlcpy 的区别
  2. Java 8按属性区分
  3. Fedora 30系统下,用g++编译opencv项目
  4. js 查错_7年前端开发经验的我,写了本Vue.js实战开发,开源高清PDF下载
  5. 防止html标签转义
  6. EF – 8.多对多关联
  7. 移动端取消iphone ipad默认按钮
  8. MFC开发IM-字符串转换大全
  9. Packet for query is too large (12164278 > 4194304). You can change this value
  10. UVA12022 Ordering T-shirts【数学+打表】
  11. Vue-Socket.io
  12. python选择应用窗口到最前面
  13. 谈谈嵌入式设备用户界面的未来
  14. 【Beta】Scrum Meeting 3
  15. Windows下iperf使用(cmd窗口)三种方法
  16. linux怎样安装麒麟双系统,win10系统装麒麟系统双系统的具体办法
  17. mysql 删除自定义函数_MySQL学习——操作自定义函数
  18. jquery自动监测输入字数,自动截取,输入框
  19. 百思不得其姐的注意点
  20. lempel ziv matlab,精讲Lempel-Ziv压缩算法

热门文章

  1. subsource integrity 子资源完整性
  2. Cyber RT 使用
  3. 瑞波Ripple概念解析-发行货币(官方文档不完全翻译)
  4. Unity3D-场景中3D物体添加点击事件
  5. 标记肽Tos-GPK-pNA,73392-19-5
  6. 双11快递预计超10亿件 菜鸟砸15亿元补贴
  7. QT 出现错误 Fault tolerant heap shim applied to current process. This is usually due to previous crashes
  8. python爬虫的wad库和‘gbk’问题
  9. Session 0x0 for sever , Closing socket connection. Attempting reconnect except it is a SessionExpire
  10. UserWarning: Failed to load image Python extension: warn(f“Failed to load image Python extension: