阿拉伯语PDF文本提取出现反向问题的技术求助
阿拉伯语PDF文本提取后顺序错乱的解决思路
问题核心
PyPDF2对从右到左(RTL)的阿拉伯语排版支持不足,提取时会打乱字符顺序,而单纯用arabic-reshaper、python-bidi或全局反转文本,会导致括号、标点等非阿拉伯语元素位置错误。
可行解决方法
1. 更换PDF提取工具
PyPDF2在RTL语言处理上表现较差,换成更专业的工具能直接解决大部分问题:
- pdfplumber:对复杂排版的文本识别更精准,能更好保留阿拉伯语的原生顺序:
import pdfplumber with pdfplumber.open("你的阿拉伯语PDF文件.pdf") as pdf: page = pdf.pages[0] extracted_text = page.extract_text() print(extracted_text) - PyMuPDF(fitz):多语言排版支持更优,提取的RTL文本顺序更符合预期:
import fitz doc = fitz.open("你的阿拉伯语PDF文件.pdf") extracted_text = "" for page in doc: extracted_text += page.get_text() print(extracted_text)
2. 针对性修复已提取的错误文本
如果必须用PyPDF2的提取结果,可以只反转阿拉伯语字符子串,保留非阿拉伯语元素的位置:
import re def fix_arabic_text(raw_text): # 匹配连续的阿拉伯语字符(Unicode范围U+0600-U+06FF) arabic_chars = re.compile(r'[\u0600-\u06FF]+') # 仅反转阿拉伯语字符序列,其他字符保持原样 fixed_text = arabic_chars.sub(lambda match: match.group()[::-1], raw_text) return fixed_text # 测试你的示例文本 sentence = "AR.(ةناشطع ♀) ناشطع نينكلو (ةعئاج تسل ♀) ،اعئاج تسل" fixed_sentence = fix_arabic_text(sentence) print(fixed_sentence)
3. 正确结合arabic-reshaper和python-bidi
先修复字符顺序,再用这两个工具处理字形和双向渲染:
import arabic_reshaper from bidi.algorithm import get_display # 先用上面的fix_arabic_text修复顺序 fixed_text = fix_arabic_text(sentence) # 处理阿拉伯语连写等字形问题 reshaped_text = arabic_reshaper.reshape(fixed_text) # 应用双向文本算法得到最终正确显示的文本 final_text = get_display(reshaped_text) print(final_text)
4. 处理图像型PDF
如果PDF中的阿拉伯语文本是嵌入的图像,需要先做OCR识别:
用pytesseract结合pdf2image提取图像中的文本,记得安装阿拉伯语OCR语言包:
from pdf2image import convert_from_path import pytesseract # 转换PDF页面为图像 pages = convert_from_path("图像型阿拉伯语PDF.pdf") extracted_text = "" for page in pages: # 指定阿拉伯语语言包(需提前安装tesseract的ara语言包) extracted_text += pytesseract.image_to_string(page, lang='ara') print(extracted_text)
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

