标记列表不适用于 UTF8

tokenizing a list doesn't work with UTF8

我从 Oracle 数据库中提取了一些数据来进行一些文本挖掘。我的数据是 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));

但词汇中只有英文单词。

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) nickname Supposedly Educational

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

我建议您使用 stringi package for regex with strong UTF-8 support. Or simply use tokenizers - 在 stringi 之上进行标记化的良好解决方案。

例如,您可以使用 tokenizers::tokenize_words 作为 word_tokenizer

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

出于某种原因 base::strsplit() 不将这些阿拉伯符号视为 "alphanumeric" ([[: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)