2017-09-19 1 views
1

일부 텍스트 마이닝을 수행하기 위해 Oracle DB에서 일부 데이터를 추출합니다. 내 데이터가 UTF8이고 vocab에서 처리 할 수 ​​없습니다.리스트를 토큰 화하는 것이 UTF8에서 작동하지 않습니다.

library(text2vec); 
library(DBI); 
Sys.setenv(TZ="+03:00"); 
drv=dbDriver("Oracle"); 
con=dbConnect(drv,username="user","pass",dbname="IP:port/servicename"); 

list=dbGetQuery(con,statement = "select * from test"); 

it_list = itoken(list$FNAME, 
        preprocessor = tolower, 
        tokenizer = word_tokenizer, 
        ids = list$ID, 
        progressbar = FALSE); 

vocab = create_vocabulary(it_list, ngram = c(ngram_min = 1L, ngram_max =2L)); 

하지만 영어 단어가 vocab에 있습니다.

플랫폼 x86_64의-W64-mingw32 아치 x86_64의 :

  • 목록 변수 객체 (load()으로로드 할 수 있습니다)
  • 나는 창
  • R.version을 사용하여이 link에 존재
    os mingw32
    시스템 x86_64, mingw32
    상태
    주요 3
    작은 3.0
    2016 년
    월 05
    일 03
    SVN 레브 70,573
    언어 R R 버전 3.3.0의 오라클 배포를 version.string
    (2016-05- 03) 별명 추정 교육용

답변

1

신고 해 주셔서 감사합니다. 실제로는 기본 토큰 화에 사용되는 base::strsplit()의 문제입니다.

강력한 UTF-8 지원을 사용하는 정규식에 stringi 패키지를 사용하는 것이 좋습니다. 아니면 stringi 상단의 토큰 화를위한 좋은 해결책 인 tokenizers을 사용하십시오.

예를 들어, 당신은 논문 "숫자"([[:alnum:]])로 아랍어 문자를 고려하지 않는 몇 가지 이유 base::strsplit()를 들어 word_tokenizer

tokenizers::tokenize_words("پوشاک بانک لي ") 
# "پوشاک" "بانک" "لي" 

의 드롭 인 교체로 tokenizers::tokenize_words를 사용할 수 있습니다.

strsplit("i was. there", "\\W") %>% lapply(function(x) x[nchar(x) > 0]) 
# "i"  "was" "there" 
strsplit("پوشاک بانک لي ", "\\W") %>% lapply(function(x) x[nchar(x) > 0]) 
# character(0) 
+1

페르시아어 기호입니다 : – parvij

+0

하지만 알파벳은 동일하지 않습니까? –

+0

네 말이 맞아, 독일어와 영어 알파벳과 다르다. – parvij

관련 문제