2016-09-10 4 views
1

입니다. 프로그래밍에 매우 익숙하며 내 대학 프로젝트의 R 프로그래밍에 대한 도움이 필요합니다. 각 단어의 빈도가있는 표를 만들고 싶습니다. 예를 들면 : 입력 파일은 이러한 CSV 파일에 쉼표 (,)로 구분하는 ID 사용자가 방문 ID와 webURLs 같은 데이터의 약 70000 행이 코드 아래URL에있는 모든 단어의 행 빈도는 R

ID     URLs 
m7fdn    privatkunden:handys, tablets, tarife:vorteile & services:ausland & roaming,privatkunden:hilfe:mehr hilfe:ger,privatkunden:hilfe:service-themen:internet dsl & ltekonfigurieren 
9ufdf    mein website:kontostand & rechnung:meinerechnung:6-monate-übersicht zu ihrer rufnummer,mein website:kontostand & rechnung:meinerechnung:kosten 
09nd7    404 <https://www.website.de/ussa/login/login.ftel?errorcode=2001&name=%20&goto=https%3a%,mein website:login online user:show form:login.ftel/login),mobile,mobile:meinwebsite:kundendaten (mydata.html),mobile:meinwebsite:startseite (index.html),privatkunden:home,privatkunden:meinwebsite:login.ftel 

URL의 모든 특수 문자를 제거했습니다 및 주파수를주고있다 전체 문서에서 사용 된 단어. 하지만 나는 한 번에 전체 문서를 원한다. 나는 행당 출력을 원한다. 내가 얻고

text <- readLines("sample.csv") 
docs <- Corpus(VectorSource(text)) 
inspect(docs) 
toSpace <- content_transformer(function (x , pattern)gsub(pattern, " ", x)) 
docs <- tm_map(docs, toSpace, "/") 
docs <- tm_map(docs, toSpace, "@") 
docs <- tm_map(docs, toSpace, ",") 
docs <- tm_map(docs, toSpace, ";") 
docs <- tm_map(docs, toSpace, "://") 
docs <- tm_map(docs, toSpace, ":") 
docs <- tm_map(docs, toSpace, "<") 
docs <- tm_map(docs, toSpace, ">") 
docs <- tm_map(docs, toSpace, "-") 
docs <- tm_map(docs, toSpace, "_") 
docs <- tm_map(docs, toSpace, "://") 
docs <- tm_map(docs, toSpace, "&") 
docs <- tm_map(docs, toSpace, ")") 
docs <- tm_map(docs, toSpace, "%") 


dtm <- TermDocumentMatrix(docs) 
m <- as.matrix(dtm) 
v <- sort(rowSums(m),decreasing=TRUE) 
d <- data.frame(word = names(v),freq=v) 

출력은 다음과 같습니다 :

     word freq 
mein     mein 1451 
website    website 1038 
privatkunden privatkunden 898 
meinwebsite  meinwebsite 479 
rechnung   rechnung 474 

I는 다음과 같이해야 원하는 출력 :

ID    privatkunden website hilfe rechnung kosten  
m7fdn    4    7   2   7  0 
9ufdf    3    1   9   3  5 
09nd7    5    7   2   8  9 

위의 표는 ID m7fdn가 4 번 privatkunden 것을 의미 그것의 URL 및 2 시간 hilfe에있는 등등. 위의 표는 샘플 용이며 정확한 단어는 계산하지 않습니다. 이 테이블은 많은 수의 단어가있을 수 있습니다. 이 산출물을 얻도록 도와주세요. 이 표를 얻으면 기계 학습을 적용해야합니다. 데이터의

1) 읽기 :

text <- readLines("sample.csv") 

text[1]는 데이터의 전체 첫 번째 줄에있는 당신에게 벡터를 제공, text[2]

+1

이미 필요한 것 : as.matrix (dtm). 접근 방식이 문서를 기둥으로 가지고 있기 때문에 필요한 경우 조 변경하십시오. 당신은'as.matrix (DocumentTermMatrix (docs))'대신 transpose 대신 직접'DocumentTermMatrix'를 사용할 수 있습니다. – Jota

+0

안녕하세요 Jota, 나는 ID를 제외하고 싶었지만 내 방법은 하나의 문서로 전체 inout 파일을 읽고 ID에서 빈도를 추가했습니다. 두 컬럼을 분리하여 사용했습니다. 그런데 제안에 감사드립니다. –

답변

1

은 여기 언급이 개 지점이 생각 전체 데이터의 두 번째 줄 등등. VectorSource에 필요한 것은 URL 열만있는 하나의 열입니다. read.table 또는 예 : 이 : tm 에서 데이터를 사용하여

require(tidyr) 
text <- readLines("1.txt") 
text <- data.frame(a=text[-1]) %>% separate(a, c("ID", "URLs"), sep=6) 

2)하여 URL을 코퍼스를 확인 : 말 ...

docs <- Corpus(VectorSource(text$URLs)) 
names(docs) <- text$ID 

지금 당신은 당신의 tm_map 변환을 할 당신이 할 :

dtm <- DocumentTermMatrix(docs) 

그리고 가면 :

> as.matrix(dtm[1:3,1:5]) 
     Terms 
Docs  (index.html (mydata.html 404 ã¼bersicht ausland 
    m7fdn   0   0 0   0  1 
    9ufdf   0   0 0   1  0 
    09nd7   1   1 1   0  0 
+0

감사합니다 Floo0. 그것은 효과가 있었다. –