基于TF-IDF算法个人文件管理系统——机器学习+人工智能+神经网络(附Python工程全部源码)

news2025/2/27 6:49:50

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
    • 2. 词频计算与数据处理
    • 3. 数据计算与对比验证
  • 系统测试
  • 工程源代码下载
  • 其它资料下载

在这里插入图片描述

前言

本项目旨在通过应用TF-IDF算法,将新下载的课件进行自动分类整理。我们的方法是通过比较新文件中的词频与已构建的各学科语料库的词频,利用余弦相似度计算高频词的相关系数,从而匹配到最相近的学科。

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,它通过计算词语在文本中的频率和在整个语料库中的逆文档频率,来评估词语的重要性。

这个项目的应用非常广泛。无论是学生、教师还是研究人员,都可以受益于这个自动分类整理的功能。它可以帮助用户节省大量的时间和精力,提高工作效率,并确保课件文件被准确地整理到相关的学科文件夹中。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

需要 Python 3.8 及以上配置。

模块实现

本项目包括 3 个模块:数据预处理、词频计算与数据处理、数据计算与对比验证,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

语料库从已经分好类的文件夹中采集,提取所有文件的内容汇总至一个文件并转化为txt,便于词频统计操作。

1)文档内容汇总

import win32com.client as win32
import os
word = win32.gencache.EnsureDispatch('Word.Application')
#启动word对象应用
word.Visible = False
def combine(path1,path2,n):
    path = path1
    files = []
    for filename in os.listdir(path):
        filename = os.path.join(path,filename)
        files.append(filename)
#新建合并后的文档
    output = word.Documents.Add()
    for file in files:
        output.Application.Selection.InsertFile(file)#拼接文档
#获取合并后文档内容
    doc = output.Range(output.Content.Start, output.Content.End)
    output.SaveAs(path2) #保存
    output.Close()
    print ("已合并第"+ str(n) +"科目")
#执行合并,分别将各科目的课件合并成docx保存至combine文件夹
path11 = r'D://i/样例之第一学科(通原实验)'
path12 = r'D://i/combine/combine1.docx'
path21 = r'D://i/样例之第二学科(通信网理论)'
path22 = r'D://i/combine/combine2.docx'
combine(path11,path12,1)
combine(path21,path22,2)

2)格式转化

#-*- coding: ANSI -*- 
import os 
import sys 
import fnmatch 
import win32com.client 
   PATH_DATA = r'D://i/combine'
#主要执行函数 
def main(): 
wordapp=win32com.client.gencache.EnsureDispatch("Word.Application")try: 
        for root, dirs,files in os.walk(PATH_DATA): 
            for _dir in dirs: 
                pass 
            for _file in files: 
                if not fnmatch.fnmatch(_file,'*.docx'): 
                    continue 
                word_file = os.path.join(root, _file) 
                wordapp.Documents.Open(word_file) 
                docastxt = word_file[:-4] +'txt' 
                wordapp.ActiveDocument.SaveAs(docastxt,FileFormat= win32com.client.constants.wdFormatText) 
                wordapp.ActiveDocument.Close() 
    finally: 
        wordapp.Quit() 
    print ("已转换成txt格式!") 
   if __name__ == '__main__': 
    main()

2. 词频计算与数据处理

将各语料库与新文件的内容进行分词并计算,数据写入 excel 文档进行数据处理。其中,词频部分使用 jieba 库进行分词,数据处理部分对 xlsx 文件进行操作 openpyxl 库。

1)分词并统计词频

分词部分使用 jieba 库,这里提取出最高频的 50 个词,以下代码是以 1 个新文件和两个语料库为例。

    with codecs.open(txt, 'r', 'ANSI') as f:
        txt = f.read()
    seg_list = jieba.cut(txt)   #对文本进行分词
    c = Counter()
    for x in seg_list:            #进行词频统计
        if x not in stop_word:
            if len(x)>1 and x != '\r\n':
                c[x] += 1

2)数据写入 excel

将分词的结果,即高频词词名和频数分别写入 excel,使用 openpyxl 库,结果如下图所示。

在这里插入图片描述

相关代码如下:

#! Python3
#-*- coding: utf-8 -*-
import os, codecs
import jieba
import openpyxl
from collections import Counter
stop_word = [line.strip() for line in open('D:/i/chinese_stopword.txt',encoding='UTF-8').readlines()]
def create_xlsx():
    workbook=openpyxl.Workbook()
    workbook.save('D:\\i\文件管理.xlsx')
def get_words_write_xlsx(txt, path ,n):
    workbook=openpyxl.load_workbook(path)
    sheet = workbook.active
    with codecs.open(txt, 'r', 'ansi') as f:
        txt = f.read()
    seg_list = jieba.cut(txt)   #对文本进行分词
    c = Counter()
    for x in seg_list:          #进行词频统计
        if x not in stop_word:
            if len(x)>1 and x != '\r\n':
                c[x] += 1
        r=2                          #从第二行开始写入excel
    for (k,v) in c.most_common(50):      #遍历输出高频词
        #print('%s%s  %d' % ('  '*(5-len(k)), k, v))
        sheet.cell(r, 2*n-1, k)
        sheet.cell(r, 2*n, v)
        r+=1
    workbook.save(path)
    print('已成功写入excel!')
path1 = 'D:\\i\文件管理.xlsx'
txt0 = 'D:\\i\new.txt'
txt1 = 'D:\\i\combine\combine1.txt'
txt2 = 'D:\\i\combine\combine2.txt'
if __name__ == '__main__':
    create_xlsx()#如果不是第一次使用,不需要创建excel文件,将此行注释
    get_words_write_xlsx(txt0, path1, 1)
    get_words_write_xlsx(txt1, path1, 2)
    get_words_write_xlsx(txt2, path1, 3)

3. 数据计算与对比验证

在得到新文档与各语料库词频数据后,使用 excel 中的函数,将数据进行再加工后,新文档词与每一个语料库对比,计算相关系数,并得到属于新文件的正确类别。

1)Python 控制 excel 函数

在 excel 中使用 countifvlookupcorrel 三个函数进行数据处理。其中 countif 函数将两列中相同的词横行对齐,vlookup 将词频频数与词相匹配。Correl 用来计算两列数据的相关系数,使用 index、match 函数找到相关系数最大的科目并返回所属科目的名称和系数数值,如图 8-4 所示。

import openpyxl
def count_if(a):
    for n in range (a):
        for i in range(50):
worksheet.cell(i+2,2*n+2*a+3,'=IF(COUNTIF($A$2:$A$51,'+chr(ord("C")+2*n) + str(i+2)+ ')=0,"",'+chr(ord("C")+2*n) + str(i+2)+')')
    print('count_if已完成!')
def vlookup(a):
    for n in range (a):
        for i in range(50):
            worksheet.cell(i+2,2*n+2*a+4,'=IFERROR(VLOOKUP('+chr(ord("G")+2*n) + str(i+2)+ ',$A$2:$B$51,2,0),0)')
    print('vlookup已完成!')
def correl(a):
    for n in range (a):
        worksheet.cell(55+n,1,"第"+ str(n+1)+ "科目")
worksheet.cell(55+n,2,'=CORREL('+chr(ord("D")+2*n)+'2:'+chr(ord("D")+2*n)+'51,'+chr(ord("H")+2*n)+'2:'+chr(ord("H")+2*n)+'51)')
    print('correl已完成!')
path1=r"D:\\i\文件管理.xlsx"
def rank(a):
    worksheet.cell(55,3,"最大系数")
    worksheet.cell(56,3,"所属科目")
    worksheet.cell(55,4,"=MAX(B55:B"+str(55+a-1)+")")
    worksheet.cell(56,4,"=INDEX(A55:A"+str(55+a-1)+",MATCH(D55,B55:B"+str(55+a-1)+",0))")
    print('rank已完成!')
def cal(a):
    count_if(a)
    vlookup(a)
    correl(a)
    rank(a)
    if __name__ == '__main__':
    workbook=openpyxl.load_workbook(path1)
    worksheet=workbook.active
    cal(2)
    workbook.save(filename=path1)

2)excel 示意

科目名称和系数数值如下图所示。

在这里插入图片描述

系统测试

如图所示,前两列为新文档,3、4 列为之前所有的通信原理实验报告,5、6 列为通信网理论相关资料。通过计算可以发现,新文档与通信原理实验报告相关系数(0.568879)高于通信网理论资料的相关系数(0.000954)。可以判断,新文档属于通信原理实验科目。

在这里插入图片描述

在这里插入图片描述

工程源代码下载

详见本人博客资源下载页

其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab统计分析-相关系数

统计分析-相关系数 相关系数 (pearson与spearman) 皮尔逊 person相关系数和斯皮尔曼spearman等级相关系数,它们可用来衡量两个变量之间的**(线性)**相关性的大小,根据数据满足的不同条件,我们要选择不同的相关系数进行计算和分析。 基础概…

C生万物 | 常见的六种动态内存错误

学习过C语言中的动态内存函数,例如【malloc】、【calloc】、【realloc】、【free】,那它们在使用的过程中会碰到哪些问题呢,本本文我们一起来探讨下~ 1、对NULL指针的解引用操作 代码: void test() {int *p (int *)malloc(INT_…

Sui链上事务处理概述

Sui通过其混合式交易处理方法,实现比其他区块链更快速和高效的性能。这种方法使得Sui的交易测试吞吐率达到每秒297,000次。从实际应用的角度来看,使用Sui的用户在apps和游戏中几乎能够获得实时响应。 在区块链世界中,交易是apps运作的基础&a…

AutoHotKey脚本的循环:While和Loop

While AHK提供三种循环方法,分别是Loop, While和For,其中While和For在其他语言中都很常见,下面通过while循环,实现一个鼠标框选矩形尺寸的脚本 ; 来自官网的案例 CoordMode "Mouse", "Screen"~LButton:: {M…

【文献分享】基于感知质量的滚动优化无人机导航

论文题目:Perception-aware Receding Horizon Navigation for MAVs 作者:Zhang, Zichao ; Scaramuzza, Davide 作者机构:苏黎世大学 论文链接:https://files.ifi.uzh.ch/rpg/website/rpg.ifi.uzh.ch/html/docs/ICRA18_Zhang.pd…

【雕爷学编程】Arduino动手做(122)---BH1750光照传感器

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

使用近10年,说说向大家推荐Linux系统的理由

使用linux已经快十年了,一直想推荐身边的使用linux,但是一直没有分享。但是现在我想分享推荐了。下面我们一起聊聊为什么我向大家推荐linux。 为什么现在我想推荐了呢?是因为我自认为相对于同龄人来说,我使用桌面版的时间算是挺长的了&#…

彻底搞懂什么是阿里云服务器vCPU?

阿里云ECS服务器vCPU和CPU是什么意思?CPU和vCPU有什么区别?一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定,CPU是中央处理器,一个CPU可以包含若干个物理核,通过超线程HT(Hyper-Threading&am…

走向计算机视觉的通用人工智能:从GPT和大型语言模型中汲取的经验教训 (下)...

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2306.08641.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 人工智能…

Matlab预测模型-灰色预测模型

预测模型-灰色预测模型 灰色预测是对既含有已知信息又含有不确定信息的系统进行预测,就是对在一定范围内变化的、与时间有关的灰色过程进行预测。灰色预测对原始数据进行生成处理来寻找系统变动的规律,并生成有较强规律性的数据序列,然后建立…

Linux学习[19]管线命令详解1---cut, grep, sort, wc, uniq

文章目录 1. 何为管线2. 摘取命令:cut, grep2.1 cut2.2 grep 3. 排序命令sort,wc,uniq3.1 sort3.2 uniq3.3 wc 总结 1. 何为管线 管线命令和Linux学习18里面的连续执行指令少许不同。他是只有在前面指令执行正确的时候,才会执行管线命令。 即这个管线命…

基于Vue+Node.js的宠物领养网站的设计与开发-计算机毕设 附源码 83352

基于VueNode.js的宠物领养网站的设计与开发 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由…

彻底卸载mysql的详细步骤

目录 一、前言 二、操作步骤 (一) 停止mysql的服务 (二)控制面板卸载 (三)清除残留的文件 (四)删除注册表内容 (五)删除MySQL环境变量 一、前言 卸载…

spider-flow新手暴力入门

1.入口 链接跳转: spider-flow 或者本地有git软件直接输入gittt中的链接地址,回车键梭哈即可 2.环境部署,必备jdk8mysql idea打开项目,重点修改如下 mysql用小皮软件(phpstudy)自带的mysql5,navicat软件导入sql文…

SEO一般多久时间才会有效果?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是SEOSEO的时间…

Sui x KuCoin Labs夏季黑客松第二批入围项目公布

Sui x KuCoin Labs夏季黑客松仍在如火如荼地进行中。自第一批入围项目名单公布后一周,第二批入围项目现已经过审核,入围最终Demo Day。 第二批入围名单 Vimverse Vimverse是一个基于Sui构建的创新生态金融平台,旨在释放去中心化储备货币协…

计算物理专题:主值积分

计算物理专题:主值积分 吴式枢理论 主值积分 设在以及上可积,其中为任意小的正数,当两者独立地趋于零,极限存在。如果,这个极限存在,则称它为瑕积分的主值,记作无界函数的改造则该瑕积分的主值…

使用鲁棒优化的定价策略进行微电网不平衡管理研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

童安格杀猪和金钥匙-UMLChina建模知识竞赛第4赛季第7轮

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 本轮每题分数较少,需最先答对所有4题,才能获得本轮优胜。 所有题目的回答必须放…

Python 进阶(一):Python连接MySQL数据库和CRUD操作

MySQL数据库的连接和CRUD操作 前言Python连接MySQL的五种方式1. 安装mysql-connector-python2. 连接数据库3. 查询数据4. 插入数据5. 更新数据6. 删除数据 前言 本文基于MySQL8.x版本的学习,python版本基于当前最新的3.x,windows操作系统下mysql的安装流…