r - pdftools 包无法解析字符
问题描述
我正在使用 pdftools 来解析 pdf,并且遇到了无法准确解析的 pdf(它正在处理其他 PDF,所以我认为它与代码无关)。
可在此处找到 PDF:https ://eeas.europa.eu/sites/eeas/files/st_10113_2007_init_en.pdf
我的代码是:
EU_text_2007 <- pdf_text("2007_CA_Strategy.pdf") %>%
readr::read_lines() %>%
str_squish()
退货
[1] " (''&#!\n %$+!&,!-%&!0+%'2-3!(4(-)!7'2-'+ 9!+,2!- !'+-!=-2'%+24$(.!\n!\n!\n#/!#%'2,&@0'(,%)!%$+!&,!-% &!0+%'2-3!(4(-!\n!\n345678&!'):8!;8)!8!%456$7:4)3 & !678 :6: 5! @!( 7:5(:5(!-$7*B4!85 !'):8!6*
EU_text_2007_long <- paste(EU_text_2007, collapse = ' ')
EU_text_2007_long <- EU_text_2007_long %>%
as.data.frame()
colnames(EU_text_2007_long) <- c('Text')
EU_text_2007_long <- EU_text_2007_long %>%
mutate(Year = 2007) %>%
mutate(Text = as.character(Text))
EU_text_2007_tokens <- EU_text_2007_long %>%
unnest_tokens(tokens, Text, token = "words")
标记化后的数据如下所示:
年份 |代币
1 2007 0
1.1 2007 2
1.2 2007 3
1.3 2007 4
1.4 2007 7'2
1.5 2007 9
1.6 2007 2
1.7 2007 2
1.8 2007 24
1.9 2007 2
如果水印引起问题,我尝试删除第一页,但这并没有成功。
有人可以看看他们是否也无法解析此文档,或者对为什么会发生这种情况没有任何建议。谢谢!
解决方案
这是您在提取 pdf 文本时偶尔会遇到的问题。pdf 格式可以处理几种不同的字体类型,并且以不同的方式处理它们。对于您的文档,相关文本的字体是 type0 (PostScript) 字体,称为 CAL invisible TT。
通常,pdf 中的页面描述程序将以低值、非 ascii 字节输出字符串。然后在字体的编码字典中查找这些字形,并从嵌入在文件中的字体描述程序中提取适当的字形。您的字体没有编码字典 - 它被标记为 Identity-H。通常这意味着它将有一个 ToUnicode 条目,而您的确实如此 - 但它实际上是空的。
有时会发生,在您的情况下,字体描述程序中的字形未映射到其正确的 Ascii 值,而只是直接映射到那些低字节值(例如,A 字形可能映射到 0x01 而不是其通常的值0x41)。
在这个特定文档的情况下,这实际上是为了防止复制/粘贴而故意这样做的。
那么为什么文本在页面上看起来不错呢?
这是因为字体描述程序收到了打印字形 0x01 的消息,但它绘制的图片是字母 A。pdf 本身从不“知道”它正在打印的内容的 ascii 值。除了可能的 OCR 程序之外,任何其他程序也没有。
您可以通过尝试复制和粘贴文本来证明是这种情况。它不起作用,因为显示的字形没有准确的底层 ascii 表示。
如果没有一些严肃的逆向工程,你就不能从这个特定的文档中复制和粘贴,任何 pdf 文本提取工具也不能。我并不是说这是不可能的,但它不太可能是可以通过 Stack Overflow 解决的那种微不足道的问题。
最好的选择可能是 OCR。
推荐阅读
- javascript - 如何使用客户端发送的快递作为放置请求的一部分访问服务器端的数据
- widget - 如何使用子小部件更改 AppBar 内容?
- vba - VBA:使用一张纸上的数据来定位另一张纸
- ios - 如果发生网络中断,如何完成 Firebase 注册身份验证
- javascript - 控制器未向 angular js spa 注册
- scala - AWS Glue 是否可扩展?
- r - r markdown to pdf 输出错误
- ruby-on-rails - puma 支持哪些版本的 rails?
- automata - 构造有限状态机
- python - Python Pygame 和 Pymunk 游戏库 Non-colliding Shapes