Python 将PDF转换为文本:删除分词

Python 将PDF转换为文本:删除分词,python,pdf,text,file-conversion,Python,Pdf,Text,File Conversion,对于我的博士项目,我正在做一些语料库准备,主要包括清理我的文本文件。我有170本荷兰小说的语料库,其中大部分是epub格式的,我可以使用Calibre轻松地将其转换为txt格式 问题是有些小说是PDF格式的,在某些行的末尾包含了分词。当我将这些PDF文件转换为txt时,分词仍然存在。例如: 德雷登·范阿勒·贝罗林是尼特·莫伊利克·特·拉登。阿德里安·布莱夫甚至在讨论会上发表了自己的观点。马尔·特维伊尔·希斯托德 在急性脑出血患者的脑膜上,在中段患者的脑膜上- 1939年9月,学生吉恩·埃斯昆德(

对于我的博士项目,我正在做一些语料库准备,主要包括清理我的文本文件。我有170本荷兰小说的语料库,其中大部分是epub格式的,我可以使用Calibre轻松地将其转换为txt格式

问题是有些小说是PDF格式的,在某些行的末尾包含了分词。当我将这些PDF文件转换为txt时,分词仍然存在。例如:

德雷登·范阿勒·贝罗林是尼特·莫伊利克·特·拉登。阿德里安·布莱夫甚至在讨论会上发表了自己的观点。马尔·特维伊尔·希斯托德 在急性脑出血患者的脑膜上,在中段患者的脑膜上- 1939年9月,学生吉恩·埃斯昆德(gene eskunde)在德泽尔夫德·哈尔·托恩·希吉(dezelfde hal toen hij)遇到了波伦·贝斯普拉克(Polen besprak)芬西夫(fensief)的贾尔根·赫特·佐朱斯特(jaargenoten het zojuist)和杜伊塞

我想知道是否有一种快速的方法来消除这些断字。没有在线工具可以做到这一点。我对python略知一二,因此可以欢迎使用python的解决方案。也许可以使用正则表达式来删除txt文件中行尾的所有“-”字符

这是我尝试的,使用下面的评论:

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,那可能有用。我想你的意思是''。没有第一个''的加入(文本内容)?啊,当我改变句子格式时,那是一个打字错误。