2016-03-22 6 views
0

Ich benutze das R (3.2.3) tm-Paket (0.6-2) und würde gerne meinen Teilkorpus nach Teilstring-Matches mit enthalten das Metadatum "id". Zum Beispiel möchte ich alle Dokumente, die die Zeichenfolge "US" in der Spalte "ID" enthalten filtern. Der Zeichenfolge "US" würden verschiedene Zeichen und Zahlen vorangehen und folgen.R- Subset ein Korpus von Meta-Daten (ID) übereinstimmenden Teilzeichenfolgen

Ich habe ein ähnliches Beispiel here gefunden. Es wird empfohlen, das quanteda Paket herunterzuladen, aber ich denke, das sollte auch mit dem tm Paket möglich sein.

Eine andere relevantere Antwort auf ein ähnliches Problem findet sich here. Ich habe versucht, diesen Beispielcode an meinen Kontext anzupassen. Es gelingt mir jedoch nicht, den Teilstring-Matching zu integrieren.

Ich kann mir vorstellen, dass mit meinem Code bisher viele Dinge nicht stimmen. Was ich habe, so sieht weit wie folgt aus:

US <- tm_filter(corpus, FUN = function(corpus, filter) any(meta(corpus)["id"] == filter), grep(".*US.*", corpus)) 

Und ich erhalte die folgende Fehlermeldung:

Error in structure(as.character(x), names = names(x)) : 
'names' attribute [3811] must be the same length as the vector [3] 

Ich bin auch nicht sicher, wie mit einem reproduzierbaren Beispiel kommen mein Problem Simulation für dieser Beitrag.

Antwort

0

Es könnte wie folgt funktionieren:

library(tm) 
reut21578 <- system.file("texts", "crude", package = "tm") 
(corp <- VCorpus(DirSource(reut21578), list(reader = readReut21578XMLasPlain))) 
# <<VCorpus>> 
# Metadata: corpus specific: 0, document level (indexed): 0 
# Content: documents: 20 
(idx <- grep("0", sapply(meta(corp, "id"), paste0), value=TRUE)) 
# 502 704 708 
# "502" "704" "708" 
(corpsubset <- corp[idx]) 
# <<VCorpus>> 
# Metadata: corpus specific: 0, document level (indexed): 0 
# Content: documents: 3 

Sie sind für "US" statt "0" suchen. Sehen Sie sich ?grep für Details an (z. B. fixed=TRUE).

+0

Vielen Dank! Es ist genau was ich brauche. – tarti

Verwandte Themen