将列表标记为不能与UTF8

时间:2017-09-19 06:33:43

标签: r encoding utf-8 text2vec

我从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));

但只是英文单词存在于词汇中。

  • 列表变量对象存在于此link中(可以加载load()
  • 我使用windows
  • R.version:
  

平台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)       绰号据称是教育

1 个答案:

答案 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)