R-如何使用GSUB修复案例定义的多个空间和断线



我使用pdftools将一些PDF文档转换为TXT。这是输出的一部分(还不错)

REPÚBLICA DE CHILE         PADRON ELECTORAL AUDITADO       ELECCIONES PRESIDENCIAL, PARLAMENTARIAS y de CONSEJEROS REGIONALES 2017             REGISTROS:       2.421
SERVICIO ELECTORAL         REGIÓN     : ARICA Y PARINACOTA                                    COMUNA: GENERAL LAGOS                                    PÁGINA 1 de 38
                           PROVINCIA  : PARINACOTA
NOMBRE                                                     C.IDENTIDAD SEXO    DOMICILIO ELECTORAL                             CIRCUNSCRIPCIÓN                   MESA
AGUILERA SIMPERTIGUE JUDITH ALEJANDRA                         13.638.826-6 MUJ PUEBLO DE TACORA S N VISVIRI                    GENERAL LAGOS                        4M
AGUILERA ZENTENO PATRICIA ALEJANDRA                           16.223.938-4 MUJ PUEBLO DE GUACOLLO S N CERCANO A                GENERAL LAGOS                        5M
AGUIRRE CHOQUE MARCOS JULIO                                   15.000.385-7 VAR CIRCUNSCRIPCION
                                                                               CALLE  TORREALBA DE  VISVIRI
                                                                                                 CASA  N° 4 PUEBLO DE VISVIRI  GENERAL LAGOS                        7V

所以我正在这样做以清洁并将其转换为格式化的TSV:

test = read_lines("file.txt")
test2 = test[!grepl("REPu00daBLICA",test)]
test2 = test2[!grepl("SERVICIO",test2)]
test2 = test2[!grepl("NOMBRE",test2)]
test2 = test2[!grepl("PROVINCIA",test2)]
test2 = gsub("\.", "", test2)
test2 = gsub("(?<=[\s])\s*|^\s+|\s+$", "", test2, perl=TRUE)

,输出为:

ABRIGO PIZARRO PATRICIO ESTEBAN 16024716-9 VAR PUEB ALCERRECA GENERAL LAGOS 5V
ABURTO VELASCO ESTHER MARISOL 13005517-6 MUJ VILLA INDUSTRIAL GENERAL LAGOS 2M
ACEVEDO MONTT SEBASTIAN ANDRES 17829470-9 VAR CALLE RAFAEL TORREALBA N° 3 PUEBLO DE VISVIRI GENERAL LAGOS 3V
ACHILLO BLAS ADOLFO ARTURO 13008044-8 VAR VISURI GENERAL LAGOS 7V

我已经阅读了一些帖子,我不确定如何实施:

  1. 类似gsub("(?<=[\s+])[0-9]", "t", test2, perl=TRUE)的东西,这是替换多个空格,然后是一个数字,然后是数字
  2. 如何将损坏的线移至上一行的末端,例如上述示例中的第8行,该示例以多个空格开头。

修复(1)和(2)将返回以下内容:

ABRIGO PIZARRO PATRICIO ESTEBAN t 16024716-9 t VAR t PUEB ALCERRECA t GENERAL LAGOS t 5V
ABURTO VELASCO ESTHER MARISOL t 13005517-6 t MUJ t VILLA INDUSTRIAL t GENERAL LAGOS t 2M

(1)您可以将单词" var"one_answers" muj"用作拆分的键字:

x <- "AGUILERA SIMPERTIGUE JUDITH ALEJANDRA                         13.638.826-6 MUJ PUEBLO DE TACORA S N VISVIRI                    GENERAL LAGOS                        4M"
strsplit(x, "\s{2,}|\s(?=\bMUJ\b)|(?<=\bMUJ\b)\s|\s(?=\bVAR\b)|(?<=\bVAR\b)\s", perl = TRUE)

结果是:

[[1]]
[1] "AGUILERA SIMPERTIGUE JUDITH ALEJANDRA" "13.638.826-6"                          "MUJ"                                  
[4] "PUEBLO DE TACORA S N VISVIRI"          "GENERAL LAGOS"                         "4M"

也许不是最优雅的解决方案,但是它可以使用,如果您可以修改数据,则可以使用真正的钥匙词并确保它们是唯一的。

(2)一个简单的解决方案是检查行的长度,如果行太短

,则将值向上移动。

最新更新