2016-03-22 13 views
0

R (3.2.3) tm paketini (0.6-2) kullanıyorum ve içerdiğim kısmi dizgi eşleşmelerine göre corpus'u alt gruba ayırmak istiyorum metadat "id". Örneğin, "id" sütununda "ABD" dizesini içeren tüm belgeleri filtrelemek istiyorum. "ABD" dizgisinden önce gelen ve çeşitli karakterler ve sayılar izlenir.R- Kısmi dizelerle eşleşen meta verilere (id) göre bir satır alt kümesi

Benzer bir örnek here buldum. quanteda paketini indirmeniz önerilir, ancak bunun tm paketiyle de mümkün olması gerektiğini düşünüyorum.

Benzer bir soruna bir başka daha ilgili yanıt here bulunur. Bu örnek kodu içeriğime uyarlamaya çalıştım. Bununla birlikte, kısmi dizgi eşleştirmeyi dahil etmeyi başaramıyorum.

Kodumda şu ana kadar birçok sorun olabileceğini hayal ediyorum.

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

Ve aşağıdaki hata iletisi: Ne var şimdiye kadar bu gibi görünüyor

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

Ben de benim problem simüle bir tekrarlanabilir örnek ile gelip nasıl emin değilim bu gönderi.

cevap

0

Böyle işe yarayabilir: Sen "US" yerine "0" aradığınız

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 

. Ayrıntılar için ?grep'a bir göz atın (ör. fixed=TRUE).

+0

Çok teşekkür ederim! İhtiyacım olan şey tam anlamıyla yok. – tarti

İlgili konular