使用R提取元数据

时间:2017-08-31 11:48:58

标签: r

美好的一天

我是Stackoverflow的新手:) 我正在尝试用R编程,并发现这个平台是一个很好的帮助来源。

我开发了一些利用stackoverflow的代码,但现在我无法从这个htm file

中读取元数据

请在使用R

之前直接下载此文件
setwd("~/NLP")
library(tm)
library(rvest)
library(tm.plugin.factiva)
file <-read_html("facts.htm")
source <- FactivaSource(file)
corpus <- Corpus(source, readerControl = list(language = NA))

# See the contents of the documents
inspect(corpus)

head(corpus)
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 3

查看与第一篇文章相关的元数据

meta(corpus[[3]])

meta(corpus[[3]])
  author       : character(0)
  datetimestamp: 2017-08-31
  description  : character(0)
  heading      : Rain, Rain, Rain
  id           : TIMEUK-170830-e
  language     : en
  origin       : thetimes.co.uk
  edition      : character(0)
  section      : Comment
  subject      : c("Hurricanes/Typhoons", "Storms", "Political/General News", "Disasters/Accidents", "Natural Disasters/Catastrophes", "Risk News", "Weather")
  coverage     : c("United States", "North America")
  company      : character(0)
  industry     : character(0)
  infocode     : character(0)
  infodesc     : character(0)
  wordcount    : 333
  publisher    : News UK & Ireland Limited
  rights       : © Times Newspapers Limited 2017

如何保存每个元数据(SE,HD,AU,..PUB,AU) - 在数据框中按列显示所有18个元数据元素,或者为语料库中的每个文档写入excel?

输出示例:

     SE HD AU ...
Doc 1
    2
    3

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我所知道的最简单的方法是:

corpus

中的三个列表中的每个列表中创建一个数据框
one<-data.frame(unlist(meta(corpus[[1]])))
two<-data.frame(unlist(meta(corpus[[2]])))
three<-data.frame(unlist(meta(corpus[[3]])))

然后,您需要将它们合并到一个数据框中。对于前两个,这很容易做到,因为使用"row.names"将导致它们在NON VARIABLE行名称上合并。但是第二次合并,你需要根据现在命名为"Row.Names"的列进行合并所以你需要使用行名创建和重命名第三个文件的第一列,使用setDT允许你这样做无需添加另一组完整信息,只需重定向R即可将行名称视为第一列

setDT(three, keep.rownames = TRUE)[]
colnames(three)[1] <- "Row.names"

然后您只需将第一个和第二个数据框合并到名为meta的变量中,然后使用&#34; Row.names&#34;将meta与three合并。 (现在是第一列的新名称)。

meta <- merge(one, two, by="row.names", all=TRUE) 
meta <- merge(meta, three, by = "Row.names", all=TRUE)

您的数据将如下所示:

  Row.names unlist.meta.corpus..1.... unlist.meta.corpus..2.... unlist.meta.corpus..3....
1    author             Jenni Russell                      <NA>                      <NA>
2 coverage1             United States               North Korea             United States
3 coverage2             North America             United States             North America
4 coverage3                      <NA>                     Japan                      <NA>
5 coverage4                      <NA>                 Pyongyang                      <NA>
6 coverage5                      <NA>              Asia Pacific                      <NA> 

那些NA值存在,因为并非所有子列表都具有所有观察值。

通过在两个合并上使用all=TRUE,您可以保留所有字段,包括数据和不包含数据,这样可以轻松地继续前进。

如果您在第2页上查看此PDF from CRAN详细信息部分将向您展示如何访问内容和元数据。从那里只需取消列出即可将它们移动到数据框中。

如果你迷路了,发表评论,我会尽我所能来帮助你!

按要求编辑:

将此内容写入Excel并不是一件非常困难的事情,因为数据已经是&#34; square&#34;在统一的数据框中。您只需安装xlsx包和xlxsjars,然后使用以下功能:

write.xlsx(meta, file, sheetName="Sheet1",
col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE)

您可以找到信息about the package here:第38页提供更多详细信息。  如果要保存内容,可以在文件中将meta更改为content,从语料库中提取数据并制作初始数据帧。否则整个过程都是相同的