Python 如何使用NLP从PDF文件中提取关键字及其页码?

Python 如何使用NLP从PDF文件中提取关键字及其页码?,python,nlp,data-science,text-extraction,Python,Nlp,Data Science,Text Extraction,在上面的PDF文件中,我的代码必须从给定PDF的所有页面中提取关键字和表名,如表1,表2,标题用粗体字母,如简介,案例演示 编写了一个从PDF文件中提取文本的小程序 punctuations = ['(',')',';',':','[',']',',','^','=','-','!','.','{','}','/','#','^','&'] stop_words = stopwords.words('English') keywords = [word for word in tok

在上面的PDF文件中,我的代码必须从给定PDF的所有页面中提取关键字和表名,如
表1
表2
,标题用粗体字母,如
简介
案例演示

编写了一个从PDF文件中提取文本的小程序

punctuations = ['(',')',';',':','[',']',',','^','=','-','!','.','{','}','/','#','^','&']

stop_words = stopwords.words('English')

keywords = [word for word in tokens if not word in stop_words and not word in punctuations]

print(keywords)
我得到的结果如下

从上述输出中,如何提取关键字,如
简介
案例演示
表1
,以及页码,并将其保存在输出文件中

输出格式

INTRODUCTION in Page 1

CASE PRESENTATION in Page 3

Table 1 (Descriptive Statistics) in Page 5
需要帮助获取此格式的输出

代码

def main():
文件名=打开(“Test1.pdf”、“rb”)
readpdf=PyPDF2.PdfFileReader(文件名)
#解析每个页面以提取文本
pdfPages=readpdf.numPages
计数=0
text=“”
打印()
#while循环将读取每个页面。
当计数
如果您想知道哪一页上的信息是某个文本,那么您不应该将所有内容添加到一个字符串中,而应该单独处理每个页面(在
中为
-loop`)

它可能与此类似。这是一种不包含
tesseract
的代码,它需要一种方法将PDF拆分为单独的页面,并单独处理每个页面

pdfPages = readpdf.numPages

# create it before loop
punctuations = ['(',')',';',':','[',']',',','^','=','-','!','.','{','}','/','#','^','&']
stop_words = stopwords.words('English')

#all_pages = []

# work with every page separatelly
for count in range(pdfPages):

    pageObj = readpdf.getPage(count)

    page_text = pageObj.extractText()
    
    page_tokens = word_tokenize(page_text)

    page_keywords = [word for word in page_tokens if not word in stop_words and not word in punctuations]

    page_uppercase_words = [word for word in page_keywords if word.isupper()]

    #all_pages.append( (count, page_keywords, page_uppercase_words) )

    print('page:', count)
    print('keywords:', page_keywords) 
    print('uppercase:', page_uppercase_words)

    # TODO: append/save page to file 

如果你想知道哪一页是一些文本,那么你不应该把所有的内容都添加到一个字符串中,而是应该分别处理每一页(在
for
-loop`)

它可能与此类似。这是一种不包含
tesseract
的代码,它需要一种方法将PDF拆分为单独的页面,并单独处理每个页面

pdfPages = readpdf.numPages

# create it before loop
punctuations = ['(',')',';',':','[',']',',','^','=','-','!','.','{','}','/','#','^','&']
stop_words = stopwords.words('English')

#all_pages = []

# work with every page separatelly
for count in range(pdfPages):

    pageObj = readpdf.getPage(count)

    page_text = pageObj.extractText()
    
    page_tokens = word_tokenize(page_text)

    page_keywords = [word for word in page_tokens if not word in stop_words and not word in punctuations]

    page_uppercase_words = [word for word in page_keywords if word.isupper()]

    #all_pages.append( (count, page_keywords, page_uppercase_words) )

    print('page:', count)
    print('keywords:', page_keywords) 
    print('uppercase:', page_uppercase_words)

    # TODO: append/save page to file 

问题在这里得到部分解决:

检查:

Konfuzio SDK中的对象注释允许直接访问关键字字符串,但目前不能直接访问页面索引。不久将添加此属性。 访问项目第一个培训文档中的第一个注释的示例如下:

# pip install konfuzio_sdk
# in working directory
# konfuzio_sdk init

from konfuzio_sdk.data import Project

my_project = Project()

annotations_first_doc = my_project.documents[0].annotations()
first_annotation = annotations_first_doc[0]
keyword = first_annotation.offset_string

问题在这里得到部分解决:

检查:

Konfuzio SDK中的对象注释允许直接访问关键字字符串,但目前不能直接访问页面索引。不久将添加此属性。 访问项目第一个培训文档中的第一个注释的示例如下:

# pip install konfuzio_sdk
# in working directory
# konfuzio_sdk init

from konfuzio_sdk.data import Project

my_project = Project()

annotations_first_doc = my_project.documents[0].annotations()
first_annotation = annotations_first_doc[0]
keyword = first_annotation.offset_string

你能给我们打个电话吗?如果您不显示创建
令牌的代码
@LydiavanDyke,我们将帮不上什么忙,我已经编辑了问题并添加了代码请在您的代码中包含导入以及运行它所需的所有其他内容,因此,如果您想获得关于哪个页面是表的信息,那么您不应该将所有内容都放在一个字符串中,而应该将其作为字符串列表保存(使用
for
-loop
text=[]
text.append(pageObj.extractText())
,并单独处理每个页面(使用
for
-loop)-然后您可以很容易地识别哪些文本来自第1页、第2页等。请您试着给我们一个答案好吗?如果您不显示创建
令牌的代码
@LydiavanDyke,我们将帮不上什么忙,我已经编辑了问题并添加了代码请在您的代码中包含导入以及运行它所需的所有其他内容,因此,如果您想获得关于哪个页面是表的信息,那么您不应该将所有内容都放在一个字符串中,而应该将其作为字符串列表保存(使用
for
-loop
text=[]
text.append(pageObj.extractText())
,并单独处理每个页面(使用
for
-loop)-然后你可以很容易地识别出哪个文本来自第1页、第2页等等。我使用你的代码时得到了这个输出。为什么“我”这个字母从“介绍”这个词中分离出来?这里1是章节#,后面是章节名称,作为引言0['DOI','10.11091','WHO','AI','ML','DATA-19','I.I','INTRODUCTION']PDF是wierd格式-它可以将每个字符(其位置为x,y)作为分隔对象,以后的程序将它们作为列表上的分隔对象。我没有使用
textract
,但在原始版本中,您可能从
textract
获得文本,而不是
readpdf
我使用了库PyMuPDF并能够检索文本。我使用了你相同的代码,但很少有额外的行,并且能够提取单个文本。当我使用您的代码时,再次感谢您获得此输出。为什么“我”这个字母从“介绍”这个词中分离出来?这里1是章节#,后面是章节名称,作为引言0['DOI','10.11091','WHO','AI','ML','DATA-19','I.I','INTRODUCTION']PDF是wierd格式-它可以将每个字符(其位置为x,y)作为分隔对象,以后的程序将它们作为列表上的分隔对象。我没有使用
textract
,但可能在ori中使用