簡體   English   中英

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM