Python 将PDF转换为文本:删除分词
对于我的博士项目,我正在做一些语料库准备,主要包括清理我的文本文件。我有170本荷兰小说的语料库,其中大部分是epub格式的,我可以使用Calibre轻松地将其转换为txt格式 问题是有些小说是PDF格式的,在某些行的末尾包含了分词。当我将这些PDF文件转换为txt时,分词仍然存在。例如: 德雷登·范阿勒·贝罗林是尼特·莫伊利克·特·拉登。阿德里安·布莱夫甚至在讨论会上发表了自己的观点。马尔·特维伊尔·希斯托德 在急性脑出血患者的脑膜上,在中段患者的脑膜上- 1939年9月,学生吉恩·埃斯昆德(gene eskunde)在德泽尔夫德·哈尔·托恩·希吉(dezelfde hal toen hij)遇到了波伦·贝斯普拉克(Polen besprak)芬西夫(fensief)的贾尔根·赫特·佐朱斯特(jaargenoten het zojuist)和杜伊塞 我想知道是否有一种快速的方法来消除这些断字。没有在线工具可以做到这一点。我对python略知一二,因此可以欢迎使用python的解决方案。也许可以使用正则表达式来删除txt文件中行尾的所有“-”字符 这是我尝试的,使用下面的评论:Python 将PDF转换为文本:删除分词,python,pdf,text,file-conversion,Python,Pdf,Text,File Conversion,对于我的博士项目,我正在做一些语料库准备,主要包括清理我的文本文件。我有170本荷兰小说的语料库,其中大部分是epub格式的,我可以使用Calibre轻松地将其转换为txt格式 问题是有些小说是PDF格式的,在某些行的末尾包含了分词。当我将这些PDF文件转换为txt时,分词仍然存在。例如: 德雷登·范阿勒·贝罗林是尼特·莫伊利克·特·拉登。阿德里安·布莱夫甚至在讨论会上发表了自己的观点。马尔·特维伊尔·希斯托德 在急性脑出血患者的脑膜上,在中段患者的脑膜上- 1939年9月,学生吉恩·埃斯昆德(
import re
with open('pdf_test.txt','r+', encoding='utf-8') as f:
text = f.read()
for line in text:
if line.endswith('-'):
line = re.sub('-',' ',line)
f.seek(0)
f.write(line)
f.truncate()
但是,这不起作用…PDFMiner是您的一个选项,用于从PDF页面提取文本 出于您的目的,您必须将第176行更改为
' '.join(text_content)
这将删除换行符 我不知道它是否有效,但您可以使用
替换:
text.replace('- ','')
或使用regex
:
import re
with open('pdf_test.txt','r+') as f:
text = f.read()
text = re.sub('- ','',text)
f.seek(0)
f.write(text)
f.truncate()
但这两种方式将取代他们找到的每一个这样的字符(“-”),而不仅仅是在句子的结尾。好的是我不认为你能在普通的文本中找到“-”
更新
好吧,在看到你的评论后,我猜文本是这样的:
De reden van alle beroering was niet moeilijk te raden. Adri-
aan bleef even staan bij een gezelschap jongerejaars om te ho-
ren welke uitkomst de discussie kreeg. Maar terwijl hij stond te luisteren naar
meningen over de acute kwestie Nieuw-Gui-
nea, overviel hem de herinnering aan een zonovergoten mid-
dag begin september 1939 in dezelfde hal toen hij, student gene-
eskunde, met jaargenoten het zojuist ontketende Duitse of-
fensief in Polen besprak.
(我对format进行编码,以便能够保持其格式…)
在这种情况下,如果只想将每行末尾的所有“-”替换为“”,可以执行以下操作:
import re
with open('pdf_test.txt','r+') as f:
lines = f.readlines()
f.seek(0)
for line in lines:
if line[-2]=='-':
line = re.sub('-','',line)
f.write(line)
.endswith('-')
在这种情况下也不起作用,因为每行的最后一个字符都是\n
,因此对原始文本没有实际更改-这就是为什么我使用行[-2]
来检查'-'字符。问题是在正常的荷兰语文本中确实找到了'-'。关于我使用的示例:在“Nieuw Gui-nea”中,第一个“-”属于那里,但第二个“-”必须删除。@Roelsmets,是的,这就是为什么使用“-”而不是“-”的原因。如果您尝试“Nieuw-Gui-nea”。替换(“-”,“)
,这将得到您描述的结果:“Nieuw几内亚”。抱歉,我没有注意到这一差异。我会调查的@RoelSmeets,pdf中的“-”在行尾并不意味着它将在.txt中的每一行的末尾(例如,“Adri-aan”不在行尾)-因此.endswith
不起作用。为了理解只替换行末尾的“-”,我们使用“-”而不是“-”。代码中的另一个错误(在上面的注释中)是使用f.write(text)
而不是f.write(line)
-它也应该是line=re.sub('-','',line)
。但同样,我不认为readlines方法会因为我提到的原因而起作用。@RoelSmeets,刚刚更新了答案,现在检查它是否起作用-我也解释了本例中的endswith
方法!Thanx,那可能有用。我想你的意思是''。没有第一个''的加入(文本内容)?啊,当我改变句子格式时,那是一个打字错误。