[英]Pattern Matching using Grep and/or RegEx to Extract ID from metadata field in R
[英]Extract metadata with R
美好的一天
我是Stackoverflow的新手:)我正在嘗試使用R進行編程,並發現此平台是非常有用的幫助。
我已經利用stackoverflow開發了一些代碼,但是現在我無法從此htm文件中讀取元數據
在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
謝謝您的幫助
我知道的最簡單的方法是:
從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
變量中,然后使用“ Row.names”(現在第一列的新名稱)將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
使用all=TRUE
,可以保留所有字段(包含和不包含數據),從而使前進的工作變得容易。
如果您從第二頁的CRAN上查看此PDF,則“ 詳細信息 ”部分將向您展示如何訪問內容和元數據。 從那里開始,僅是取消列表即可將其移入數據幀。
如果您迷路了,請發送評論,我會盡力幫助您!
按要求編輯:
將此數據寫入Excel並不是很困難,因為數據已經在統一數據框中為“正方形”。 您只需安裝xlsx
軟件包和xlxsjars
然后使用以下功能:
write.xlsx(meta, file, sheetName="Sheet1",
col.names=TRUE, row.names=TRUE, append=FALSE, showNA=TRUE)
您可以在此處找到有關包裝的信息:第38頁提供了更多詳細信息。 而且,如果您要保存內容,則可以將meta
更改為文件中的content
,這些文件將從語料庫中提取數據並創建初始數據幀。 否則整個過程將相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.