2014-07-01 25 views
8

Yığın akışını ve web'de arama yaptım ve yalnızca kısmi çözümleri bulabilir VEYA TM veya qdap'deki değişikliklerden dolayı çalışmayan bazı dosyalar. Sorun aşağıda:Belge kimliğini R corpus ile koru

Bir dataframe vardır: (o Basit belge kimliği/adı ve bazı metin) kimliği ve Metin

İki sorunları var:

Bölüm 1: Bir tdm veya dtm nasıl oluşturabilirim ve belge adını/kimliğini nasıl koruyabilirim? Sadece teftişte "karakter (0)" gösterir (tdm).
Part 2 : Yalnızca belirli bir terimler listesini, yani özel stopwords'leri kaldırmanın karşılığını tutmak istiyorum. Bunun tüberlüğünde olmasını istiyorum, tdm/dtm değil. How to implement proximity rules in tm dictionary for counting words?

Bu seferki tdm kısmında gerçekleşir: Bölüm 2 için

, buraya geldiğimden bir çözüm kullandı! "Tm_map (my.corpus, keepOnlyWords, özel liste)" gibi bir şey kullandığınız 2. Bölüm için daha iyi bir çözüm var mı? "

Herhangi bir yardım büyük takdir edilecektir. Çok teşekkürler!

cevap

14

Öncelikle burada bir data.frame özel özelliklerini okumak için, biz kendi özel data.frame okuyucu yapmak için readTabular fonksiyonunu kullanacağız, Şimdi örnek bir data.frame

dd<-data.frame(
    id=10:13, 
    text=c("No wonder, then, that ever gathering volume from the mere transit ", 
     "So that in many cases such a panic did he finally strike, that few ", 
     "But there were still other and more vital practical influences at work", 
     "Not even at the present day has the original prestige of the Sperm Whale") 
    ,stringsAsFactors=F 
) 

bu. Bu, biz Biz sadece içeriği ve data.frame içinde kimliği için kullanmak üzere sütun belirtmek

library(tm) 
myReader <- readTabular(mapping=list(content="text", id="id")) 

yapmanız gereken tek şey. Şimdi DataframeSource ile okuyoruz ancak özel okuyucumuzu kullanıyoruz.

tm <- VCorpus(DataframeSource(dd), readerControl=list(reader=myReader)) 

Şimdi sadece kelimelerin belirli bir kümesi tutmak istiyorsanız, kendi content_transformer işlev oluşturabilirsiniz. Bunu yapmanın bir yolu, bu bir boşlukla sözcük listesinde değil herşeyi yerini alacak

keepOnlyWords<-content_transformer(function(x,words) { 
    regmatches(x, 
     gregexpr(paste0("\\b(", paste(words,collapse="|"),"\\b)"), x) 
    , invert=T)<-" " 
    x 
}) 

olduğunu. Bundan sonra stripWhitespace'i çalıştırmak istediğinizi unutmayın. Böylece bizim dönüşümler

keep<-c("wonder","then","that","the") 

tm<-tm_map(tm, content_transformer(tolower)) 
tm<-tm_map(tm, keepOnlyWords, keep) 
tm<-tm_map(tm, stripWhitespace) 

gibi görünecektir Sonra da belge terimi matrisinin

dtm<-DocumentTermMatrix(tm) 
inspect(dtm) 

# <<DocumentTermMatrix (documents: 4, terms: 4)>> 
# Non-/sparse entries: 7/9 
# Sparsity   : 56% 
# Maximal term length: 6 
# Weighting   : term frequency (tf) 

#  Terms 
# Docs that the then wonder 
# 10 1 1 1  1 
# 11 2 0 0  0 
# 12 0 1 0  0 
# 13 0 3 0  0 

çevirebilirsiniz ve o kelime ve verilerden uygun Doküman kimliklerinin bizim listesi vardır can. çerçeve

+0

Harika! Bir rüya çalışıyor! – RUser

+0

Teşekkürler. İyi iş! – imriss

+1

ancak diğer deneyler için kullanabilmemiz için kimlikleri eşlenmiş bir veri çerçevesine nasıl dönüştürebiliriz? – bicepjai