标记列表不适用于 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));
但词汇中只有英文单词。
- 列表变量对象存在于此link(可以用
load()
加载)
- 我用windows
- R.version:
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)
我从 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));
但词汇中只有英文单词。
- 列表变量对象存在于此link(可以用
load()
加载) - 我用windows
- R.version:
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)