摘要:論文介紹了一個(gè)基于Python及多個(gè)第三方庫(kù)實(shí)現(xiàn)的多模態(tài)文件內(nèi)容檢索程序。該程序能夠識(shí)別并解析文本、圖片、PDF、Word、PPT等多種類(lèi)型的文件,從而實(shí)現(xiàn)關(guān)鍵詞匹配檢索,大大提升了檢索的性能和準(zhǔn)確性。論文詳細(xì)闡述了程序的設(shè)計(jì)思路和實(shí)現(xiàn)過(guò)程,并通過(guò)有效測(cè)試驗(yàn)證了程序的可靠性。該研究為多模態(tài)文件內(nèi)容檢索領(lǐng)域提供了有益參考。
關(guān)鍵詞:多模態(tài);內(nèi)容檢索;文件解析;程序設(shè)計(jì)與開(kāi)發(fā)
中圖分類(lèi)號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2024)23-0075-03
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID)
0 引言
隨著數(shù)字化時(shí)代的發(fā)展,每個(gè)人電腦中存儲(chǔ)的不同模態(tài)數(shù)據(jù)呈爆炸式增長(zhǎng)。如何從海量文件中快速準(zhǔn)確地檢索出所需信息,成為一項(xiàng)挑戰(zhàn)。傳統(tǒng)的文件檢索工具主要依賴文件名和元數(shù)據(jù)[1],對(duì)文件內(nèi)容無(wú)能為力,存在較大局限性。因此,亟須一種能夠深入文件內(nèi)容實(shí)現(xiàn)精準(zhǔn)跨模態(tài)[2]檢索的新方法。
本論文設(shè)計(jì)并實(shí)現(xiàn)了一種新穎的多模態(tài)文件內(nèi)容檢索程序,它能夠跨文本、圖像等模態(tài)[3]對(duì)文件內(nèi)容進(jìn)行深度分析和檢索,極大提升了檢索效率和準(zhǔn)確性,彌補(bǔ)了現(xiàn)有檢索工具的不足,具有重要的實(shí)踐價(jià)值。
1 關(guān)鍵技術(shù)
在構(gòu)建多模態(tài)文件內(nèi)容檢索程序時(shí),本論文選擇了Python 3.10.9作為開(kāi)發(fā)語(yǔ)言。在實(shí)現(xiàn)邏輯上,程序首先需要將用戶上傳的文件進(jìn)行類(lèi)型識(shí)別,然后根據(jù)不同的文件類(lèi)型調(diào)用相應(yīng)的處理庫(kù)進(jìn)行內(nèi)容提取。對(duì)于提取出的內(nèi)容,程序會(huì)進(jìn)行統(tǒng)一的格式化和處理,以便下一步的內(nèi)容檢索。
為了確保程序的圖形用戶界面的直觀性和用戶友好性,本論文采用了Python的標(biāo)準(zhǔn)GUI工具包接口Tkinter,其備有豐富的控件和布局管理器。
在處理多模態(tài)文件數(shù)據(jù)時(shí),程序依賴于一系列外部庫(kù)來(lái)提取不同格式文件中的內(nèi)容信息。這些庫(kù)為程序提供了強(qiáng)大的技術(shù)支持,使程序能夠更高效地解析各種模態(tài)類(lèi)型的文件內(nèi)容數(shù)據(jù)。
在處理圖像文件時(shí),程序引入pytesseract庫(kù),這是一個(gè)基于Tesseract OCR[4]引擎的Python工具,用于從圖像中提取文本。本程序利用該庫(kù)對(duì)圖像文件進(jìn)行解析,獲取其中的文本信息用于后續(xù)檢索。
在處理PDF文件時(shí),程序引入pdfminer.six庫(kù),這是一個(gè)專(zhuān)為提取復(fù)雜結(jié)構(gòu)的PDF文檔信息而設(shè)計(jì)的Python庫(kù),用于從PDF文件中提取文本、圖像和元數(shù)據(jù)。本程序利用該庫(kù)對(duì)PDF文檔進(jìn)行文本抽取,獲取其中可解析的文本信息用于后續(xù)檢索。
在處理Word文件時(shí),程序引入python-docx庫(kù)和python-doc庫(kù),它們是用于讀取和操作Microsoft Word文件的Python庫(kù),python-docx針對(duì)擴(kuò)展名為docx的文件,python-doc則針對(duì)doc文件。本程序利用這兩個(gè)庫(kù)對(duì)Word文件進(jìn)行信息提取,獲取其中文本信息便于后續(xù)關(guān)鍵詞內(nèi)容檢索。
在處理PPT演示文檔文件時(shí),程序引入python-pptx庫(kù),這是一個(gè)用于讀取和操作Microsoft PowerPoint演示文稿的Python庫(kù),用于解析PPT文件內(nèi)部結(jié)構(gòu),讀取每頁(yè)幻燈片的文本、圖片、圖表數(shù)據(jù)內(nèi)容。本程序利用該庫(kù)對(duì)PPT文件進(jìn)行解析,在獲取PPT的文本框、圖片、圖表結(jié)構(gòu)后,進(jìn)一步分類(lèi)處理進(jìn)行文本提取,用于后續(xù)檢索。
2 程序設(shè)計(jì)
本程序是基于Python語(yǔ)言開(kāi)發(fā)的一種脫機(jī)程序,采用模塊化架構(gòu),可單獨(dú)運(yùn)行于Windows本地環(huán)境,主要用于多模態(tài)文件的內(nèi)容檢索。程序遵循高內(nèi)聚低耦合[5]的設(shè)計(jì)思想,分為界面層和業(yè)務(wù)邏輯層。其中,界面層以客戶端形式呈現(xiàn)窗口頁(yè)面,包括文件路徑選擇、關(guān)鍵詞輸入和檢索結(jié)果展示等功能,用于用戶交互操作。業(yè)務(wù)邏輯層則區(qū)分為總控程序、不同類(lèi)型文件解析程序和公共方法程序。程序的模塊化結(jié)構(gòu)如圖1所示。
該程序的執(zhí)行流程如下:
1) 雙擊search.exe啟動(dòng)程序;
2) 在窗口頁(yè)面,用戶從本地文件系統(tǒng)中指定待檢索的目錄或文件夾;
3) 用戶輸入查詢關(guān)鍵詞;
4) 點(diǎn)擊查詢按鈕;
5) 程序遍歷用戶選定路徑及其所有子路徑;
6) 程序根據(jù)文件的類(lèi)型執(zhí)行相應(yīng)的內(nèi)容解析方法;
7) 程序?qū)⒂脩糨斎氲年P(guān)鍵詞與解析出的文件內(nèi)容進(jìn)行匹配;
8) 程序?qū)⑵ヅ浣Y(jié)果以表格形式展示在結(jié)果欄。
3 實(shí)現(xiàn)與測(cè)試
3.1 代碼實(shí)現(xiàn)
按照程序設(shè)計(jì)的模塊結(jié)構(gòu)圖,程序的主要代碼分為四大部分:main.py(主程序入口)、GUI.py(圖形用戶界面)、fileSearch.py(文件內(nèi)容檢索邏輯)和tool.py(公共方法)。這種模塊化設(shè)計(jì)使得每個(gè)模塊的職責(zé)更加單一和清晰,降低了模塊間的耦合度,同時(shí)也利于后續(xù)程序的擴(kuò)展和維護(hù)。
main.py是整個(gè)程序的入口點(diǎn),負(fù)責(zé)初始化必要的資源,加載其他模塊,并控制程序的執(zhí)行流程。這個(gè)文件定義了程序的主函數(shù),該函數(shù)主要負(fù)責(zé)啟動(dòng)圖形用戶界面、處理用戶輸入、調(diào)用文件檢索邏輯等。
GUI.py負(fù)責(zé)構(gòu)建和管理用戶與程序之間的交互界面,使用圖形化元素,如按鈕、輸入框、表格等來(lái)呈現(xiàn)程序的功能和結(jié)果。GUI.py繪制了直觀的三行欄布局的用戶界面,自上而下分為文件路徑選擇框、關(guān)鍵詞輸入框和結(jié)果展示區(qū)。同時(shí),GUI.py也定義了事件處理邏輯,當(dāng)用戶與界面進(jìn)行交互時(shí),如點(diǎn)擊按鈕、輸入關(guān)鍵詞等,GUI.py會(huì)捕獲這些事件,并將相應(yīng)的數(shù)據(jù)由command變量傳遞給其他模塊文件進(jìn)行處理。
fileSearch.py是程序的核心處理代碼,用于接收來(lái)自搜索按鈕的檢索請(qǐng)求,負(fù)責(zé)對(duì)用戶選定路徑和子目錄下的所有文件夾和文件進(jìn)行遍歷,通過(guò)判斷文件類(lèi)型,調(diào)用不同方法解析文件內(nèi)容,并使用文本匹配算法定位關(guān)鍵詞位置,最后將檢索結(jié)果傳回窗口,展示在結(jié)果欄。
主方法search()代碼示例如圖2所示,首先定義了一個(gè)matching_results列表用于存儲(chǔ)匹配的結(jié)果數(shù)據(jù),通過(guò)os.walk()方法遍歷界面層獲取到的檢索路徑下的文件夾,并根據(jù)文件類(lèi)型分別進(jìn)行解析和匹配處理,并將最終結(jié)果存儲(chǔ)在matching_results列表中。對(duì)于可能出現(xiàn)的文件類(lèi)型無(wú)法識(shí)別、解析結(jié)果出錯(cuò)等異常,search()方法也進(jìn)行了捕獲,確保程序出錯(cuò)前已匹配的結(jié)果可以正常返回。
針對(duì)search()方法中根據(jù)文件類(lèi)型調(diào)用的具體方法,以圖片內(nèi)容解析搜索的ocr_search_images()方法為例,如圖3所示。首先,通過(guò)對(duì)pytesseract庫(kù)的tesseract_cmd變量進(jìn)行賦值,指定本地安裝的Tesseract OCR工具路徑,該路徑位于F盤(pán)下的絕對(duì)路徑,以便后續(xù)正確調(diào)用OCR工具。然后,通過(guò)調(diào)用pytesseract庫(kù)下的image_to_string方法解析圖片內(nèi)容,其中l(wèi)ang=chi_sim+eng參數(shù)允許圖像文字識(shí)別簡(jiǎn)體中文和英文。最后,通過(guò)search_keywords_position()公共方法進(jìn)行文本內(nèi)容和關(guān)鍵詞的匹配,并返回結(jié)果remarks。
tool.py包含了一系列公共方法和工具函數(shù),用于輔助文件內(nèi)容檢索。這些方法可以在多個(gè)模塊中重復(fù)使用,降低了代碼的冗余度,同時(shí)提高了代碼的可維護(hù)性和可重用性。search_keywords_position()就位于tool.py中,主要用于關(guān)鍵詞和文本內(nèi)容的匹配,確定具體位置,并返回關(guān)鍵詞周邊指定數(shù)量的文本,代碼如圖4所示。該方法使用re.finditer查找所有匹配關(guān)鍵詞的位置,同時(shí)使用re.escape()方法來(lái)確保用戶輸入的關(guān)鍵詞中的任何特殊字符都被正確轉(zhuǎn)義,m.span()返回每個(gè)匹配項(xiàng)的起始和結(jié)束位置。接著,遍歷所有匹配關(guān)鍵詞的位置,將關(guān)鍵詞前后contentlength長(zhǎng)度的字符也展示出來(lái),便于用戶聯(lián)系上下文,確定搜索結(jié)果的準(zhǔn)確性。
3.2 程序測(cè)試
為檢測(cè)多模態(tài)文件內(nèi)容檢索程序的有效性和實(shí)用性,在Windows系統(tǒng)的D盤(pán)目錄下創(chuàng)建了一個(gè)名為test的文件夾,用于存放測(cè)試所需的文件。該文件夾中包含了Word文檔(.docx) 、圖片(.jpg、.png等)、PDF文件(.pdf) 和PPT演示文稿(.pptx) 等多種模態(tài)類(lèi)型的文件。這些文件的文件名或內(nèi)容被刻意設(shè)計(jì)以包含關(guān)鍵詞“多”、拼音“duo”、同音字“朵”、形近字“侈”或不包含這些關(guān)鍵詞,并且在test文件夾下創(chuàng)建了多層子目錄,同時(shí)也設(shè)計(jì)了空文件夾、空文檔等特殊場(chǎng)景,以便全面測(cè)試程序的多模態(tài)搜索功能。
接下來(lái),雙擊search.exe文件啟動(dòng)程序,點(diǎn)擊窗口“選擇路徑”按鈕,選定D:/test作為搜索目錄,然后在關(guān)鍵詞輸入框中依次輸入“多”“duo”“朵”“侈”,點(diǎn)擊搜索。程序開(kāi)始遍歷D:/test下所有文件,根據(jù)文件類(lèi)型的不同,調(diào)用相應(yīng)方法進(jìn)行解析。一旦找到匹配的文件和內(nèi)容,程序會(huì)將搜索結(jié)果存儲(chǔ)在matching_results字典列表中。這個(gè)列表包含了每個(gè)匹配文件的相關(guān)信息,如文件類(lèi)型、文件路徑以及匹配內(nèi)容的具體位置或附近字符。程序?qū)⑦@個(gè)列表結(jié)果展示在結(jié)果區(qū)。對(duì)于文本文件,程序會(huì)顯示包含關(guān)鍵詞“多”的完整句子或附近各5個(gè)字符的內(nèi)容,以便用戶了解關(guān)鍵詞出現(xiàn)的上下文;對(duì)于PPT文件,程序會(huì)顯示關(guān)鍵詞出現(xiàn)的幻燈片頁(yè)數(shù)。測(cè)試結(jié)果如圖5所示,包含“多”關(guān)鍵詞的文件結(jié)果見(jiàn)圖5(a),包含“侈”關(guān)鍵詞的文件結(jié)果見(jiàn)圖5(d);同時(shí),ppttest.pptx文件被設(shè)計(jì)為第一頁(yè)幻燈片包含“duo”關(guān)鍵詞,第二頁(yè)包含“朵”關(guān)鍵詞,檢索結(jié)果如圖5(b)、圖5(c)所示,檢索結(jié)果正確。
4 總結(jié)
本論文實(shí)現(xiàn)了一種能夠?qū)ξ谋尽D像等多種模態(tài)文件內(nèi)容進(jìn)行解析檢索的程序,極大地提升了用戶在不同文件類(lèi)型中搜索關(guān)鍵信息的效率和準(zhǔn)確性。
該程序打破了傳統(tǒng)單一模態(tài)檢索的局限,融合了OCR、PDF解析等多種文檔處理技術(shù)。這種程序設(shè)計(jì)理念為多模態(tài)文件內(nèi)容檢索領(lǐng)域帶來(lái)了技術(shù)上的突破。同時(shí),隨著內(nèi)容解析算法和技術(shù)的逐漸成熟,該程序未來(lái)可支持更多視頻和3D模型等文件類(lèi)型,推動(dòng)多模態(tài)文件內(nèi)容檢索技術(shù)的持續(xù)發(fā)展和創(chuàng)新。
參考文獻(xiàn):
[1] 周志成,柳綱,楊宇峰,等.企業(yè)在線文檔管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].華北理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2020,42(2):133-140.
[2] 高迪輝,盛立杰,許小冬,等.圖文跨模態(tài)檢索的聯(lián)合特征方法[J/OL].西安電子科技大學(xué)學(xué)報(bào),1-11.[2024-04-22].https://doi.org/10.19665/j.issn1001-2400.20240302.
[3] 何俊,張彩慶,李小珍,等.面向深度學(xué)習(xí)的多模態(tài)融合技術(shù)研究綜述[J].計(jì)算機(jī)工程,2020,46(5):1-11.
[4] 張婷婷,馬明棟,王得玉.OCR文字識(shí)別技術(shù)的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(4):85-88.
[5] 程春蕊,劉萬(wàn)軍.高內(nèi)聚低耦合軟件架構(gòu)的構(gòu)建[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2009,18(7):19-22.
【通聯(lián)編輯:謝媛媛】