Closed ZhangQi-HUST closed 6 days ago
https://github.com/opendatalab/MinerU/issues/241 你的问题跟这个应该很像,但是我们认为用unicode2ascii不是一个好的方案,如果您有好的方案也可以提供给我们
是这样子的,我也遇到了,ff这样连字。不注意还真看不出来
241 你的问题跟这个应该很像,但是我们认为用unicode2ascii不是一个好的方案,如果您有好的方案也可以提供给我们
我发现问题所在了。
我看了源码,在0.7版本中,提取文本型PDF的文本时,使用的txt_spans_extract
函数,其中调用pymupdf的get_text
函数提取文本,这个函数的flag
参数你们用的是fitz.TEXTFLAGS_TEXT
,按pymupdf文档里所述,TEXTFLAGS_TEXT = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE | TEXT_MEDIABOX_CLIP | TEXT_CID_FOR_UNKNOWN_UNICODE
,它是多个选项的并集,其中有个选项TEXT_PRESERVE_LIGATURES
表示会保留所有的连字,也就是ff, fi这种连字。如果去掉这个flag应该就不会输出连字的ff,而是输出两个字符ff。
简单讲,在使用了fitz.TEXTFLAGS_TEXT
的地方,应该换一个flag,即
TEXT_PRESERVE_WHITESPACE | TEXT_MEDIABOX_CLIP | TEXT_CID_FOR_UNKNOWN_UNICODE
。
241 你的问题跟这个应该很像,但是我们认为用unicode2ascii不是一个好的方案,如果您有好的方案也可以提供给我们
我发现问题所在了。 我看了源码,在0.7版本中,提取文本型PDF的文本时,使用的
txt_spans_extract
函数,其中调用pymupdf的get_text
函数提取文本,这个函数的flag
参数你们用的是fitz.TEXTFLAGS_TEXT
,按pymupdf文档里所述,TEXTFLAGS_TEXT = TEXT_PRESERVE_LIGATURES | TEXT_PRESERVE_WHITESPACE | TEXT_MEDIABOX_CLIP | TEXT_CID_FOR_UNKNOWN_UNICODE
,它是多个选项的并集,其中有个选项TEXT_PRESERVE_LIGATURES
表示会保留所有的连字,也就是ff, fi这种连字。如果去掉这个flag应该就不会输出连字的ff,而是输出两个字符ff。简单讲,在使用了
fitz.TEXTFLAGS_TEXT
的地方,应该换一个flag,即TEXT_PRESERVE_WHITESPACE | TEXT_MEDIABOX_CLIP | TEXT_CID_FOR_UNKNOWN_UNICODE
。
确实如你所说,我会尝试去除TEXT_PRESERVE_LIGATURES再测试一下
fix
Description of the bug | 错误描述
我试了一个英文论文,里面的 fi都输出成连字fi(是一个unicode字符),并且左右还带了一些空格。 例如 fiber中的fi就会变成连字。 感觉应该有个选项可以调整这个问题,但是没找到。
How to reproduce the bug | 如何复现
magic-pdf pdf-command --pdf "Learning dexterity from human hand motion in internet videos.pdf" 会产生很多连字符问题,如 A hand that can fl ex its fi ngers but does not have the mobility of an arm will not be able to solve many useful tasks. 中的 fl, fi等
Operating system | 操作系统
Windows
Python version | Python 版本
3.10
Software version | 软件版本 (magic-pdf --version)
0.6.x
Device mode | 设备模式
cuda