2010-07-15 11 views
6

मैं डेटासेट के लिए टर्म-दस्तावेज़-मैट्रिक्स की गणना करने के लिए tm पैकेज का उपयोग कर रहा हूं, अब मुझे फ़ाइल में शब्द-दस्तावेज़-मैट्रिक्स लिखना है, लेकिन जब मैं आर में लेखन कार्यों का उपयोग करता हूं तो मुझे एक त्रुटि मिल रही है।एक फ़ाइल में एक सरल ट्रिपलेट मैट्रिक्स लिखना?

यहाँ कोड है जो मैं उपयोग कर रहा हूँ और त्रुटि मैं हो रही है:

data("crude") 
tdm <- TermDocumentMatrix(crude, control = list(weighting = weightTfIdf, stopwords = TRUE)) 
dtm <- DocumentTermMatrix(crude, control = list(weighting = weightTfIdf, stopwords = TRUE)) 

और इस त्रुटि है, जबकि मैं इस डेटा के write.table आदेश का उपयोग करें:

Error in cat(list(...), file, sep, fill, labels, append) : argument 1 (type 'list') cannot be handled by 'cat' 

मैं समझता हूं कि टीबीएम सरल ट्रिपलेट मैट्रिक्स प्रकार का एक ऑब्जेक्ट है, लेकिन मैं इसे एक साधारण पाठ फ़ाइल में कैसे लिख सकता हूं।

उत्तर

6

मुझे लगता है कि मैं सवाल गलत समझ सकता है, लेकिन तुम सब करना चाहते हैं, एक फाइल करने के लिए अवधि दस्तावेज़ मैट्रिक्स निर्यात तो है अगर कैसे इस बारे में:

m <- inspect(tdm) 
DF <- as.data.frame(m, stringsAsFactors = FALSE) 
write.table(DF) 

है कि आप अपने साथी के बाद क्या कर रहे हैं ?

आशा है कि एक छोटे से मदद करता है,

टोनी Breyal

+0

धन्यवाद टोनी और शेन! समाधान ने मुझे बड़ा समय मदद की! –

+0

मुझे नहीं लगता कि यह अब और काम करता है, 'क्लास को ... को डेटा ... फ्रेम पर नहीं कर सकता' – wordsforthewise

+0

@wordsforthewise विंडोज 7, आर संस्करण 3.4.3, और tm_0.7-3 –

2

क्या फ़ाइल "मानव-पठनीय" होनी चाहिए? यदि नहीं, dump, dput, या save का उपयोग करें। यदि ऐसा है, तो अपनी सूची को डेटा.फ्रेम में कनवर्ट करें।

संपादित करें: आप एक मैट्रिक्स में अपनी सूची में बदल सकते हैं, तो प्रत्येक सूची तत्व matrix(unlist(list.name), nrow=length(list.name[[1]])) या ऐसा ही कुछ (या plyr के साथ) करने से समान लंबाई है।

आप आर में अपना एसवीएम विश्लेषण क्यों नहीं कर रहे हैं (उदाहरण के लिए कर्नलैब के साथ)?

संपादित करें 2: ठीक है, मैं अपने डेटा को देखा, और यह एक मैट्रिक्स में परिवर्तित करने के लिए, क्योंकि सूची तत्व नहीं बराबर लंबाई हैं आसान नहीं है:

> is.list(tdm) 
[1] TRUE 
> str(tdm) 
List of 7 
$ i  : int [1:1475] 15 29 151 152 173 205 215 216 227 228 ... 
$ j  : int [1:1475] 1 1 1 1 1 1 1 1 1 1 ... 
$ v  : Named num [1:1475] 3.32 4.32 2.32 2 2.32 ... 
    ..- attr(*, "names")= chr [1:1475] "1.50" "16.00" "barrel," "barrel." ... 
$ nrow  : int 985 
$ ncol  : int 20 
$ dimnames :List of 2 
    ..$ Terms: chr [1:985] "(bpd)" "(bpd)." "(gcc)" "(it) appears to be nearing a crossroads with regard to\nderegulation, both as it pertains to investments and imports," ... 
    ..$ Docs : chr [1:20] "127" "144" "191" "194" ... 
$ Weighting: chr [1:2] "term frequency - inverse document frequency" "tf-idf" 
- attr(*, "class")= chr [1:2] "TermDocumentMatrix" "simple_triplet_matrix" 

आदेश में इस बदलने के लिए एक मैट्रिक्स के लिए, आपको या तो इस सूची के तत्व (जैसे i, j) लेना होगा या फिर कुछ अन्य हेरफेर करना होगा।

संपादित करें 3: बस मेरे कमेंटरी यहाँ समाप्त करने के लिए: इन वस्तुओं inspect समारोह (the package vignette देखें) के साथ इस्तेमाल किया जा करने का इरादा कर रहे हैं।

जैसा कि चर्चा की गई है, write.table जैसे फ़ंक्शन का उपयोग करने के लिए, आपको अपनी सूची को मैट्रिक्स में परिवर्तित करने की आवश्यकता होगी, जिसके लिए उस सूची में कुछ हेरफेर की आवश्यकता होती है जैसे कि आपके बराबर लंबाई के कई वैक्टर हैं। इन tm ऑब्जेक्ट्स की संरचना को देखते हुए: यह करना बहुत मुश्किल होगा, और मेरा सुझाव है कि आप उस पैकेज के साथ शामिल सहायक कार्यों के साथ काम करें।

+0

हाय शेन वास्तव में मैं स्ट्रिंग कर्नेल के बिना एसवीएम के लिए इस टर्म-दस्तावेज़ मैट्रिक्स का उपयोग करना चाहता हूं, इसलिए मैं इसे मैट्रिक्स बनना पसंद करूंगा। –

+0

कर्नलैब में एसवीएम के लिए स्ट्रिंग कर्नेल आधारित विधियां हैं, मैंने उनका उपयोग किया, अच्छा और मजबूत वर्गीकरण मॉडल नहीं मिला, इसलिए सामान्य शब्दों के मैट्रिक्स के साथ प्रयास करना चाहते हैं। –

1
dtmMatrix <- as.matrix(dtm) 
write.csv(dtmMatrix, 'mydata.csv') 

यह निश्चित रूप काम करता है। हालांकि, जब मैंने इसे बहुत बड़े डीटीएम (25000 द्वारा 25000) पर करने की कोशिश की, तो उसने मेमोरी स्पेस की कमी से संबंधित त्रुटियां दीं।

dtm <- DocumentTermMatrix(corpus) 
dtm1 <- removeSparseTerms(dtm,0.998) ##max allowed sparsity 0.998 

m <- inspect(dtm1) 
DF <- as.data.frame(m, stringsAsFactors = FALSE) 
write.csv(DF,"mydata0.998sparse.csv") 

कौन सा काफी हद तक दस्तावेज़ अवधि मैट्रिक्स के आकार को कम:

मैं निम्नलिखित विधि का इस्तेमाल किया! यहां आप डीएफ में अधिक शर्तों को शामिल करने के लिए अधिकतम स्वीकार्य स्पर्सिटी (1 के करीब) बढ़ा सकते हैं।

संबंधित मुद्दे