不像英文数据,readr 可以直接读取。
由于编码问题,可能会面临一些报错:
wk <- worker()mytxt <- readr::read_file("yuqingnian.txt")words <- segment(mytxt, wk)2021-05-22 11:32:15 ../inst/include/lib/PreFilter.hpp:21 ERROR decode failed.
readr 提供了包guess_encoding 可以尝试对文本内容进行编码方式的自动获取。
比如我们直接读取了庆余年小说中的前100 行:
lines <- readLines("yuqingnian.txt", n = 100)a <- charToRaw(paste(lines, collapse = " ")) # charToRaw 接收一个长度的字符串向量> a[1:10][1] c9 f9 c3 f7 3a b1 be ca e9 d3
因为guess_encoding 接受的是十六进制编码的内容,因此需要进行转换。
接着直接猜就可以了,提供了一个置信度表格:
> guess_encoding(a)# A tibble: 4 x 2encoding confidence<chr> <dbl>1 GB18030 12 EUC-JP 0.693 EUC-KR 0.694 Big5 0.57
果然是GB18030 !!! tql!!!!
另外,需要注意的是,如果文本数据量比较小,可能会出错,比如:
> paste(head(names(tab2), 20), collapse = " ")[1] "范闲 自己 没有 说道 知道 什么 皇帝 有些 陛下 只是 看着 一个 事情 已经 这个 京都 监察院 所以 这些 不是"> charToRaw(paste(head(names(tab2), 20), collapse = " "))[1] e8 8c 83 e9 97 b2 20 e8 87 aa e5 b7 b1 20 e6 b2 a1 e6 9c 89 20 e8 af b4 e9[26] 81 93 20 e7 9f a5 e9 81 93 20 e4 bb 80 e4 b9 88 20 e7 9a 87 e5 b8 9d 20 e6[51] 9c 89 e4 ba 9b 20 e9 99 9b e4 b8 8b 20 e5 8f aa e6 98 af 20 e7 9c 8b e7 9d[76] 80 20 e4 b8 80 e4 b8 aa 20 e4 ba 8b e6 83 85 20 e5 b7 b2 e7 bb 8f 20 e8 bf[101] 99 e4 b8 aa 20 e4 ba ac e9 83 bd 20 e7 9b 91 e5 af 9f e9 99 a2 20 e6 89 80[126] e4 bb a5 20 e8 bf 99 e4 ba 9b 20 e4 b8 8d e6 98 af> a <- charToRaw(paste(head(names(tab2), 20), collapse = " "))> guess_encoding(a)# A tibble: 4 x 2encoding confidence<chr> <dbl>1 UTF-8 12 windows-1255 0.253 windows-1255 0.254 KOI8-R 0.21
utf-8 就出错了:
> mytxt <- readr::read_file("yuqingnian.txt", locale(encoding = "UTF-8") )> words <- segment(mytxt, wk)2021-05-22 11:35:53 ../inst/include/lib/PreFilter.hpp:21 ERROR decode failed.
