python - Python pdf2txt 清理问题
问题描述
我正在从 pdf 文件中提取文本,但我面临一些提取后问题。
我在哪里
s = 'Our offer is \n4\n4\nProcessing\n\nPipeline\nPipeline\n2\nA\nm\na\nz\no\nn\nE\nC\n2\n'
s.replace('\n','')
Our offer is 44ProcessingPipelinePipeline2AmazonEC23
但我想要的是:
我们的报价是 44 Processing Pipeline Pipeline 2 Amazon EC 2 3
我的代码:
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine
import warnings
warnings.filterwarnings("ignore")
parser = PDFParser(fp)
doc = PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
doc.initialize('')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
laparams.char_margin = 13.0
laparams.word_margin = 13.0
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
extracted_text = ''
for page in doc.get_pages():
interpreter.process_page(page)
layout = device.get_result()
for lt_obj in layout:
if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
extracted_text += lt_obj.get_text()
print(extracted_text)
from nltk import tokenize
#split by sentence
newtext = tokenize.sent_tokenize(extracted_text)
然后使用输出我在 \n 上运行替换
我的想法是找到 **\n 的邻居并评估**
如果
当\n没有先前的邻居(空白空间)但有以下替换 '(\n+empty space') 为 (empty space)
当\n两边都有邻居时,将 '(\n) 替换为 (empty space)
当\n后面有大写的邻居并且没有之前的邻居(空白)时,将 '(\n+'Uppercase') 替换为(空白)
我想我正在深入研究这一点,可能有人以前做过。
'我们的报价是 IO)\n4\n4\nProcessing\n\nPipeline\nPipeline\n2\nA\nm\na\nz\no\nn\nE\nC\n2\n'
解决方案
使用正则表达式似乎相当困难。我得到了以下解决方案,并不优雅,但可以完成工作。
s = 'Our offer is \n4\n4\nProcessing\n\nPipeline\nPipeline\n2\nA\nm\na\nz\no\nn\nE\nC\n2\n'
prev_c = '\0'
out = ''
for ii,cc in enumerate(s):
cc = s[ii]
c = s[ii+1] if ii<len(s)-1 else '\0'
if cc=='\n':
if prev_c==' ' or \
prev_c=='\n' or \
prev_c.isdigit() and c.isdigit() or \
prev_c.islower() and c.islower() or \
prev_c.isupper() and c.isupper() or \
prev_c.isupper() and c.islower():
pass
else:
out += ' '
else:
out += cc
prev_c = cc
print(out)
但是,我很确定您会遇到其他不起作用的情况。例如下面的句子,
“带有连字符 (-) 和其他 CamelCases 的 2head P2P 解决方案!OoO”
推荐阅读
- visual-studio-code - Visual Studio 代码下载链接坏了?
- java - 在 sqlite 中检查文本
- javascript - 'number' 仅指一种类型,但在此处用作值。ts(2693)
- php - 如何在laravel中创建具有多个表的查询
- angular - CORS 策略阻止了从我的 api 访问 XMLHttpRequest
- ruby-on-rails-5 - 从 Capybara 节点元素获取文本
- java - 在 Java Spring 中连接服务器端会话
- jquery - 有没有办法在 html 标签中动态设置 data-value 属性的值?
- laravel - 如何仅使用 Laravel 直接打印到打印机或制作 pdf 并直接从浏览器打印?
- image - 特定对象与其他对象之间的最短距离