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

时间:2016-11-02 14:29:08

标签: python pdf text file-conversion

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

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

De reden van alle beroering是niet moeilijk te raden。 Adri-aan bleef甚至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从1939年9月开始在dezelfde hal toen hij,学生gene-eskunde,遇到了jaargenoten het zojuist ontketende Duitse of-fensief in Polen besprak。

我想知道是否有一种快速的方法可以摆脱这些断字。没有在线工具可以解决问题。我对python略有熟悉,因此欢迎使用python的解决方案。也许一个想法是使用正则表达式来删除txt文件中行尾的al' - '字符?

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

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()

然而,这不起作用......

2 个答案:

答案 0 :(得分:1)

我不知道它是否有效但您可以使用replace

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.

(我代码格式化能够保持它的格式......)

在这种情况下,如果您只想将所有' - '替换为每行末尾的' - ',您可以这样做:

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,因此原始文本不会有实际更改 - 这就是我使用的原因line[-2]检查“ - ”字符。

答案 1 :(得分:0)

PDFMiner是您的选项,this is an example可以从PDF页面中提取文本。

出于您的目的,您必须将第176行更改为

' '.join(text_content)

将删除换行符。