国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數(shù)據(jù)分析遇到PDF文本,怎么用Python批量提取內(nèi)容

cloud / 2283人閱讀

摘要:復(fù)雜系統(tǒng)仿真的微博客虛假信息擴(kuò)散模型研究面向影子分析的社交媒體競(jìng)爭(zhēng)情報(bào)搜集面向人機(jī)協(xié)同的移動(dòng)互聯(lián)網(wǎng)政務(wù)門(mén)戶探析經(jīng)驗(yàn)證。微博客的企業(yè)競(jìng)爭(zhēng)情報(bào)搜集移動(dòng)社交媒體用戶隱私保護(hù)對(duì)策研究注意這里的提示,原先的個(gè)文件沒(méi)有被再次抽取,只有個(gè)新文件被抽取。

本文為你展示,如何用Python把許多PDF文件的文本內(nèi)容批量提取出來(lái),并且整理存儲(chǔ)到數(shù)據(jù)框中,以便于后續(xù)的數(shù)據(jù)分析。

問(wèn)題

最近,讀者們?cè)诤笈_(tái)的留言,愈發(fā)五花八門(mén)了。

寫(xiě)了幾篇關(guān)于自然語(yǔ)言處理的文章后,一種呼聲漸強(qiáng):

pdf中的文本內(nèi)容,有沒(méi)有什么方便的方法提取出來(lái)呢?

我能體會(huì)到讀者的心情。

我展示的例子中,文本數(shù)據(jù)都是直接可以讀入數(shù)據(jù)框工具做處理的。它們可能來(lái)自開(kāi)放數(shù)據(jù)集合、網(wǎng)站API,或者爬蟲(chóng)。

但是,有的時(shí)候,你會(huì)遇到需要處理指定格式數(shù)據(jù)的問(wèn)題。

例如pdf。

許多的學(xué)術(shù)論文、研究報(bào)告,甚至是資料分享,都采用這種格式發(fā)布。

這時(shí)候,已經(jīng)掌握了諸多自然語(yǔ)言分析工具的你,會(huì)頗有“拔劍四顧心茫然”的感覺(jué)——明明知道如何處理其中的文本信息,但就是隔著一個(gè)格式轉(zhuǎn)換的問(wèn)題,做不來(lái)。

怎么辦?

辦法自然是有的,例如專用工具、在線轉(zhuǎn)換服務(wù)網(wǎng)站,甚至還可以手動(dòng)復(fù)制粘貼嘛。

但是,咱們是看重效率的,對(duì)不對(duì)?

上述辦法,有的需要在網(wǎng)上傳輸大量?jī)?nèi)容,花費(fèi)時(shí)間較多,而且可能帶來(lái)安全和隱私問(wèn)題;有的需要專門(mén)花錢購(gòu)買;有的干脆就不現(xiàn)實(shí)。

怎么辦?

好消息是,Python就可以幫助你高效、快速地批量提取pdf文本內(nèi)容,而且和數(shù)據(jù)整理分析工具無(wú)縫銜接,為你后續(xù)的分析處理做好基礎(chǔ)服務(wù)工作。

數(shù)據(jù)

為了更好地說(shuō)明流程,我為你準(zhǔn)備好了一個(gè)壓縮包。

里面包括本教程的代碼,以及我們要用到的數(shù)據(jù)。

請(qǐng)你到 這個(gè)網(wǎng)址 下載本教程配套的壓縮包。

下載后解壓,你會(huì)在生成的目錄(下稱“演示目錄”)里面看到以下內(nèi)容。

演示目錄里面包含:

Pipfile: pipenv 配置文件,用來(lái)準(zhǔn)備咱們變成需要用到的依賴包。后文會(huì)講解使用方法;
pdf_extractor.py: 利用pdfminer.six編寫(xiě)的輔助函數(shù)。有了它你就可以直接調(diào)用pdfminer提供的pdf文本內(nèi)容抽取功能,而不必考慮一大堆惱人的參數(shù);
demo.ipynb: 已經(jīng)為你寫(xiě)好的本教程 Python 源代碼 (Jupyter Notebook格式)。
另外,演示目錄中還包括了2個(gè)文件夾。

這兩個(gè)文件夾里面,都是中文pdf文件,用來(lái)給你展示pdf內(nèi)容抽取。

pdf文件夾內(nèi)容如下:

newpdf文件夾內(nèi)容如下:

代碼

首先,我們讀入一些模塊,以進(jìn)行文件操作。

import glob
import os

前文提到過(guò),演示目錄下,有兩個(gè)文件夾,分別是pdf和newpdf。

我們指定 pdf 文件所在路徑為其中的pdf文件夾。

pdf_path = "pdf/"

我們希望獲得所有 pdf 文件的路徑。用glob,一條命令就能完成這個(gè)功能。

pdfs = glob.glob("{}/*.pdf".format(pdf_path))

看看我們獲得的 pdf 文件路徑是否正確。

pdfs
["pdf/復(fù)雜系統(tǒng)仿真的微博客虛假信息擴(kuò)散模型研究.pdf",
 "pdf/面向影子分析的社交媒體競(jìng)爭(zhēng)情報(bào)搜集.pdf",
 "pdf/面向人機(jī)協(xié)同的移動(dòng)互聯(lián)網(wǎng)政務(wù)門(mén)戶探析.pdf"]

經(jīng)驗(yàn)證。準(zhǔn)確無(wú)誤。

下面我們利用 pdfminer 來(lái)從 pdf 文件中抽取內(nèi)容。我們需要從輔助 Python 文件 pdf_extractor.py 中讀入函數(shù) extract_pdf_content。

from pdf_extractor import extract_pdf_content

用這個(gè)函數(shù),我們嘗試從 pdf 文件列表中的第一篇里,抽取內(nèi)容,并且把文本保存在 content 變量里。

content = extract_pdf_content(pdfs[0])

我們看看 content 里都有什么:

content


顯然,內(nèi)容抽取并不完美,頁(yè)眉頁(yè)腳等信息都混了進(jìn)來(lái)。

不過(guò),對(duì)于我們的許多文本分析用途來(lái)說(shuō),這無(wú)關(guān)緊要。

你會(huì)看到 content 的內(nèi)容里面有許多的 n,這是什么呢?

我們用 print 函數(shù),來(lái)顯示 content 的內(nèi)容。

print(content)

可以清楚看到,那些 n 是換行符。

通過(guò)一個(gè) pdf 文件的抽取測(cè)試,我們建立了信心。

下面,我們?cè)摻⑥o典,批量抽取和存儲(chǔ)內(nèi)容了。

mydict = {}

我們遍歷 pdfs 列表,把文件名稱(不包含目錄)作為鍵值。這樣,我們可以很容易看到,哪些pdf文件已經(jīng)被抽取過(guò)了,哪些還沒(méi)有抽取。

為了讓這個(gè)過(guò)程更為清晰,我們讓Python輸出正在抽取的 pdf 文件名。

for pdf in pdfs:
    key = pdf.split("/")[-1]
    if not key in mydict:
        print("Extracting content from {} ...".format(pdf))
        mydict[key] = extract_pdf_content(pdf)

抽取過(guò)程中,你會(huì)看到這些輸出信息:

Extracting content from pdf/復(fù)雜系統(tǒng)仿真的微博客虛假信息擴(kuò)散模型研究.pdf ...
Extracting content from pdf/面向影子分析的社交媒體競(jìng)爭(zhēng)情報(bào)搜集.pdf ...
Extracting content from pdf/面向人機(jī)協(xié)同的移動(dòng)互聯(lián)網(wǎng)政務(wù)門(mén)戶探析.pdf ...

看看此時(shí)字典中的鍵值都有哪些:

mydict.keys()

dict_keys(["復(fù)雜系統(tǒng)仿真的微博客虛假信息擴(kuò)散模型研究.pdf", "面向影子分析的社交媒體競(jìng)爭(zhēng)情報(bào)搜集.pdf", "面向人機(jī)協(xié)同的移動(dòng)互聯(lián)網(wǎng)政務(wù)門(mén)戶探析.pdf"])

一切正常。

下面我們調(diào)用pandas,把字典變成數(shù)據(jù)框,以利于分析。

import pandas as pd

下面這條語(yǔ)句,就可以把字典轉(zhuǎn)換成數(shù)據(jù)框了。注意后面的reset_index()把原先字典鍵值生成的索引也轉(zhuǎn)換成了普通的列。

df = pd.DataFrame.from_dict(mydict, orient="index").reset_index()

然后我們重新命名列,以便于后續(xù)使用。

df.columns = ["path", "content"]

此時(shí)的數(shù)據(jù)框內(nèi)容如下:

df

可以看到,我們的數(shù)據(jù)框擁有了pdf文件信息和全部文本內(nèi)容。這樣你就可以使用關(guān)鍵詞抽取、情感分析、相似度計(jì)算等等諸多分析工具了。

篇幅所限,我們這里只用一個(gè)字符數(shù)量統(tǒng)計(jì)的例子來(lái)展示基本分析功能。

我們讓 Python 幫我們統(tǒng)計(jì)抽取內(nèi)容的長(zhǎng)度。

df["length"] = df.content.apply(lambda x: len(x))

此時(shí)的數(shù)據(jù)框內(nèi)容發(fā)生以下變化:

df

多出的一列,就是 pdf 文本內(nèi)容的字符數(shù)量。

為了在 Jupyter Notebook 里面正確展示繪圖結(jié)果,我們需要使用以下語(yǔ)句:

%matplotlib inline

下面,我們讓 Pandas 把字符長(zhǎng)度一列的信息用柱狀圖標(biāo)示出來(lái)。為了顯示的美觀,我們?cè)O(shè)置了圖片的長(zhǎng)寬比例,并且把對(duì)應(yīng)的pdf文件名稱以傾斜45度來(lái)展示。

如果對(duì)Python編程、網(wǎng)絡(luò)爬蟲(chóng)、機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、web開(kāi)發(fā)、人工智能、面試經(jīng)驗(yàn)交流。感興趣可以519970686,群內(nèi)會(huì)有不定期的發(fā)放免費(fèi)的資料鏈接,這些資料都是從各個(gè)技術(shù)網(wǎng)站搜集、整理出來(lái)的,如果你有好的學(xué)習(xí)資料可以私聊發(fā)我,我會(huì)注明出處之后分享給大家。

import matplotlib.pyplot as plt
plt.figure(figsize=(14, 6))
df.set_index("path").length.plot(kind="bar")
plt.xticks(rotation=45)


可視化分析完成。

下面我們把剛才的分析流程整理成函數(shù),以便于將來(lái)更方便地調(diào)用。

我們先整合pdf內(nèi)容提取到字典的模塊:

def get_mydict_from_pdf_path(mydict, pdf_path):
    pdfs = glob.glob("{}/*.pdf".format(pdf_path))
    for pdf in pdfs:
        key = pdf.split("/")[-1]
        if not key in mydict:
            print("Extracting content from {} ...".format(pdf))
            mydict[key] = extract_pdf_content(pdf)
    return mydict

這里輸入是已有詞典和pdf文件夾路徑。輸出為新的詞典。

你可能會(huì)納悶為何還要輸入“已有詞典”。別著急,一會(huì)兒我用實(shí)際例子展示給你看。

下面這個(gè)函數(shù)非常直白——就是把詞典轉(zhuǎn)換成數(shù)據(jù)框。

def make_df_from_mydict(mydict):
    df = pd.DataFrame.from_dict(mydict, orient="index").reset_index()
    df.columns = ["path", "content"]
    return df

最后一個(gè)函數(shù),用于繪制統(tǒng)計(jì)出來(lái)的字符數(shù)量。

def draw_df(df):
    df["length"] = df.content.apply(lambda x: len(x))
    plt.figure(figsize=(14, 6))
    df.set_index("path").length.plot(kind="bar")
    plt.xticks(rotation=45)

函數(shù)已經(jīng)編好,下面我們來(lái)嘗試一下。

還記得演示目錄下有個(gè)子目錄,叫做newpdf對(duì)吧?

我們把其中的2個(gè)pdf文件,移動(dòng)到pdf目錄下面。

這樣pdf目錄下面,就有了5個(gè)文件:

我們執(zhí)行新整理出的3個(gè)函數(shù)。

首先輸入已有的詞典(注意此時(shí)里面已有3條記錄),pdf文件夾路徑?jīng)]變化。輸出是新的詞典。

mydict = get_mydict_from_pdf_path(mydict, pdf_path)

Extracting content from pdf/微博客 Twitter 的企業(yè)競(jìng)爭(zhēng)情報(bào)搜集.pdf ...
Extracting content from pdf/移動(dòng)社交媒體用戶隱私保護(hù)對(duì)策研究.pdf ...

注意這里的提示,原先的3個(gè)pdf文件沒(méi)有被再次抽取,只有2個(gè)新pdf文件被抽取。

咱們這里一共只有5個(gè)文件,所以你直觀上可能無(wú)法感受出顯著的區(qū)別。

但是,假設(shè)你原先已經(jīng)用幾個(gè)小時(shí),抽取了成百上千個(gè)pdf文件信息,結(jié)果你的老板又丟給你3個(gè)新的pdf文件……

如果你必須從頭抽取信息,恐怕會(huì)很崩潰吧。

這時(shí)候,使用咱們的函數(shù),你可以在1分鐘之內(nèi)把新的文件內(nèi)容追加進(jìn)去。

這差別,不小吧?

下面我們用新的詞典,構(gòu)建數(shù)據(jù)框。

df = make_df_from_mydict(mydict)

我們繪制新的數(shù)據(jù)框里,pdf抽取文本字符數(shù)量。結(jié)果如下:

draw_df(df)

小結(jié)

總結(jié)一下,本文為你介紹了以下知識(shí)點(diǎn):

如何用glob批量讀取目錄下指定格式的文件路徑;
如何用pdfminer從pdf文件中抽取文本信息;
如何構(gòu)建詞典,存儲(chǔ)與鍵值(本文中為文件名)對(duì)應(yīng)的內(nèi)容,并且避免重復(fù)處理數(shù)據(jù);
如何將詞典數(shù)據(jù)結(jié)構(gòu)輕松轉(zhuǎn)換為Pandas數(shù)據(jù)框,以便于后續(xù)數(shù)據(jù)分析。
如何用matplotlib和pandas自帶的繪圖函數(shù)輕松繪制柱狀統(tǒng)計(jì)圖形。

討論

你之前做的數(shù)據(jù)分析工作中,遇到過(guò)需要從pdf文件抽取文本的任務(wù)嗎?你是如何處理的?有沒(méi)有更好的工具與方法?歡迎留言,把你的經(jīng)驗(yàn)和思考分享給大家,我們一起交流討論。

出處 https://blog.csdn.net/Stephen...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44913.html

相關(guān)文章

  • 批量截取pdf文件

    摘要:能獲取頁(yè)面中文本的準(zhǔn)確位置,以及字體或行等其他信息。安裝修改的源碼利用截取中的某幾頁(yè),如果的中文字編碼為編碼,則無(wú)法解析。在簡(jiǎn)體中文操作系統(tǒng)中,編碼代表編碼。其一在文件中第行,改為此處是為了適應(yīng)含有的編碼的中文字符,提供對(duì)其的解碼能力。 任務(wù) 現(xiàn)在我們有大量的pdf文件,我們想要截取每個(gè)文件中感興趣的一部分,比如,我們下載了3500份上市公司的年度報(bào)告,我們想要找到包含關(guān)鍵審計(jì)事項(xiàng)部分...

    yzzz 評(píng)論0 收藏0
  • 爬蟲(chóng) - 收藏集 - 掘金

    摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫(xiě)一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫(xiě)一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...

    1fe1se 評(píng)論0 收藏0
  • 批量抓取網(wǎng)頁(yè)pdf文件

    摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。 任務(wù):批量抓取網(wǎng)頁(yè)pdf文件 有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。python環(huán)境: anaco...

    pubdreamcc 評(píng)論0 收藏0
  • 批量抓取網(wǎng)頁(yè)pdf文件

    摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。 任務(wù):批量抓取網(wǎng)頁(yè)pdf文件 有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。python環(huán)境: anaco...

    icyfire 評(píng)論0 收藏0
  • 一步步爬取Coursera課程資源

    摘要:至此登錄功能初步實(shí)現(xiàn)。為了方便我們快速定位到每節(jié)課的所有資源,可以把一節(jié)課的所有資源文件均命名為課名文件類型??梢钥匆幌乱粋€(gè)測(cè)試?yán)又械奈募?,部分?nèi)容如下到這里為止,我們已經(jīng)成功完成爬取課程資源的目標(biāo),具體的代碼放在上。 原文地址 有時(shí)候我們需要把一些經(jīng)典的東西收藏起來(lái),時(shí)時(shí)回味,而Coursera上的一些課程無(wú)疑就是經(jīng)典之作。Coursera中的大部分完結(jié)課程都提供了完整的配套教學(xué)資...

    Simon_Zhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<