2016-11-20 9 views
2

문자열에서 dfm 문자를 생성하려고합니다. dfm이 선택할 수없는 문제는 "/" "-" "같은 구두점의 기능을 만들 수 있습니다." 또는 '. 대한문자로 된 dfm을 생성합니다.

require(quanteda) 
dict = c('a','b','c','d','e','f','/',".",'-',"'") 
dict <- quanteda::dictionary(sapply(dict, list)) 

x<-c("cab","baa", "a/de-d/f","ad") 
x<-sapply(x, function(x) strsplit(x,"")[[1]]) 
x<-sapply(x, function(x) paste(x, collapse = " ")) 

mat <- dfm(x, dictionary = dict, valuetype = "regex") 
mat <- as.matrix(mat) 
mat 
  1. "A/드-D/F", 나는 "/" "문자를 캡처 할 -."너무
  2. 이유이다 "" 기능은 행렬 역할을합니다. 어떻게 개별 기능으로 유지할 수 있습니까?
+0

'tokens <- tokenize (x, what = "character")와 비슷합니다. 매트 <- dfm (토큰, 사전 = dict, valueetype = "고정")'? 정규식 ("regex")에서'.'는 모든 문자를 나타냅니다. – lukeA

+0

감사합니다. 이것은 내가 찾고 있었던 바로 그 것이다. – SuperSatya

답변

0

문제는 (@lukeA가 주석에서 지적한대로) valuetype이 잘못된 패턴 일치를 사용하고 있다는 것입니다. .이 임의의 문자를 나타내는 일반 표현식을 사용하고 있으므로 여기서 전체 (행렬이라고 부르는 것)를 얻습니다.

먼저 x을보고 공백에 dfm()으로 공백으로 표시하여 각 문자가 토큰이되도록하십시오.

x 
#  cab    baa   a/de-d/f    ad 
# "c a b"   "b a a" "a/d e - d/f"    "a d" 

이 (가) "정규식"일치와 다음 (2) 첫째, 당신이 얻고있는 답변을 닫기하지만 응답하지 않습니다

dfm(x, dictionary = dict, valuetype = "regex", verbose = FALSE) 
## Document-feature matrix of: 4 documents, 10 features. 
## 4 x 10 sparse Matrix of class "dfmSparse" 
##   features 
## docs  a b c d e f/. - ' 
## cab  1 1 1 0 0 0 0 3 0 0 
## baa  2 1 0 0 0 0 0 3 0 0 
## a/de-d/f 1 0 0 2 1 1 0 5 0 0 
## ad  1 0 0 1 0 0 0 2 0 0 

(1). 이를 해결하려면 구두점을 제거하지 않도록 기본 토큰 화 동작을 dfm()까지 변경해야합니다.

dfm(x, dictionary = dict, valuetype = "fixed", removePunct = FALSE, verbose = FALSE) 
## Document-feature matrix of: 4 documents, 10 features. 
## 4 x 10 sparse Matrix of class "dfmSparse" 
##   features 
## docs  a b c d e f/. - ' 
## cab  1 1 1 0 0 0 0 0 0 0 
## baa  2 1 0 0 0 0 0 0 0 0 
## a/de-d/f 1 0 0 2 1 1 2 0 1 0 
## ad  1 0 0 1 0 0 0 0 0 0 

지금 /-이 계산되고있다. .'은 사전 키이므로 모든 문서에 대해 0으로 계산되므로 기능으로 남아 있습니다.

+0

감사합니다. 나는 이미 valuetype = "fixed"인자로 그리고 removPunct를 사용하지 않고 고정시켰다. 나는 그것이 어쨌든 모든 구두점을 잡기 때문에 중요하지 않다고 생각합니다. – SuperSatya