我有一个在线图书馆应用程序,允许用户通过关键字搜索书籍内容。
要将一本书添加到我的应用程序中,我希望能够上传该书的docx文件,然后逐页提取其内容,并将其单独添加到数据库中。 我在 Laravel/PHP 中找不到任何特定的库来为我做这件事,所以我尝试解压缩 Docx 文件并寻找一个特定的分隔符来检测基于它的页面,但显然,没有这样的东西!
我什至尝试从 PDF 文件中读取页面,但它返回不可读的奇怪字符!我必须补充一下,这些书不是用英文写的。它们是用波斯语和阿拉伯语编写的,这是一种从右到左的语言(请参见下面的屏幕截图)。这是 pdf 格式的真实数据样本的链接:https://www.dropbox.com/s/g939q5oot14ib1w/test-for-stack-over-flow.pdf?dl=0.
如果您知道如何将本书的每一页分别添加到数据库中(作为页面表中的新行!),请告诉我,无论我必须使用什么格式,docx、pdf、txt,等等!
好吧,有人告诉我,对于 word 输出到 PDF 然后导入到 MS Word 可能会给出最好的结果,但 PHP 本身不是 MSOffice 用户工作站。
来自@Kmaj 的评论和安装反馈,在最后。
我所知道的最接近的远非完美,但可能会更好。因此,第一页的命令行将 PDF 导出为纯文本看起来像这样,纯文本的许多问题变得明显,主要障碍是词序在战略输入/输出点通常是错误的。
因此使用 Poppler PDFtotext 为第 1 页提供此输出,第 1 页可以在 1-100+ 的循环中。
pdftotext -nopgbrk -layout -f 1 -l 1 SO-75712922.pdf
انتشارات تست /شمارۀ 53
کتاب تست
تست این کتاب
تست اصحاب
وصی و فرستادۀ ی
(خداوند در زمین تمکینش دهد)
مترجم
گروه مترجمان انتشارات تست
没有 -layout 它应该更紧凑,但是第 2 页需要它是 -Layout 不鼓励行拆分。因此,像这样的文档很难猜测,因此具有布局和替代方案的输出可能需要一些自动选择器才能最好地运行 2 或 3 次。
没有布局的第 1 页 看起来大约 90% 可用
对于 Windows 用户,64 位预编译二进制文件(当前最新=2023-01)位于https://github.com/oschwartz10612/poppler-windows
来自@Kmaj Mac 用户
我首先使用“brew install poppler”在我的 Mac 上安装了 poppler。然后,我可以成功地循环运行您上面提到的命令,并使用动态名称分别生成每个 txt 页面。
对于那些有同样问题的人,我在我的 mac 终端中运行了以下命令:
for i in {1..3};
do pdftotext-nopgbrk -layout -f ${i} -l ${i} ~/mypath-to-pdf/pdf-name.pdf ~/mypath-to-output-folder/output-name-${i}.txt;
done