2016-06-30 6 views
1

R {tm}을 사용하여 텍스트 마이닝에서 다음 MWE를 고려하십시오. Toyota는 미국에서 여러 SUV 모델을 보유하고 있습니다. models<-c("highlander","land cruiser","rav4","sequoia","4runner"). 일반적인 미디어는 "toyota rav4"(코퍼스는 이미 소문자로 변환 됨)가 아닌 "rav4"를 의미합니다. DocumentTermMatrix에서 Toyota suvs의 단일 열을 얻으려면이 모든 브랜드를 하나의 일반 "toyota_suv"로 변환해야합니다. 내가 지금하고있는 일은 길이 (모델)에 대해 mycorpus<-tm_map(mycorpus, gsub, pattern="rav4", replacement="toyota_suv")을 반복하는 것입니다. 해킹은 model_names<-rep("toyota_suv",length(models))을 설정하고 삶을 영위하는 것입니다. 다차원 매핑을 사용하여 사전을 설정하면 모든 표현식에서 models이 'toyota_suv'로 대체됩니다. 많은 감사합니다.R 사전 : 다 대일 매핑 만들기

답변

4

벡터화 된 대체 기능을 사용할 수 있습니다. stringi 패키지는 stri_replace_all 패밀리와 같은 기능을 제공합니다. 여기서는 stri_replace_all_fixed을 사용하지만 필요에 따라 대소 문자 구분 및 기타 옵션을 조정합니다.

library(tm) 
library(stringi) 

toyota_suvs <- c("highlander","land cruiser","rav4","sequoia","4runner") 

tm_map(toyCorp, stri_replace_all_fixed, 
    pattern = toyota_suvs, replacement = "toyota_suv", 
    vectorize_all = FALSE) 

데이터 :

toyExample <- c("you don't know about the rav4, John Snow", 
    "the highlander is a great car", 
    "I want a land cruiser") 

toyCorp <- Corpus(VectorSource(toyExample)) 
+0

감사합니다. 다른 질문을 열지 않고 어떻게 시간을 기준으로 사전 매핑과 비교합니까? – Pradeep

+0

@Pradeep 잘 모르겠습니다. 예를 들어 문서 세트를 제공하고 정확히 어떤 종류의 출력을 얻으려면 좀 더 많은 다리 작업을해야한다고 생각합니다. 입력 문서 자체를 바꾸고 자한다면 (코퍼스 생성 전에)'stringi'를 직접 사용하여 이길 수는 없을 것입니다 :'stri_replace_all_fixed (toyExample, pattern = toyota_suvs, replacement = "toyota_suv", vectorize_all = FALSE)'. 'tm_map'에 피드를 보내면 상당히 느려질 것입니다. – Jota

+0

시간이 중요한 고려 사항이라면, 나는'tm' 패키지에서 벗어날 것입니다. 사전 메서드가있는'quanteda '를 시도해 볼 수도 있지만, "land cruiser"와 같이 여러 단어로 직접 작업 할 수는 없습니다. 따라서 일부 추가 처리가 필요합니다. – Jota