2014-01-12 4 views
0

키/값 사전을 기반으로 토큰을 변환하는 데 사용하는 함수가 있습니다.mantain 사용자 정의 메타 데이터 tm_map에 대한 사용자 정의 함수

dictionary <- c("casa", "barco", "carro", "arbol") 
names(dictionary) <- c("home", "boat", "car", "tree") 

translate2 <- function (text, dictionary) { 
    text_out <- character(0) 
    for (i in 1:length(text)) { 
    text.split <- strsplit(text[i], "\\s") 
    translation <- dictionary[unlist(text.split)] 
    text_out <- append(text_out, paste(translation, sep="", collapse=" ")) 
    } 
    PlainTextDocument(text_out, id = ID(text), author = Author(text)) 
} 

이 기능은 메타`저자에 대해 올바르게 작동합니다

library(tm) 

text <- "My car is on the tree next to my home under the boat" 
corpus <- Corpus(VectorSource(text)) 
meta(corpus, "Author", type="local") <- "Kant" 
meta(corpus, "TextID", type="local") <- "121212" 
meta(corpus[[1]], "Author") 
# [1] "Kant" 

corpus <- tm_map(corpus, translate2, dictionary) 
meta(corpus[[1]], "Author") 
# [1] "Kant" 
corpus[[1]] 
# NA carro NA NA NA arbol NA NA NA casa NA NA barco 

하지만 함수의 약간 수정 된 버전 TextID 같은 사용자 정의 메타를 통과 할 때

translate1 <- function (text, dictionary) { 
    text_out <- character(0) 
    for (i in 1:length(text)) { 
    text.split <- strsplit(text[i], "\\s") 
    translation <- dictionary[unlist(text.split)] 
    text_out <- append(text_out, paste(translation, sep="", collapse=" ")) 
    } 
    PlainTextDocument(text_out, id = ID(text), author = Author(text), 
        TextID = TextID(text)) 
} 

얻을 수 있습니다.

text <- "My car is on the tree next to my home under the boat" 
corpus <- Corpus(VectorSource(text)) 
meta(corpus, "Author", type="local") <- "Kant" 
meta(corpus, "TextID", type="local") <- "121212" 
meta(corpus[[1]], "Author") 
# [1] "Kant" 
meta(corpus[[1]], "TextID") 
# [1] "121212" 

corpus <- tm_map(corpus, translate1, dictionary) 
# Error in PlainTextDocument(text_out, id = ID(text), author = Author(text), : 
#        unused argument (TextID = TextID(text)) 

답변

0

당신의 접근 방식과 몇 가지 문제가 있습니다

  1. PlainTextDocument이 인수를 TextID (이이 오류를 발생) ?PlainTextDocument에서 TextID

라는 이름의 기능이 없습니다

  • 이 없다, 그것은 보인다 그 당신이 찾고있는 인수는 localmetadata입니다. 여기

    예상대로 작동하는 것 같다 translate1의 버전입니다 :

    translate1 <- function (text, dictionary) { 
        text_out <- character(0) 
        for (i in 1:length(text)) { 
        text.split <- strsplit(text[i], "\\s") 
        translation <- dictionary[unlist(text.split)] 
        text_out <- append(text_out, paste(translation, sep="", collapse=" ")) 
        } 
        PlainTextDocument(text_out, id = ID(text), author = Author(text), 
            localmetadata = list(TextID = meta(text, "TextID"))) 
    } 
    
    text <- "My car is on the tree next to my home under the boat" 
    corpus <- Corpus(VectorSource(text)) 
    meta(corpus, "Author", type="local") <- "Kant" 
    meta(corpus, "TextID", type="local") <- "121212" 
    meta(corpus[[1]], "Author") 
    # [1] "Kant" 
    meta(corpus[[1]], "TextID") 
    # [1] "121212" 
    
    corpus <- tm_map(corpus, translate1, dictionary) 
    meta(corpus[[1]], "Author") 
    # [1] "Kant" 
    meta(corpus[[1]], "TextID") 
    # [1] "121212" 
    corpus[[1]] 
    # NA carro NA NA NA arbol NA NA NA casa NA NA barco