1

我从 Oracle DB 中提取一些数据来进行一些文本挖掘。我的数据是 UTF8 并且 vocab 无法处理它。

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()
  • 我用窗户
  • 版本:

platform x86_64-w64-mingw32 arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 3.0
year 2016
month 05
day 03
svn rev 70573
language R
version.string Oracle Distribution of R version 3.3.0 (2016-05-03) 昵称 据说教育

4

1 回答 1

1

感谢您的报告。这实际上base::strsplit()是用于基本标记化的问题。

我建议您将stringi包用于具有强大 UTF-8 支持的正则表达式。或者简单地使用标记器 - 在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)
于 2017-09-19T07:43:20.803 回答