2017-08-31 4 views
0

Guten TagExtrahieren von Metadaten mit R

Ich bin ein Neuling auf Stackoverflow :) ich meine Hand mit der Programmierung mit R versuche und fand diese Plattform eine große Hilfe.

Ich habe einige Code nutzt Stackoverflow entwickelt, aber jetzt bin ich es nicht die Metadaten aus diesem htm file

Bitte direkten Download dieser Datei vor der Verwendung in 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 

Siehe Metadaten zugeordnet lesen mit erster Artikel

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 

Wie kann ich jeden Metadaten speichern (SE, HD, AU, ..PUB, AU) - alle 18 Metadatenelemente spaltenweise in einem datafra Ich oder schreiben Sie für jedes Dokument in Corpus Excel?

Ausgabebeispiel:

 SE HD AU ... 
Doc 1 
    2 
    3 

Vielen Dank für Ihre Hilfe

+0

Willkommen bei StackOverflow! Bitte lesen Sie die Informationen über [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und wie man ein [reproduzierbares Beispiel gibt] (http://stackoverflow.com/questions/ 5963269). Dies wird es anderen sehr erleichtern, Ihnen zu helfen. – Sotos

+1

Nimm 'Kopf (Korpus)' und zeig uns die Daten. Wenn Sie Hilfe beim Sortieren der Daten in Ihre Gruppierungen benötigen, müssen wir wissen, wie es aussieht. – sconfluentus

+0

@sconfluentus Vielen Dank für Ihre Beratung - Ich habe dies zu den oben genannten hinzugefügt –

Antwort

1

Der einfachste Weg, den ich kenne, es zu tun ist:

einen Datenrahmen Machen Sie aus jeder der drei Listen in Ihre corpus:

one<-data.frame(unlist(meta(corpus[[1]]))) 
two<-data.frame(unlist(meta(corpus[[2]]))) 
three<-data.frame(unlist(meta(corpus[[3]]))) 

Dann werden Sie wollen füge sie zu einem einzigen Datenrahmen zusammen. Für die ersten beiden ist dies einfach, da die Verwendung von "row.names" dazu führt, dass sie bei den NON VARIABLE-Zeilennamen zusammengeführt werden. Aber die zweite Zusammenführung, müssen Sie basierend auf der Spalte jetzt mit dem Namen "Row.Names" zusammenführen So müssen Sie erstellen und benennen Sie die erste Spalte der dritten Datei mit den Zeilennamen, mit setDT können Sie dies tun, ohne eine weitere vollständige Reihe von Informationen hinzufügen, nur R Umleiten des Zeilennamen als erste Spalte zu sehen

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

dann verschmelzen Sie einfach den ersten und zweiten Datenrahmen in Variable mit dem Namen meta und dann meta verschmelzen mit three „row.names“ (den neuen Namen der ersten Spalte jetzt).

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

Ihre Daten werden wie folgt aussehen:

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> 

Diese NA Werte sind da, weil nicht alle der Unterlisten hatten Werte für alle Beobachtungen.

Indem Sie die all=TRUE in beiden Zusammenführungen verwenden, behalten Sie alle Felder mit und ohne Daten bei, was die Arbeit mit Vorwärtsbewegungen erleichtert.

Wenn Sie sich diese PDF from CRAN auf Seite zwei der Abschnitt Details anzeigen zeigt Ihnen, wie Sie auf den Inhalt und Metadaten zugreifen. Von dort ist es einfach über Nichtlisten, um sie in Datenrahmen zu verschieben.

Wenn Sie verloren gehen, senden Sie einen Kommentar und ich werde tun, was ich kann, um Ihnen zu helfen!

EDIT AUF ANFRAGE:

dies zu Excel schreiben ist nicht super schwierig, weil die Daten bereits sind „square“ in einem einheitlichen Datenrahmen. Sie würden nur installieren xlsx Paket und xlxsjars dann verwenden Sie die folgende Funktion:

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

Sie können Informationen about the package here: Seite 38 mehr Details gibt. Und wenn Sie den Inhalt speichern möchten, können Sie meta zu content in den Dateien ändern, die die Daten aus dem Korpus extrahieren und die anfänglichen Datenrahmen erstellen. Der gesamte Vorgang wird der gleiche sein

+0

Vielen Dank @sconfluentus - das ist perfekt. Wie kann ich den Inhalt der Artikel auch in der Excel-Datei speichern? Metadaten in htm werden als TD aufgelistet. –

+0

Vielen Dank @sconfluentus - Ihre Anmerkung zu 'Meta' zu 'Inhalt' ist sehr nützlich –

+0

Sie sind herzlich willkommen! – sconfluentus

Verwandte Themen