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

2023-11-19

在这里插入图片描述

前言

本项目旨在通过应用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相关资料,希望能帮助到所有小伙伴们。

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

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

随机推荐

  • 一个行程问题与对应的数列求和

    有一个看似简单的路程问题 却涉及到了微积分的收敛 题目如下 一段路程长度140Km 张三 李四两个人从两端骑自行车相向而行 大黄狗和张三在一起 张三速度15Km h 李四速度20Km h 大黄狗25Km h 大黄狗碰到李四 就折回跑向张三
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Sublime Text Editor Recommended Settings

    http www cnblogs com dolphin0520 archive 2013 04 29 3046237 html 转载于 https www cnblogs com jast p 4737637 html
  • 8 月份 火火火火 的 GitHub 开源项目

    本期推荐开源项目目录 1 一个清新文艺的微社区 2 虚拟桌宠模拟器 3 Docusign开源替代方案 4 单词肌肉记忆锻炼软件 5 中文对话式大语言模型 01 一个清新文艺的微社区 一个美观清新的微社区开源项目 整套系统使用 Go Zinc
  • OpenCV实战(29)——视频对象追踪

    OpenCV实战 29 视频对象追踪 0 前言 1 追踪视频中的对象 2 中值流追踪器算法原理 3 完整代码 小结 系列链接 0 前言 我们已经学习了如何跟踪图像序列中点和像素的运动 但在多数应用中 通常要求追踪视频中的特定移动对象 首先确
  • Qt实现阴影边框,可拖动,可缩放窗口(二)

    通过paintEvent来实现的 绘制方形的阴影没问题 但是绘制圆角阴影的话 发现圆角不够圆润 而且有断裂的感觉 pragma once include
  • ChatGPT引爆变革:首个被颠覆的行业揭秘!

    随着人工智能的飞速发展 自然语言处理技术逐渐渗透到内容创作领域 作为一种先进的对话型AI系统 ChatGPT正改变着传统的写作方式 本文将探讨ChatGPT如何颠覆内容创作行业 以及其中的一些引人入胜的案例 ChatGPT是基于GPT架构的
  • 蓝牙App设计2:使用Android Studio制作一个蓝牙软件(包含:代码实现等)

    前言 蓝牙聊天App设计全部有三篇文章 一 UI界面设计 二 蓝牙搜索配对连接实现 三 蓝牙连接聊天 这篇文章是 二 蓝牙搜索配对连接实现 课程1 Android Studio小白安装教程 以及第一个Android项目案例 Hello Wo
  • 习题8-8 判断回文字符串 (20分)

    本题要求编写函数 判断给定的一串字符是否为 回文 所谓 回文 是指顺读和倒读都一样的字符串 如 XYZYX 和 xyzzyx 都是回文 函数接口定义 bool palindrome char s 函数palindrome判断输入字符串cha
  • 白月黑羽教python_白月黑羽Python在线教程

    推荐白月黑羽Python在线教程 白月黑羽 站在初学者的角度为大家安排了Python学习教程 帮助大家迅速掌握程序开发技能 http www python3 vip doc tutorial python home 变量 和 注释 本文目录
  • yaml 学习笔记

    yaml学习 配置 Yet Another Markup Language 发音 j m l 1 yaml文件规则 1 区分大小写 2 使用缩进表示层级关系 3 使用空格键缩进 而非Tab键缩进 4 缩进的空格数目不固定 只需要相同层级的元
  • Spring Cache @Cacheable @CachePut @CacheEvict 讲解和使用案例

    原文链接 https blog csdn net lpw cn article details 84642647 Spring的缓存管理可谓是相当的方便 与其他功能的风格一致 同样的在需要管理的地方添加一个注解 可以是方法 也可以是类 使用
  • fortify 漏洞扫描的几种解决方式

    1 关于Log的问题 Log Forging 整个系统中 对于Log的问题最多 可以采用以下方式进行解决 解决方案如下 1 只输出必要的日志 功能上线前屏蔽大多数的调试日志 2 过滤掉非法字符 2 关于创建File Path Manipul
  • 解构与迭代器

    开始 let x y x 1 y 2 正常的写法 let x y x 1 y 2 console log x y 1 2 let x y 1 2 console log x y 1 2 加上iterator方法 如果我们希望这段代码不报错
  • 计算机二级中的9种运算问题:笛卡尔积,自然连接,交,并,选择,投影。。。

    这九种运算分为7种二元运算 2种一元运算 用文字和例子来分别解释上面几个概念 7种二元运算 1 笛卡儿积 已知 如果算X1和X2的笛卡尔积 则 首先将属性 或者叫标题 A B C 和 D E 和在一块形成新的一组标题
  • python安装bert模型_BERT模型的简单使用(Python)

    不涉及原理 只是快速开始使用 更详细的请参考官方文档 https bert as service readthedocs io en latest index html 下载预训练模型 下载可能需要一些时间 等待的时候可以先去下一步把pyt
  • 某度翻译最新版Acs-Token逆向分析

    某度翻译最新版Acs Token逆向分析 免责声明 本文章中所有内容仅供学习交流使用 不用于其他任何目的 不提供完整代码 抓包内容 敏感网址 数据接口等均已做脱敏处理 严禁用于商业用途和非法用途 否则由此产生的一切后果均与作者无关 擅自使用
  • MySQL题库(4)

    301 考虑 Web 项目的安全性 MD5 算法的不可逆性可以保证加密数据的绝对安全 判断 题 A 正确 B 错误 正确答案 B 302 符合范式的数据表设计比反范式的数据表查询性能更高 判断题 A 正确 B 错误 正确答案 B 303 相
  • 关于文件描述符的close-on-exec标志位

    引言 我们在使用一些系统调用对文件描述符进行操作时 常常会碰到是否为文件描述符赋予CLOEXEC属性的情况 例如 open函数中的flags参数可指定O CLOEXEC标志 int open const char pathname int
  • 基于TF-IDF算法个人文件管理系统——机器学习+人工智能+神经网络(附Python工程全部源码)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 模块实现 1 数据预处理 2 词频计算与数据处理 3 数据计算与对比验证 系统测试 工程源代码下载 其它资料下载 前言 本项目旨在通过应用TF IDF算法 将新下载的课件进行自动分