我从Oracle DB中提取一些数据来进行一些文本挖掘。我的数据是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));
但只是英文单词存在于词汇中。
load()
)平台x86_64-w64-mingw32 拱x86_64
os mingw32
system x86_64,mingw32
状态
专业3 小3.0 2016年年 月05日 第03天 svn rev 70573
语言R
version.string R版本3.3.0的Oracle发行版(2016-05-03) 绰号据称是教育
答案 0 :(得分:1)
感谢报道。这实际上是base::strsplit()
的问题,用于基本标记化。
我建议你使用stringi包来获得强大的UTF-8支持。或者只使用tokenizers - stringi
之上的标记化的良好解决方案。
例如,您可以使用tokenizers::tokenize_words
作为word_tokenizer
tokenizers::tokenize_words("پوشاک بانک لي ")
# "پوشاک" "بانک" "لي"
出于某种原因,base::strsplit()
并未将这些阿拉伯符号视为"字母数字" ([[:alnum:]]
)。
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)