python - 如何在 python-3 中分析 PDF 中的特定文本字符串?
问题描述
我正在处理一些识别 PDF 文档中命名实体 (NER) 的代码。我当前的代码分三个步骤工作。首先,它将 PDF 转换为文本字符串。其次,它标记了文本。第三,它对文本进行分类。
现在,此代码对文本字符串中的每个标记(单词)进行分类。但是,我希望程序只对文本的特定部分进行分类。该部分始终位于单词"Body"
和之间"Classification"
(对于熟悉格式的人,我正在分析 LexisNexis 文档)。我想知道是否有办法告诉程序只对这两个词之间的文本进行分类?我已经阅读了几篇关于此的文章,但我无法找到我的具体问题的答案。
我觉得我需要在"tokenized_text"
and行之间插入一个标识特定字符串的"classified_text"
行,但我不确定是什么。谢谢你的帮助!
#Import Programs for NER
import os
import PyPDF2
import nltk
import pandas
# NER tagger
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
st = StanfordNERTagger('C:\\file_path\\english.all.3class.distsim.crf.ser.gz',
'C:\\file_path\\stanford-ner.jar',
encoding='utf-8')
destDirectory = file_path
#Tagging NERs
for file in os.listdir(destDirectory):
pdf_file = open(destDirectory + '\\' + file, 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
text = ''
for i in range(0,number_of_pages):
page = read_pdf.getPage(i)
page_content = page.extractText()
text = text+page_content
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print(classified_text)
编辑:
这是一个更简单的代码。请注意,除非您下载了斯坦福标记器(St)
并设置了文件位置,否则该程序将不会运行。
#Import Programs for NER
import os
import PyPDF2
import nltk
import pandas
# NER tagger
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
st = StanfordNERTagger('C:\\file_path\\english.all.3class.distsim.crf.ser.gz',
'C:\\file_path\\stanford-ner.jar',
encoding='utf-8')
destDirectory = file_path
#Tagging NERs
for file in os.listdir(destDirectory):
# Insert code here for reading in the PDFs
text = 'Title Example Body This is an example line of text. Classification Language: English'
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print(classified_text)
解决方案
您可以使用如下所示的正则表达式来提取要标记的单词:
>>> import re
>>> s ='sample line Body WORD TO EXTRACT Classification'
>>> re.search(r'Body(.*?)Classification', s).group(1)
' WORD TO EXTRACT '
对于多次出现,您可以使用re.findall