美好的一天
我是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
感谢您的帮助
答案 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
,从语料库中提取数据并制作初始数据帧。否则整个过程都是相同的