首页 > 解决方案 > 为许多格式相似的文件抓取 .txt 文件

问题描述

我使用 R 将一些 .pdf 文件转换为 .txt 文件,但无法找到一种方法来抓取它们以最终构建数据框。我是文本抓取的新手,所以请原谅我的无知。

这是 .txt 文件的格式,我主要对数字和标题感兴趣。任何建议都非常感谢。

   Township of Buena Vista
                                                                             General Election Results - November 2, 2010
                                                                 Prepared by the Office of Edward P. McGettigan, Atlantic County Clerk




                           Township Committee                                                Public Count

                                       Mary Ann
            Peter C.      Richard                    Henry L.      Total         Total          Total          Total           Total
                                      Micheletti-
           Bylone, Sr.     Harlan                    Coia, Jr.    Machine       Vote By      Provisional     Emergency         Public
                                        Levari
Ward       Democratic    Democratic                 Republican     Count         Mail          Count           Count           Count
                                      Republican
District
 D-1          205           195          230           223          436           113            16                            565
 D-2          202           160          275           261          459                                                        459
 D-3          331           346          99            87           457                                                        457
 D-4          215           205          164           152          377                                                        377
 D-5          104           95           169           166          271                                                        271
 D-6          77            70           109           108          188                                                        188

我希望输出是表格形式的东西,比如

                               Mary Ann
            Peter C.      Richard                    Henry L.      Total         Total          Total          Total           Total
                                      Micheletti-
           Bylone, Sr.     Harlan                    Coia, Jr.    Machine       Vote By      Provisional     Emergency         Public
                                        Levari
           Democratic    Democratic                 Republican     Count         Mail          Count           Count           Count
                                      Republican
District
 D-1          205           195          230           223          436           113            16                            565
 D-2          202           160          275           261          459                                                        459
 D-3          331           346          99            87           457                                                        457
 D-4          215           205          164           152          377                                                        377
 D-5          104           95           169           166          271                                                        271
 D-6          77            70           109           108          188                                                        188

除了姓名和党派为一个字符串。目标是将其与其他类似文件合并以创建数据集。

标签: r

解决方案


也许你可以概括这种方法,但我不认为,它在与示例数据以外的其他数据一起使用时非常稳定。

我将您的示例放入一个名为example.txt.

library(tidyverse)

input <- read_lines("example.txt")

input[as.logical(cumsum(input == "District"))] %>% 
  tibble() %>% 
  slice(-1) %>% 
  mutate(count = str_replace_all(string = ., "\\s{9,12}", ";")) %>%
  select(-.) %>% 
  separate(col = count, into = c("District", as.character(1:9)), sep = ";") %>% 
  mutate(across(everything(), str_trim),
         across(as.character(1:9), as.integer))

返回

# A tibble: 6 x 10
  District   `1`   `2`   `3`   `4`   `5`   `6`   `7`   `8`   `9`
  <chr>    <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 D-1        205   195   230   223   436   113    16    NA   565
2 D-2        202   160   275   261   459    NA    NA    NA   459
3 D-3        331   346    99    87   457    NA    NA    NA   457
4 D-4        215   205   164   152   377    NA    NA    NA   377
5 D-5        104    95   169   166   271    NA    NA    NA   271
6 D-6         77    70   109   108   188    NA    NA    NA   188

创建列名(候选名称)是一项棘手的任务。根据计数,可能需要调整替换为“;”的空格:\\s{9,12}表示替换至少 9 到 12 个空格字符。


推荐阅读