我使用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/)会有所帮助。