R:使用pdftools,stringr和regex

时间:2016-09-10 04:38:34

标签: regex r csv pdf stringr

我将大量的pdf转换为单个大规模的csv。

典型的pdf如下所示:

enter image description here

当我使用pdftools将页面转换为单个文本字符串时,我得到了这个:

enter image description here

当我在页面的字符串上使用cat()函数时,我得到了这个:

enter image description here

我的问题是:cat()函数如何知道每列开始的位置?如何通过pdf字符串干净地解析?我正在使用R代码来放置&#39 ;;'每当字符串中有两个以上的空格时,我就会遇到一堆问题。

第一个问题是' sexo'变量只在它和'c.identidad'之间有一个空格。变量。我的解决方案是使用str_replace()在前面添​​加空格和' sexo'变量(' VAR'和' MUJ')。

我发现的第二个问题是,有些观察结果只有一个选区与选区之间只有一个空格。和'外交和#39;变量。我发现了'外围人员'与' comuna'基本相同。在标题中。因此,我的解决方案是str_locate()来确定' comuna'是,然后使用str_replace()在字符串匹配' comuna'的所有实例的正面和背面添加空格。

第三个问题是有时候选举的选举权问题。观察的变量也包括'comuna'。这意味着我将用于将字符串切换为pdf的代码(任何长度大于2的空格都转换为&#39 ;;')将为包含'的任何观察提供额外的变量。 comuna'字符串不止一次。

一旦出现第三个问题,我开始认为必须有一种更简单的方法来解析这个pdf文档。如果cat()可以通过pdf字符串干净地解析,那么必须有类似的东西来帮助我以有序的方式解析它。任何帮助,指导,链接或想法将不胜感激。

我使用的pdf是公开的,可在以下网址找到:http://web.servel.cl/padronAuditado.html

以下是我的代码的最终版本。它有大约6%的明显错误率。我通过计算具有“台面”的观察结果来测量误差。变量为空白。

require(stringr)
require(dplyr)
require(pdftools)

pdf_to_csv2 <- function(doc){

 text <- pdf_text(doc)

 COMUNA_LOCATE = str_locate(text[1], "COMUNA:.+PAGINA")

 COMUNA = text[1] %>% str_sub(COMUNA_LOCATE[1], COMUNA_LOCATE[2]) %>% 
   str_replace('COMUNA:', '') %>%
   str_replace('PAGINA', '') %>%
   str_trim('both')

 cleaned_text <- text %>% str_replace_all(' VAR ', '   VAR   ') %>%
   str_replace_all(' MUJ ', '   MUJ   ') %>%
   str_replace_all(paste(COMUNA, '                       '), paste('    ', COMUNA, '    ')) %>%
   str_replace('IDENTIDAD SEXO', 'IDENTIDAD   SEXO') %>%
   str_replace_all('\r\n', 'END_LINE') %>%
   str_replace_all('\\s\\s+', ';') %>%
   str_replace_all('END_LINE', '\n')

 for(i in c(1:length(cleaned_text))) {write(cleaned_text[i], paste0(doc, '_', i))}

 }

0 个答案:

没有答案