有没有可以从 RTL 语言的 PDF 中很好地提取文本的 python 包?

arm*_*iro 5 python pdf text-extraction persian text-alignment

我使用过著名的 PDF 文件 Python 包,例如 PDFminer、PyMuPDF、PyPDF2 等。但它们都不能从用从右到左的语言(波斯语、阿拉伯语)编写的 PDF 文件中正确提取文本。

\n

例如:

\n
import fitz\ndoc = fitz.open("*/path/to/file.pdf")\ntxt = doc.getPageText(0)\nprint(txt)\n
Run Code Online (Sandbox Code Playgroud)\n

它返回类似这样的内容:

\n
\n

...

\n

\xd8\xa7\xef\xaf\xbe\xef\xbb\xa8\xef\xba\x98\xef\xba\xae\xef\xbb\xa7\xef\xba\x96\xd9\x88\xef\xae\x90 \xef\xba\x8e\xef\xbb\xa3\xef\xad\x99\xef\xaf\xbf\xef\xbb\xae\xef\xba\x97\xef\xba\xae \xef\xba\x91\xef \xbb\xaa \xef\xbb\xa3\xef\xba\xb4\xef\xbb\xa0\xef\xbb\x82

\n

\xef\xbb\xa3\xef\xba\xb4\xef\xbb\xa0\xef\xbb\x82 \xef\xbb\xab\xef\xba\x8e\xdb\x8c\xd8\xb2\xef\xba\x91 \xef\xba\x8e\xd9\x86

\n

...

\n
\n

有时单词会被颠倒(第一个字符在最后)并且单词在句子中被交换,有时单词会被正确书写。但它不知道如何处理零宽度非连接符(\xd9\x86\xdb\x8c\xd9\x85\xe2\x80\x8c\xd9\x81\xd8\xa7\xd8\xb5\xd9\x84 \xd9\x87),在波斯语中常用。

\n

我尝试了很多,但一无所获。提前感谢您的帮助。

\n

Par*_*saN 4

我遇到了这个问题,我写了以下代码:

\n
import sys\nfrom builtins import print\nimport fitz\n\ninput_file = "p.pdf"\nline_list = []\n\ndoc = fitz.Document(input_file)\npage_count = doc.pageCount\n\nfor i in range(page_count):\n    load_page = doc.loadPage(i)\n    page = load_page.getText() # read a page\n    page = str(page)\n    line_list.append(page.splitlines()) # split every page based on \\n\n\nfor j in range (len(line_list)):\n    for k in range(3): \n        line_list[j][k] = line_list[j][k][::-1]\n        print(line_list[j][k])\n
Run Code Online (Sandbox Code Playgroud)\n

但这个包有两个问题。1)反转单词(例如“\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85” - >“\xd9\x85\xd8\xa7\xd9\x84\xd8\xb3”)我解决了它这段代码。2)多语言文档存在问题,例如波斯语和英语。

\n