2017-11-06 9 views
0

많은 이메일 파일을로드하고 R이 스팸 또는 햄을 알아 내려고 시도했습니다. 첫째, 나는 코퍼스를 만들었고, 용어 문서를 만들고 싶습니다. 오류가있었습니다. 그것을 고치는 방법? 가 'TermDocumentMatrix'에 대한 적용 방법은 클래스의 객체에 적용되지 "목록"TermDocumentMatrix가 코퍼스에서 작동하지 않습니다.

: 여기
email_corpus <- Corpus(VectorSource(NA)) 

setwd("C:/ham_spam/") 

library(tm) 
library(stringr) 

email_corpus <- Corpus(VectorSource(NA)) 

folders <- c("easy_ham/", "spam_2/") 

for(n in 1:2){ 
    folder <- folders[n] 
    for(i in 1:length(list.files(folder))){ 
    email <- list.files(folder)[i] 
    tmp <- readLines(str_c(folder, email)) 
    tmp <- str_c(tmp, collapse = "") 
    tmp_corpus <- Corpus(VectorSource(tmp)) 
    email_corpus <- c(email_corpus, tmp_corpus) 
    } 
} 

dtm_email <- DocumentTermMatrix(email_corpus) 

i가 (X 'TermDocumentMatrix ") UseMethod에

오류를 수신 오류라고

은 email_corpus의 예이고 email_corpus는 데이터 프레임의 목록입니다. c() 두 코퍼스 결합

$meta 
$language 
[1] "en" 

attr(,"class") 
[1] "CorpusMeta" 

$dmeta 
data frame with 0 columns and 1 row 

$content 
[1] "From [email protected] Thu Aug 22 12:46:39 2002Return-Path: <[email protected]>Delivered-To: [email protected]: from localhost (localhost [127.0.0.1])\tby phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34\tfor... <truncated> 

답변

0

간단한 list으로 변환하여 Corpus 유형을 제거한다.

한편, VCorpusc()을 사용하면 VCorpus 유형이 보존됩니다.

모든 Corpus 기능을 VCorpus으로 바꿔서 문제를 해결해야합니다.

당신은이 방법을 시도 할 수 있습니다
0

: 모두 당신의 햄과 스팸 메일 폴더가 포함 된 폴더에 작업 디렉토리 설정

:

setwd('/path/to/dir/that/contains/folders/') 

folders <- c("easy_ham/", "spam_2/") 

그런 다음 나열 할 수있는 모든 (이 경우 '.txt') 파일 당신이 디렉토리 작업

emails <- list.files(pattern = ".txt", # assuming all emails are .txt files 
        recursive = TRUE) # recurse listing in subdirs 

library(stringr) 
library(tm) 

요 (list.files() 기본적 path 것은 '.'입니다)

email_txt <- lapply(emails, function(x) { 
    tmp <- readLines(x) 
    tmp <- str_c(tmp, collapse = "") 
    return(tmp) 
}) 

가 읽기 텍스트에서 신체 만들기 : u는 다음 파일을 읽을 lapply()을 사용할 수 있습니다

email_corpus <- VCorpus(VectorSource(email_txt)) 

을 그리고 마지막으로 그 코퍼스에서 DocumentTermMatrix을 만듭니다

dtm_email <- DocumentTermMatrix(email_corpus)