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

问题描述 投票:0回答:3

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

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

De reden van alle beroering 是 niet moeilijk te aden。 Adri-aan bleef 甚至 staan bij een gezelschap jongerejaars om te ho-ren welke uitkomst de commentie kreeg。玛尔·特韦尔·希吉·斯通德 te luisteren naar meningen over de eager kwestie Nieuw-Gui-nea, overviel hem de herinnering aan een zonovergoten mid- dag 于 1939 年 9 月在 dezelfde hal toen hij 开始,学生 Gene-eskunde 在 Polen besprak 遇到了 jaargenoten het zojuist ontketende Duitse of fensief。

我想知道是否有一种快速的方法可以消除这些断词。没有任何在线工具可以做到这一点。我对 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()

但是,这不起作用...

python pdf text file-conversion
3个回答
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]
来检查'-' 字符。


0
投票

PDFMiner 是您的一个选择,这是一个从 PDF 页面提取文本的示例

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

' '.join(text_content)

这将删除换行符。


0
投票

我有一个 PHP 代码可以做到这一点,我对 Python 不太了解,但我认为会是这样的:

import re

text = re.sub(r"(-|–)(\n+)", "", text)

但我认为某些 PDF 文件在转换为文本时会丢失“-”字符,在这种情况下我不知道如何解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.