如何将pdf文件转换为文本而不断行

如何将pdf文件转换为文本而不断行

我使用pdftotext实用程序将 pdf 文件转换为文本。

pdftotext *.pdf *.txt

它可以工作,但它不能与线路正常工作,它会在不工作时创建新线路。有没有其他实用程序可以完成这项工作。如果没有的话会sed有助于杀死新的线路吗?

答案1

取决于你想要什么。
例如,如果您想保留布局以便忠实地表示目录,则可以使用该-layout标志。如果你想要一个原始流,你就有这个-raw标志,尽管它的工作效率不如我怀疑你想要的那样。我建议首先将其转换为文本文件。让我们举个例子test.pdf。然后,

$ pdftotext test.pdf test.txt

这将创建一个名为 test.txt 的文件,其中包含 pdftotext 实用程序的输出。然后,我们将新创建的文本文件写入一些 Perl 代码:

$ perl -0pe "s/([^\n])\n([^\n])/\1 \2/g;" test.txt > final.txt

现在你就得到了它。该final.txt文件应该有您想要的内容。您可以按原样复制 perl 代码并根据您的喜好更改文件名。希望有帮助。

答案2

Calibre 电子书转换器可以满足您的需求。它具有图形用户界面 (GUI) 和命令行,可用于:

ebook-convert myfile.input_format myfile.output_format --enable-heuristics [other-options]

它可以将 pdf 转换为 epub 或 raw .txt 格式,同时猜测原始段落结构。有许多选项可以帮助微调流程,请参阅: https://manual.calibre-ebook.com/ generated/en/ebook-convert.html#heuristic-processing

“删除不必要的连字符”功能通过 `--enable-heuristics 激活;对带连字符的单词的分析是基于字典的,而字典就是文本本身(如果它在某处找到了单词“document”,它就知道在边缘带连字符的“document”应该去掉连字符)。

还有--unsmarten-punctuation,它将花哨的引号、破折号和省略号转换为其简单的等效项 (nameyl "'-...)。

还有--html-unwrap-factor parameter,描述为:“用于确定应展开线的长度的比例。有效值为 0 到 1 之间的小数。默认值为0.4,正好低于中线长度。如果只有几行该文档要求展开该值应减少”。

对于我的测试文档,默认值工作得很好;值较低时,结果仍然更好:

ebook-convert mydoc.pdf mydoc.txt --enable-heuristics --html-unwrap-factor 0.2

结果足以进行进一步处理(例如,文档对的文本对齐以创建翻译记忆库 .tmx 文件)。

在 Linux 上,要处理(子)文件夹中的所有 .pdf 文件,请执行以下操作:

find . -name "*.pdf" | while IFS= read -r file; do if [ ! -e "${file}.txt" ]; then ebook-convert "$file" "${file}.txt"   --enable-heuristics --html-unwrap-factor 0.2 ; fi; done

(注意:文件名不得以连字符开头。)

GUI 手册位于:https://manual.calibre-ebook.com/conversion.html#heuristic-processing

请注意,对于(多列)表中的句子,结果很糟糕,其中 Tabula (https://tabula.technology/)会有所帮助。

下面是示例使用的屏幕截图(此处,输出为 .epub 更清楚地表明段落已被正确检测到)。 在此输入图像描述

相关内容