我正在使用pdftools解析pdfs,并遇到了一个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!\n\n 345678&!):8!8%456$7:4)3及678:6:5@(7:5(!-$7*B4!85‘):8*
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")当标记化时,数据如下所示:
年份*代币
2007年1 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
我已经尝试删除第一页,以防水印引起问题,但这是不成功的。
有人能看到他们是否也不能解析这个文档,或者如果没有对为什么会发生这种情况有任何建议。谢谢!
发布于 2020-03-01 14:54:40
这是一个问题,你有时会遇到pdf文本提取。pdf格式可以处理几种不同的字体类型,并以不同的方式处理它们。在文档中,所讨论的文本的字体是type0 (PostScript)字体,名为CAL不可见TT。
通常,pdf中的页面描述程序会以低值、非ascii字节的形式输出字符串.然后在字体的编码字典中查找这些字符,并从嵌入到文件中的字体描述程序中提取适当的字形。您的字体没有编码字典-它被标记为标识-H。通常,这意味着它将有一个ToUnicode条目,而实际上您的条目是--但实际上它是空的。
有时,在您的示例中,字体描述程序中的象形文字没有映射到它们正确的Ascii值,而是直接映射到那些低字节值(例如,A字形可能映射到0x01,而不是它的通常值0x41)。
就这个特定的文档而言,这实际上是为了防止复制/粘贴。
那么,为什么文本在页面上看上去还可以呢?
这是因为字体描述程序获得了打印字形0x01的消息,但是它所画的图片是字母A。在任何一点上,pdf本身都不知道它正在打印的内容的ascii值。除了OCR程序之外,任何其他程序也不例外。
您可以通过复制和粘贴文本来证明这种情况。它不起作用,因为显示的象形文字没有精确的底层ascii表示。
没有一些严肃的反向工程,你不能复制和粘贴从这个特定的文档,也不能任何pdf文本提取工具。我并不是说这是不可能的,但它不太可能是那种可以通过堆栈溢出解决的琐碎问题。
最好的选择可能是OCR。
发布于 2020-03-01 15:42:26
另一个答案是完全正确和相当清楚的诊断问题(并提供了令人印象深刻的背景资料)。我同意,光学字符识别(OCR)可能是最好的方法。
在这种情况下,这也不是什么大问题,因为PDF确实包含高质量的文本图像(即使底层的文本数据不可用)。
幸运的是,pdftools已经包含了一个很好的功能来解决这个问题,并且它应该正确地检索(大部分)本文档中的文本:
text <- pdftools::pdf_ocr_text("https://eeas.europa.eu/sites/eeas/files/st_10113_2007_init_en.pdf", pages = 1)
#> Converting page 1 to st_10113_2007_init_en_1.png... done!
text[1]
#> [1] "COUNCIL OF Brussels, 31 May 2007\nTHE EUROPEAN UNION\n10113/07\nLIMITE\nPESC 655\nCOEST 179\nNOTE\nfrom: The Permanent Representatives Committee\ndated: 31 May 2007\nto: Council\nSubject : The EU and Central Asia: Strategy for a New Partnership\n1. |The Permanent Representatives Committee has endorsed at its meeting on 30 May 2007\nStrategy for a New Partnership with Central Asia as set out in Annex.\n2. The Council (General Affairs and External Relations) is invited to reach an agreement on the\ntext as set out in Annex with the view to its submission to the European Council.\n10113/07 AA/gso l\nDGE VI LIMITE EN\n"(将pages = NULL设置为获取整个文档。)
https://stackoverflow.com/questions/60476260
复制相似问题