APP下载

多模态文件内容检索程序设计与实现

2024-09-14赵佳英

电脑知识与技术 2024年23期

摘要:论文介绍了一个基于Python及多个第三方库实现的多模态文件内容检索程序。该程序能够识别并解析文本、图片、PDF、Word、PPT等多种类型的文件,从而实现关键词匹配检索,大大提升了检索的性能和准确性。论文详细阐述了程序的设计思路和实现过程,并通过有效测试验证了程序的可靠性。该研究为多模态文件内容检索领域提供了有益参考。

关键词:多模态;内容检索;文件解析;程序设计与开发

中图分类号:TP311.52 文献标识码:A

文章编号:1009-3044(2024)23-0075-03

开放科学(资源服务)标识码(OSID)

0 引言

随着数字化时代的发展,每个人电脑中存储的不同模态数据呈爆炸式增长。如何从海量文件中快速准确地检索出所需信息,成为一项挑战。传统的文件检索工具主要依赖文件名和元数据[1],对文件内容无能为力,存在较大局限性。因此,亟须一种能够深入文件内容实现精准跨模态[2]检索的新方法。

本论文设计并实现了一种新颖的多模态文件内容检索程序,它能够跨文本、图像等模态[3]对文件内容进行深度分析和检索,极大提升了检索效率和准确性,弥补了现有检索工具的不足,具有重要的实践价值。

1 关键技术

在构建多模态文件内容检索程序时,本论文选择了Python 3.10.9作为开发语言。在实现逻辑上,程序首先需要将用户上传的文件进行类型识别,然后根据不同的文件类型调用相应的处理库进行内容提取。对于提取出的内容,程序会进行统一的格式化和处理,以便下一步的内容检索。

为了确保程序的图形用户界面的直观性和用户友好性,本论文采用了Python的标准GUI工具包接口Tkinter,其备有丰富的控件和布局管理器。

在处理多模态文件数据时,程序依赖于一系列外部库来提取不同格式文件中的内容信息。这些库为程序提供了强大的技术支持,使程序能够更高效地解析各种模态类型的文件内容数据。

在处理图像文件时,程序引入pytesseract库,这是一个基于Tesseract OCR[4]引擎的Python工具,用于从图像中提取文本。本程序利用该库对图像文件进行解析,获取其中的文本信息用于后续检索。

在处理PDF文件时,程序引入pdfminer.six库,这是一个专为提取复杂结构的PDF文档信息而设计的Python库,用于从PDF文件中提取文本、图像和元数据。本程序利用该库对PDF文档进行文本抽取,获取其中可解析的文本信息用于后续检索。

在处理Word文件时,程序引入python-docx库和python-doc库,它们是用于读取和操作Microsoft Word文件的Python库,python-docx针对扩展名为docx的文件,python-doc则针对doc文件。本程序利用这两个库对Word文件进行信息提取,获取其中文本信息便于后续关键词内容检索。

在处理PPT演示文档文件时,程序引入python-pptx库,这是一个用于读取和操作Microsoft PowerPoint演示文稿的Python库,用于解析PPT文件内部结构,读取每页幻灯片的文本、图片、图表数据内容。本程序利用该库对PPT文件进行解析,在获取PPT的文本框、图片、图表结构后,进一步分类处理进行文本提取,用于后续检索。

2 程序设计

本程序是基于Python语言开发的一种脱机程序,采用模块化架构,可单独运行于Windows本地环境,主要用于多模态文件的内容检索。程序遵循高内聚低耦合[5]的设计思想,分为界面层和业务逻辑层。其中,界面层以客户端形式呈现窗口页面,包括文件路径选择、关键词输入和检索结果展示等功能,用于用户交互操作。业务逻辑层则区分为总控程序、不同类型文件解析程序和公共方法程序。程序的模块化结构如图1所示。

该程序的执行流程如下:

1) 双击search.exe启动程序;

2) 在窗口页面,用户从本地文件系统中指定待检索的目录或文件夹;

3) 用户输入查询关键词;

4) 点击查询按钮;

5) 程序遍历用户选定路径及其所有子路径;

6) 程序根据文件的类型执行相应的内容解析方法;

7) 程序将用户输入的关键词与解析出的文件内容进行匹配;

8) 程序将匹配结果以表格形式展示在结果栏。

3 实现与测试

3.1 代码实现

按照程序设计的模块结构图,程序的主要代码分为四大部分:main.py(主程序入口)、GUI.py(图形用户界面)、fileSearch.py(文件内容检索逻辑)和tool.py(公共方法)。这种模块化设计使得每个模块的职责更加单一和清晰,降低了模块间的耦合度,同时也利于后续程序的扩展和维护。

main.py是整个程序的入口点,负责初始化必要的资源,加载其他模块,并控制程序的执行流程。这个文件定义了程序的主函数,该函数主要负责启动图形用户界面、处理用户输入、调用文件检索逻辑等。

GUI.py负责构建和管理用户与程序之间的交互界面,使用图形化元素,如按钮、输入框、表格等来呈现程序的功能和结果。GUI.py绘制了直观的三行栏布局的用户界面,自上而下分为文件路径选择框、关键词输入框和结果展示区。同时,GUI.py也定义了事件处理逻辑,当用户与界面进行交互时,如点击按钮、输入关键词等,GUI.py会捕获这些事件,并将相应的数据由command变量传递给其他模块文件进行处理。

fileSearch.py是程序的核心处理代码,用于接收来自搜索按钮的检索请求,负责对用户选定路径和子目录下的所有文件夹和文件进行遍历,通过判断文件类型,调用不同方法解析文件内容,并使用文本匹配算法定位关键词位置,最后将检索结果传回窗口,展示在结果栏。

主方法search()代码示例如图2所示,首先定义了一个matching_results列表用于存储匹配的结果数据,通过os.walk()方法遍历界面层获取到的检索路径下的文件夹,并根据文件类型分别进行解析和匹配处理,并将最终结果存储在matching_results列表中。对于可能出现的文件类型无法识别、解析结果出错等异常,search()方法也进行了捕获,确保程序出错前已匹配的结果可以正常返回。

针对search()方法中根据文件类型调用的具体方法,以图片内容解析搜索的ocr_search_images()方法为例,如图3所示。首先,通过对pytesseract库的tesseract_cmd变量进行赋值,指定本地安装的Tesseract OCR工具路径,该路径位于F盘下的绝对路径,以便后续正确调用OCR工具。然后,通过调用pytesseract库下的image_to_string方法解析图片内容,其中lang=chi_sim+eng参数允许图像文字识别简体中文和英文。最后,通过search_keywords_position()公共方法进行文本内容和关键词的匹配,并返回结果remarks。

tool.py包含了一系列公共方法和工具函数,用于辅助文件内容检索。这些方法可以在多个模块中重复使用,降低了代码的冗余度,同时提高了代码的可维护性和可重用性。search_keywords_position()就位于tool.py中,主要用于关键词和文本内容的匹配,确定具体位置,并返回关键词周边指定数量的文本,代码如图4所示。该方法使用re.finditer查找所有匹配关键词的位置,同时使用re.escape()方法来确保用户输入的关键词中的任何特殊字符都被正确转义,m.span()返回每个匹配项的起始和结束位置。接着,遍历所有匹配关键词的位置,将关键词前后contentlength长度的字符也展示出来,便于用户联系上下文,确定搜索结果的准确性。

3.2 程序测试

为检测多模态文件内容检索程序的有效性和实用性,在Windows系统的D盘目录下创建了一个名为test的文件夹,用于存放测试所需的文件。该文件夹中包含了Word文档(.docx) 、图片(.jpg、.png等)、PDF文件(.pdf) 和PPT演示文稿(.pptx) 等多种模态类型的文件。这些文件的文件名或内容被刻意设计以包含关键词“多”、拼音“duo”、同音字“朵”、形近字“侈”或不包含这些关键词,并且在test文件夹下创建了多层子目录,同时也设计了空文件夹、空文档等特殊场景,以便全面测试程序的多模态搜索功能。

接下来,双击search.exe文件启动程序,点击窗口“选择路径”按钮,选定D:/test作为搜索目录,然后在关键词输入框中依次输入“多”“duo”“朵”“侈”,点击搜索。程序开始遍历D:/test下所有文件,根据文件类型的不同,调用相应方法进行解析。一旦找到匹配的文件和内容,程序会将搜索结果存储在matching_results字典列表中。这个列表包含了每个匹配文件的相关信息,如文件类型、文件路径以及匹配内容的具体位置或附近字符。程序将这个列表结果展示在结果区。对于文本文件,程序会显示包含关键词“多”的完整句子或附近各5个字符的内容,以便用户了解关键词出现的上下文;对于PPT文件,程序会显示关键词出现的幻灯片页数。测试结果如图5所示,包含“多”关键词的文件结果见图5(a),包含“侈”关键词的文件结果见图5(d);同时,ppttest.pptx文件被设计为第一页幻灯片包含“duo”关键词,第二页包含“朵”关键词,检索结果如图5(b)、图5(c)所示,检索结果正确。

4 总结

本论文实现了一种能够对文本、图像等多种模态文件内容进行解析检索的程序,极大地提升了用户在不同文件类型中搜索关键信息的效率和准确性。

该程序打破了传统单一模态检索的局限,融合了OCR、PDF解析等多种文档处理技术。这种程序设计理念为多模态文件内容检索领域带来了技术上的突破。同时,随着内容解析算法和技术的逐渐成熟,该程序未来可支持更多视频和3D模型等文件类型,推动多模态文件内容检索技术的持续发展和创新。

参考文献:

[1] 周志成,柳纲,杨宇峰,等.企业在线文档管理系统设计与实现[J].华北理工大学学报(自然科学版),2020,42(2):133-140.

[2] 高迪辉,盛立杰,许小冬,等.图文跨模态检索的联合特征方法[J/OL].西安电子科技大学学报,1-11.[2024-04-22].https://doi.org/10.19665/j.issn1001-2400.20240302.

[3] 何俊,张彩庆,李小珍,等.面向深度学习的多模态融合技术研究综述[J].计算机工程,2020,46(5):1-11.

[4] 张婷婷,马明栋,王得玉.OCR文字识别技术的研究[J].计算机技术与发展,2020,30(4):85-88.

[5] 程春蕊,刘万军.高内聚低耦合软件架构的构建[J].计算机系统应用,2009,18(7):19-22.

【通联编辑:谢媛媛】