解析/抓取rtf文件

时间:2018-03-27 02:49:04

标签: r parsing scrape

我正在尝试将一堆rtf文件转换为文本文件,然后抓取一些信息并使用R将其放入表中。到目前为止,我的代码如下:

library(unrtf)
text <- unrtf("adnot_philippe89017r.rtf", format = "text")
write.table(text)

这给了我一个看起来像的文本文件:

"x"
"1" "###  Translation from RTF performed by UnRTF, version 0.21.9 
### font table contains 10 fonts total

TITLE: TABLE NOMINATIVE
AUTHOR: Sbastien Dubourg

### creation date: 31 January 2002 19:17 

### revision date: 14 March 2003 10:31 

### total pages: 1

### total words: 1

### total chars: 8
ADNOT (Philippe)
sénateur (Aube)
NI

Délégué de la Réunion administrative des Sénateurs ne figurant sur la liste d'aucun groupe.

NOMINATIONS

Membre de la commission des finances.

Membre de la Délégation sénatoriale aux entreprises.

Membre de la Délégation sénatoriale à la prospective.

Membre suppléant du Conseil national de l'enseignement supérieur et de la recherche.

Membre titulaire de la Commission départementale de répartition des crédits de la dotation d'équipement des territoires ruraux.

DÉPÔTS

Proposition de loi tendant à ouvrir le droit à sépulture dans un cimetière d'une commune aux personnes qui y sont nées [n302 (2017-2018)] (14 février 2018)- Collectivités territoriales.

INTERVENTIONS EN COMMISSION

Réunion du mercredi 31 janvier 2018 (commission des finances) : Article 13 de la Constitution - Audition de M. Nicolas Dufourcq, candidat proposé par le Président de la République aux fonctions de directeur général de la société anonyme Bpifrance.

Réunion du mercredi 7 février 2018 (commission des finances) : Les nouveaux usages et la régulation des chaînes de blocs (blockchain) - Audition.

Réunion du mercredi 7 mars 2018 (commission des finances) : Pistes de réflexion du groupe de travail relatif à l'évolution de la fiscalité locale - Communication.

INTERVENTIONS EN SEANCE PUBLIQUE

-Projet de loi relatif à l'orientation et à la réussite des étudiants [n242 (2017-2018)]- (7 février 2018)-Discussion générale: p.1064

我想了解以下信息:

ADNOT (Philippe)
sénateur (Aube)
NI

然后把它变成一张看起来像的表:

Firstname     Lastname     District     Party
Philippe      Adnot        Aube         NI

任何人都可以帮我一把吗?

1 个答案:

答案 0 :(得分:0)

如果数据始终以这种方式构建,则可以执行此操作。首先,像你一样以字符串形式阅读文本 - 我将在这里使用一段文字:

> text
[1] "ADNOT (Philippe)\nsénateur (Aube)\nNI\n\nDélégué de la Réunion administrative des Sénateurs ne figurant sur la liste d'aucun groupe.\n\nNOMINATIONS\n\nMembre de la commission des finances."

将其分成\n\n行,这会将您的所有信息都放到第一个元素中:

> split <- unlist(strsplit(text,"\n\n"))
> length(split)
[1] 4
> split
[1] "ADNOT (Philippe)\nsénateur (Aube)\nNI"                                                      
[2] "Délégué de la Réunion administrative des Sénateurs ne figurant sur la liste d'aucun groupe."
[3] "NOMINATIONS"                                                                                
[4] "Membre de la commission des finances."         

然后创建数据框:

> new_df <- data.frame(x1=character(0),x2=character(0),x3=character(0),x4=character(0))
> new_df <- rbind(new_df,tokens[c(3,1,7,9)])
> names(new_df) <- c("Firstname","Lastname","District","Party")
> new_df
  Firstname Lastname District Party
1  Philippe    ADNOT     Aube    NI

不幸的是,这只有在您的数据始终处于完全相同的格式时才有效。但也许就是这样!