摘要:論文介紹了一個基于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.
【通聯編輯:謝媛媛】