不像英文数据,readr 可以直接读取。

    由于编码问题,可能会面临一些报错:

    1. wk <- worker()
    2. mytxt <- readr::read_file("yuqingnian.txt")
    3. words <- segment(mytxt, wk)
    4. 2021-05-22 11:32:15 ../inst/include/lib/PreFilter.hpp:21 ERROR decode failed.

    readr 提供了包guess_encoding 可以尝试对文本内容进行编码方式的自动获取。

    比如我们直接读取了庆余年小说中的前100 行:

    1. lines <- readLines("yuqingnian.txt", n = 100)
    2. a <- charToRaw(paste(lines, collapse = " ")) # charToRaw 接收一个长度的字符串向量
    3. > a[1:10]
    4. [1] c9 f9 c3 f7 3a b1 be ca e9 d3

    因为guess_encoding 接受的是十六进制编码的内容,因此需要进行转换。

    接着直接猜就可以了,提供了一个置信度表格:

    1. > guess_encoding(a)
    2. # A tibble: 4 x 2
    3. encoding confidence
    4. <chr> <dbl>
    5. 1 GB18030 1
    6. 2 EUC-JP 0.69
    7. 3 EUC-KR 0.69
    8. 4 Big5 0.57

    果然是GB18030 !!! tql!!!!

    另外,需要注意的是,如果文本数据量比较小,可能会出错,比如:

    1. > paste(head(names(tab2), 20), collapse = " ")
    2. [1] "范闲 自己 没有 说道 知道 什么 皇帝 有些 陛下 只是 看着 一个 事情 已经 这个 京都 监察院 所以 这些 不是"
    3. > charToRaw(paste(head(names(tab2), 20), collapse = " "))
    4. [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
    5. [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
    6. [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
    7. [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
    8. [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
    9. [126] e4 bb a5 20 e8 bf 99 e4 ba 9b 20 e4 b8 8d e6 98 af
    10. > a <- charToRaw(paste(head(names(tab2), 20), collapse = " "))
    11. > guess_encoding(a)
    12. # A tibble: 4 x 2
    13. encoding confidence
    14. <chr> <dbl>
    15. 1 UTF-8 1
    16. 2 windows-1255 0.25
    17. 3 windows-1255 0.25
    18. 4 KOI8-R 0.21

    utf-8 就出错了:

    1. > mytxt <- readr::read_file("yuqingnian.txt", locale(encoding = "UTF-8") )
    2. > words <- segment(mytxt, wk)
    3. 2021-05-22 11:35:53 ../inst/include/lib/PreFilter.hpp:21 ERROR decode failed.