2016-10-03 6 views
-2

스피TermDocumentMatrix에서 행을 하나의 행으로 결합하는 방법은 무엇입니까?

TermDocumentMatrix (나는 모든 행이 각각의 단어를 나타내는 알) '오두막, 직원 및 승무원'samething을 의미하기 때문에

ex) cabin, staff -> crews

, 스피 결합하는 시도에 행의에 행을 결합하는 시도 '승무원, 직원'을 나타내는 행 은 '승무원'을 나타내는 한 행에 표시됩니다.

하지만 전혀 작동하지 않습니다.

R 내가 입력 argument "weighting" is missing, with no default

코드는이

이 코드를 수정하거나이 문제를 해결하기 위해 더 나은 방법을 제안하십시오 TermDocumentMatrix 행을 결합하는 올바른 접근 방식이 아닌 어쩌면

r=GET('http://www.airlinequality.com/airline-reviews/cathay-pacific-airways/') 
base_url=('http://www.airlinequality.com/airline-reviews/cathay-pacific-airways/') 
h<-read_html(base_url) 

all.reviews = c() 

for (i in 1:10){ 
print(i) 
url = paste(base_url, 'page/', i, '/', sep="") 
r = GET(url) 
h = read_html(r) 
comment_area = html_nodes(h, '.tc_mobile') 
comments= html_nodes(comment_area, '.text_content') 
reviews = html_text(comments) 
all.reviews=c(all.reviews, reviews)} 

cps <- Corpus(VectorSource(all.reviews)) 
cps <- tm_map(cps, content_transformer(tolower)) 
cps <- tm_map(cps, content_transformer(stripWhitespace)) 
cps <- tm_map(cps, content_transformer(removePunctuation)) 
cps <- tm_map(cps, content_transformer(removeNumbers)) 
cps <- tm_map(cps, removeWords, stopwords("english")) 

tdm <- TermDocumentMatrix(cps, control=list(
wordLengths=c(3, 20), 
weighting=weightTf)) 

rows.cabin = grep('cabin|staff', row.names(tdm)) 
rows.cabin 
# [1] 235 1594 
count.cabin = as.array(rollup(tdm[rows.cabin,], 1)) 
count.cabin 
#Docs 
#Terms 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 
#1 0 1 1 0 0 2 2 0 0 1 1 0 4 0 1 0 1 0 2 1 0 0 1 3 1 4 2 0 3 0 1 1 4 0 0 2 1 0 0 2 1 0 2 1 3 3 1 
#Docs 
#Terms 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 
#1 0 1 0 1 2 3 2 2 1 1 0 2 0 0 0 0 0 2 0 1 0 0 4 0 2 2 1 3 1 1 1 1 0 0 0 5 3 0 2 1 0 1 0 0 
#Docs 
#Terms 92 93 94 95 96 97 98 99 100 
#1 1 5 2 1 0 0 0 1 0 
row.crews = grep('crews', row.names(tdm)) 
row.crews 
#[1] 408 
tdm[row.crews,] = count.cabin 
rows.cabin = setdiff(rows.cabin, row.crews) # ok 
tdm = tdm[-rows.cabin,] # ok 

dtm = as.DocumentTermMatrix(tdm) 
# Error in .TermDocumentMatrix(t(x), weighting) : 
# argument "weighting" is missing, with no default 

이하 말했다 문제.

미리 감사드립니다.

답변

0

흠 나는 어째서 당신이 당신의 접근 방식을 고수하는지 궁금합니다. 단지 복사 + 붙여 넣기 + 조정 * 내 제안을 here에서하는 대신 명백하게 작동하지 않습니다.

나는 단지 dict 정의 내부의 라인을 조정 *
library(tm) 
library(httr) 
library(rvest) 
library(slam) 
# [...] # your code 
inspect(tdm[grep("cabin|staff|crew", Terms(tdm), ignore.case=TRUE), 1:15]) 
#  Docs 
# Terms 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
# cabin 0 0 0 0 0 1 1 0 0 1 0 0 3 0 0 
# crew 0 0 0 1 1 1 1 0 2 1 0 1 0 2 0 
# crews 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
# staff 0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 

dict <- list(
    "CREW" = grep("cabin|staff|crew", Terms(tdm), ignore.case=TRUE, value = TRUE) 
) 
terms <- Terms(tdm) 
for (x in seq_along(dict)) 
    terms[terms %in% dict[[x]] ] <- names(dict)[x] 
tdm <- slam::rollup(tdm, 1, terms, sum) 
inspect(tdm[grep("cabin|staff|crew", Terms(tdm), ignore.case=TRUE), 1:15]) 
#  Docs 
# Terms 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
# CREW 0 1 1 1 1 3 3 0 2 2 1 1 4 2 1 

...

+0

안녕! 감사합니다. 늦어서 죄송합니다. –

+0

하지만 여전히 제안한 방식으로 행을 결합한 후에 TermDocumentMatrix에서 tf, tfidf 가중치를 잃었습니다. 나는 많은 것들을 시도했지만, 왜 그리고 어떻게 해결 해야할지 모르겠습니다. 너는 어떤 생각이있어? –

+0

이론 : 속성 (tdm), 목록 (가중 = unlist (속성 (weightTf) [c ("이름", "약자"), F, F)))'및 표준 용어 주파수 가중치 (이름 및 약어)가 반환됩니다. – lukeA