日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用Python進行文本分析-將PDF文件多進程批量處理為csv文件

來源: 責編: 時間:2023-11-14 09:10:11 284觀看
導讀在文本分析的過程中,將原始數據轉換為TXT文件非常關鍵,主要出于以下幾個方面的考慮:1.格式簡單與統一:TXT文件是一種簡單的文本格式,只包含純文本信息,不包含任何格式或樣式信息。這種簡單和統一的格式有助于減少在文本分

在文本分析的過程中,將原始數據轉換為TXT文件非常關鍵,主要出于以下幾個方面的考慮:MNb28資訊網——每日最新資訊28at.com

MNb28資訊網——每日最新資訊28at.com

1.格式簡單與統一:

  • TXT文件是一種簡單的文本格式,只包含純文本信息,不包含任何格式或樣式信息。這種簡單和統一的格式有助于減少在文本分析過程中可能出現的混淆或誤解。
  • 其他格式的文檔,如PDF或Word文檔,可能包含圖像、表格和其他非文本元素,還可能包含復雜的格式和樣式,這些都可能干擾文本分析的過程。

2. 便于文本預處理:

  • ? 文本分析通常需要對文本數據進行預處理,包括分詞、去停用詞、標準化等。TXT文件的簡單結構使得這些預處理任務更容易執行。MNb28資訊網——每日最新資訊28at.com

  • ? 與其他文件格式相比,TXT文件不包含任何復雜的格式或元數據,這有助于簡化預處理步驟,減少可能出現的錯誤和問題。

3.兼容性:

  • ? 大多數文本分析和自然語言處理(NLP)工具都能夠直接處理TXT文件。將原始數據轉換為TXT文件可以確保與這些工具的兼容性,從而簡化分析流程。MNb28資訊網——每日最新資訊28at.com

  • ? TXT文件是一種通用的文件格式,可以在不同的操作系統和軟件環境中輕松處理,而不需要特定的轉換或適配器。

4.節省資源:

  • ? TXT文件通常比其他文件格式更小,這有助于節省存儲空間和提高處理速度。較小的文件大小也意味著需要較少的計算資源來處理文本數據,從而提高分析效率。MNb28資訊網——每日最新資訊28at.com

  • ? 簡單的文本格式也意味著在處理時CPU和內存的消耗較低,這對于大規模文本分析任務來說是非常重要的。

5.便于文本挖掘和模式識別:

  • ? 純文本格式使得使用正則表達式和其他文本挖掘技術來識別和提取文本中的模式變得更為容易和直接。MNb28資訊網——每日最新資訊28at.com

  • ? 純文本數據也便于實現各種文本分析技術,如情感分析、主題建模和實體識別等。

6.可讀性和可檢查性:

  • ? 人類可以直接讀取和理解TXT文件,這對于檢查、調試和理解文本分析的結果非常重要。

7.數據清洗:

  • ? TXT文件的簡單性使得更容易識別和處理缺失值、錯誤和其他數據質量問題,從而保證文本分析的準確性和可靠性。MNb28資訊網——每日最新資訊28at.com

將原始數據轉換為TXT文件是實現有效和準確文本分析的一個基本步驟,它幫助簡化和標準化文本分析流程,從而提高分析的效率和質量。以下代碼可以用來將pdf文件轉換為txt文件。MNb28資訊網——每日最新資訊28at.com

pdf2txt.py

#!/usr/bin/env python  # 該行命令告訴操作系統使用 Python 解釋器執行此文件import sys  # 導入sys模塊,用于處理與Python解釋器和運行時環境有關的操作from pdfminer.pdfdocument import PDFDocument  # 從pdfminer模塊導入PDFDocument類,用于表示PDF文檔from pdfminer.pdfparser import PDFParser  # 從pdfminer模塊導入PDFParser類,用于解析PDF文檔from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter  # 從pdfminer模塊導入資源管理和頁面解釋類from pdfminer.pdfdevice import PDFDevice, TagExtractor  # 從pdfminer模塊導入PDF設備和標簽提取器類from pdfminer.pdfpage import PDFPage  # 從pdfminer模塊導入PDFPage類,用于表示PDF頁面from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter  # 從pdfminer模塊導入轉換器類,用于將PDF轉換為其他格式from pdfminer.cmapdb import CMapDB  # 從pdfminer模塊導入字符映射數據庫類from pdfminer.layout import LAParams  # 從pdfminer模塊導入布局分析參數類from pdfminer.image import ImageWriter  # 從pdfminer模塊導入圖像寫入類# 定義主函數,argv是一個包含命令行參數的列表def main(argv):    import getopt  # 導入getopt模塊,用于解析命令行參數    # 定義一個顯示用法的內部函數    def usage():        print ('usage: %s [-P password] [-o output] [-t text|html|xml|tag]'               ' [-O output_dir] [-c encoding] [-s scale] [-R rotation]'               ' [-Y normal|loose|exact] [-p pagenos] [-m maxpages]'               ' [-S] [-C] [-n] [-A] [-V] [-M char_margin] [-L line_margin]'               ' [-W word_margin] [-F boxes_flow] [-d] input.pdf ...' % argv[0])        return 100  # 返回一個錯誤代碼    try:        # 使用getopt解析命令行參數        (opts, args) = getopt.getopt(argv[1:], 'dP:o:t:O:c:s:R:Y:p:m:SCnAVM:W:L:F:')    except getopt.GetoptError:        return usage()  # 如果解析失敗,則顯示用法并退出    if not args: return usage()  # 如果沒有提供非選項參數(例如輸入文件),則顯示用法并退出    # 初始化一些變量    debug = 0  # 調試級別    password = b''  # PDF密碼    pagenos = set()  # 要處理的頁碼集    maxpages = 0  # 最大頁數    outfile = None  # 輸出文件名    outtype = None  # 輸出類型    imagewriter = None  # 圖像寫入對象    rotation = 0  # 旋轉角度    stripcontrol = False  # 是否剝離控制字符    layoutmode = 'normal'  # 布局模式    encoding = 'utf-8'  # 編碼方式    pageno = 1  # 頁面號    scale = 1  # 縮放因子    caching = True  # 是否緩存    showpageno = True  # 是否顯示頁面號    laparams = LAParams()  # 布局分析參數對象    for (k, v) in opts:  # 遍歷選項和值        if k == '-d': debug += 1  # 設置調試級別        elif k == '-P': password = v.encode('ascii')  # 設置密碼        elif k == '-o': outfile = v  # 設置輸出文件名        elif k == '-t': outtype = v  # 設置輸出類型        elif k == '-O': imagewriter = ImageWriter(v)  # 創建圖像寫入對象        elif k == '-c': encoding = v  # 設置編碼方式        elif k == '-s': scale = float(v)  # 設置縮放因子        elif k == '-R': rotation = int(v)  # 設置旋轉角度        elif k == '-Y': layoutmode = v  # 設置布局模式        elif k == '-p': pagenos.update(int(x)-1 for x in v.split(','))  # 更新頁碼集        elif k == '-m': maxpages = int(v)  # 設置最大頁數        elif k == '-S': stripcontrol = True  # 啟用剝離控制字符        elif k == '-C': caching = False  # 禁用緩存        elif k == '-n': laparams = None  # 禁用布局分析參數        elif k == '-A': laparams.all_texts = True  # 啟用所有文本選項        elif k == '-V': laparams.detect_vertical = True  # 啟用垂直檢測選項        elif k == '-M': laparams.char_margin = float(v)  # 設置字符邊距        elif k == '-W': laparams.word_margin = float(v)  # 設置單詞邊距        elif k == '-L': laparams.line_margin = float(v)  # 設置行邊距        elif k == '-F': laparams.boxes_flow = float(v)  # 設置框流    # 設置調試級別    PDFDocument.debug = debug    PDFParser.debug = debug    CMapDB.debug = debug    PDFPageInterpreter.debug = debug    # 創建PDF資源管理器對象    rsrcmgr = PDFResourceManager(caching=caching)    # 根據輸出類型和選項創建相應的PDF設備對象    if not outtype:        outtype = 'text'  # 默認為文本輸出        if outfile:            if outfile.endswith('.htm') or outfile.endswith('.html'):                outtype = 'html'  # 如果輸出文件名以.htm或.html結尾,則設置為html輸出            elif outfile.endswith('.xml'):                outtype = 'xml'  # 如果輸出文件名以.xml結尾,則設置為xml輸出            elif outfile.endswith('.tag'):                outtype = 'tag'  # 如果輸出文件名以.tag結尾,則設置為tag輸出            elif outtype == 'tag':        device = TagExtractor(rsrcmgr, outfp)  # 如果輸出類型為'tag',則創建TagExtractor對象    else:        return usage()  # 如果不識別的輸出類型,則顯示用法并退出    for fname in args:  # 遍歷所有輸入文件名        with open(fname, 'rb') as fp:  # 以二進制讀模式打開文件            interpreter = PDFPageInterpreter(rsrcmgr, device)  # 創建PDF頁面解釋器對象            # 遍歷PDF頁面,獲取頁面對象            for page in PDFPage.get_pages(fp, pagenos,                                          maxpages=maxpages, password=password,                                          caching=caching, check_extractable=True):                page.rotate = (page.rotate+rotation) % 360  # 設置頁面旋轉角度                interpreter.process_page(page)  # 處理每個頁面    device.close()  # 關閉設備對象,釋放資源    outfp.close()  # 關閉輸出文件,釋放資源    return  # 從主函數返回# 檢查此模塊是否作為主模塊運行if __name__ == '__main__':    sys.exit(main(sys.argv))  # 如果是,則調用main函數,并使用命令行參數列表作為參數

convertPDF.py

#!/usr/bin/env python3"""Script to convert PDFs to text files."""import  unicodedata, os, pdf2txt, datetimeimport multiprocessingdef convertPDFToText(i, ID, newDir, fileNamePDF):    print('Trying to convert: ' + str(i) + ', ' + ID)  # 輸出正在嘗試轉換的文件信息    try:        pdf2txt.main(['-o', newDir + '/' + ID + '.txt', fileNamePDF])  # 調用pdf2txt.main來轉換PDF為文本        print('Successfully converted: ' + ID)  # 轉換成功時的輸出    except Exception as e:        print('Failed to convert: ' + ID + f', Error: {e}')  # 轉換失敗時的輸出def process_pdfs(pdf_list):    with multiprocessing.Pool(20) as pool:  # 創建一個包含20個進程的進程池        pool.starmap(convertPDFToText, pdf_list)  # 使用starmap來并行處理pdf_list中的每個元素,每個元素都是一個元組,它將被解包為convertPDFToText的參數if __name__ == '__main__':    directory = '../../Data/PDF/work'    os.chdir(directory)  # 更改當前工作目錄至PDF文件目錄    # 指定保存轉換后文件的目錄    newDir = '../TXT/work'    # os.makedirs(newDir)  # 創建新目錄(如果需要的話)    print('Placing converted files in: ' + newDir)  # 輸出轉換后文件將被放置的目錄    pdf_list = []  # 創建一個空列表,用于保存將傳遞給convertPDFToText的參數元組    i = 0  # 初始化計數器    for fileNamePDF in os.listdir('./'):  # 遍歷當前目錄中的所有文件        i += 1  # 計數器遞增        if fileNamePDF.find(".pdf") == -1:  # 如果文件不是PDF,跳過            continue        ID = fileNamePDF[:-4]  # 從文件名中獲取ID(去掉.pdf后綴)        if os.path.isfile('../TXT/' + ID + '.txt'):  # 如果已經存在對應的文本文件,跳過            continue        pdf_list.append((i, ID, newDir, fileNamePDF))  # 將參數元組添加到pdf_list中    process_pdfs(pdf_list)  # 調用process_pdfs函數,傳遞pdf_list以并行處理PDF文件


MNb28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-24322-0.html使用Python進行文本分析-將PDF文件多進程批量處理為csv文件

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Golang 中的 Context 包

下一篇: 解決Docker網絡沖突的方法

標簽:
  • 熱門焦點
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 蘋果公司要求三星和LG Display生產「無邊框」OLED iPhone顯示屏

    據 The Elec 報道,蘋果已要求其供應商為未來的 iPhone 型號開發「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發新的 OLED 顯示面
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 主站蜘蛛池模板: 海林市| 宜兰县| 新安县| 三穗县| 淮南市| 沁源县| 衡水市| 邢台市| 东丽区| 巫溪县| 南漳县| 和顺县| 尉氏县| 嘉峪关市| 郓城县| 和林格尔县| 温泉县| 开鲁县| 巨鹿县| 蛟河市| 荆门市| 南城县| 奉节县| 浦江县| 万年县| 金坛市| 长沙市| 五莲县| 平舆县| 平泉县| 汕头市| 长兴县| 余江县| 视频| 威远县| 深州市| 七台河市| 军事| 太仆寺旗| 吴川市| 文昌市|