Python 如何从PDF到Excel的坐标中提取文本

Python 如何从PDF到Excel的坐标中提取文本,python,excel,csv,parsing,pdf,Python,Excel,Csv,Parsing,Pdf,对python来说非常陌生。我使用了以下代码: from pdfminer.layout import LAParams, LTTextBox from pdfminer.pdfpage import PDFPage from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.converter import PDFPageAgg

对python来说非常陌生。我使用了以下代码:

from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator

fp = open('Card.pdf', 'rb')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pages = PDFPage.get_pages(fp)

for page in pages:
    print('Processing next page...')
    interpreter.process_page(page)
    layout = device.get_result()
    for lobj in layout:
        if isinstance(lobj, LTTextBox):
            x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
            print('At %r is text: %s' % ((x, y), text))
输出如下所示:

At(245.76685.4898)是文本:语句

At(99.36538.749799999999)是text:Type

At(210.0538.74979999999)是文本:详细信息

At(310.8538.74979999999)为文本:参考

我想将特定文本放入CSV中的列中,例如(99.36538.74979999999)处的任何文本都可以进入第1列,等等


我该怎么做?

您可以使用
pandas
执行此任务:

import pandas as pd

df_results = pd.DataFrame()
for lobj in layout:
    x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
    collected_data = {'x': x, 'y': y, 'text': text}
    data = pd.Series(collected_data)
    df_results = df_results.append(data, ignore_index=True)

df_results.to_csv('coordinates_data.csv')

它将数据收集到数据框中,然后另存为csv。

您可以使用
熊猫
执行此任务:

import pandas as pd

df_results = pd.DataFrame()
for lobj in layout:
    x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
    collected_data = {'x': x, 'y': y, 'text': text}
    data = pd.Series(collected_data)
    df_results = df_results.append(data, ignore_index=True)

df_results.to_csv('coordinates_data.csv')

它会将数据收集到数据框中,然后另存为csv。

您需要在excel中的几列中收集哪些数据?例如,第1列中的(245.76685.4898)数据,第2列中的(99.36538.7497999999999999)等。您需要在单独的列中收集
x,y,text
?是的。有什么建议吗?嗨,Zaraki,我得到了以下错误:x,y,text=lobj.bbox[0],lobj.bbox[3],lobj.get_text()AttributeError:“LTCurve”对象没有属性“get_text”,你需要在excel的各个列中收集哪些数据?比如说第1列(245.76685.4898)中的数据,(99.36538.7497999999)第2列中的数据,等等你需要收集
x,y,文本
在单独的列中?完全正确。有什么建议吗?嗨,Zaraki,我得到以下错误:x,y,text=lobj.bbox[0],lobj.bbox[3],lobj.get_text()AttributeError:'LTCurve'对象没有属性'get_text'