tfidf+余弦相似度

2023-11-14

1、TfidfVectorizers生成的矩阵,要使用每一行的时候,必须重新存入新的数组,否则无法进行相似度计算

2、矩阵超出255*255,xlwt不适用,使用xlsxwriter

3、导出词袋的时候,按一列N行保存,不要按一行N列,xlwt会出错

4、xlwt保存格式用xls,用xlsx也会出错

# -*- coding: utf-8 -*-
"""
Created on Wed Apr  8 10:39:20 2020

@author: 娴娴
"""

import numpy as np
import xlwt
import xlsxwriter
from sklearn.feature_extraction.text import  TfidfVectorizer

#    计算向量a,b的余弦值
def getCos(vec_a,vec_b):
    sum = 0
    sq1 = 0
    sq2 = 0
    for i in range(len(vec_a)):
        sum += vec_a[i] * vec_b[i]
        sq1 += pow(vec_a[i], 2)
        sq2 += pow(vec_b[i], 2)
    try:
        result = round(float(sum) / (np.sqrt(sq1) * np.sqrt(sq2)), 2)
    except ZeroDivisionError:
        result = 0.0
    return result

if __name__ == "__main__":
    corpus = []
#    读取82个txt文件    
    for i in range(82):
        f = open("txt%d"% (i+1) + ".txt", "r", encoding='ANSI')
        str1 = f.read()
        corpus.append(str1)
#    计算tfidf值        
    cv=TfidfVectorizer(binary=False,decode_error='ignore',stop_words='english') #分词、去除停用词
    vec=cv.fit_transform(corpus)#传入句子组成的list
    arr=vec.toarray()#生成tfidf矩阵
    
#    将矩阵导出excel
#    矩阵超出255*255,使用xlsxwriter
    f1 =xlsxwriter.Workbook(r'C:\Users\娴娴\Desktop\tfidf_array.xlsx') #创建工作簿 
    sheet1 = f1.add_worksheet('sheet1') #创建sheet 
    [h,l]=arr.shape #h为行数,l为列数
    
    for i in range (h): 
      for j in range (l):
        sheet1.write(i,j,arr[i,j])
        
    f1.close()
    
#    获取词袋
    cd=cv.get_feature_names()
#    print (cd)
    
#  将词袋写入excel
    f2 = xlwt.Workbook()
    sheet1 = f2.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet

    for i in range(len(cd)):
            sheet1.write(i,1,cd[i])
            
    f2.save(r'C:\Users\娴娴\Desktop\cidai.xls') #保存文件

#    计算余弦相似度并导出excel
    f3 = xlwt.Workbook()
    sheet1 = f3.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
    for i in range (h): 
#      获取arr[i],存入a
      a=[]
      for m in range (l):
          a.append(arr[i,m])

      for j in range (h):
#          获取arr[j],存入b
          b=[]
          for m in range (l):
              b.append(arr[j,m])
          result = getCos(a,b)
          sheet1.write(i,j,result)
    f3.save(r'C:\Users\娴娴\Desktop\cos_value2.xls') #保存文件      




    
    
    

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tfidf+余弦相似度 的相关文章

  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 将 python2.7 与 Emacs 24.3 和 python-mode.el 一起使用

    我是 Emacs 新手 我正在尝试设置我的 python 环境 到目前为止 我已经了解到在 python 缓冲区中使用 python mode el C c C c将当前缓冲区的内容加载到交互式 python shell 中 显然使用了什么
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐