使用readtext编码

时间:2019-04-09 13:23:36

标签: r encoding utf-8 nlp

我想基于存储为.csv文件的数据进行一些文本分析,但是在使用readtext包进行编码时遇到了问题。

为了说明我的问题,我在Excel中创建了以下文件,并将其另存为.csv(UTF-8):

|---------------------|------------------|
|      c_text         |       c_id       |
|---------------------|------------------|
|      München        |        aa        |
|---------------------|------------------|
|       Laïrie        |        bb        |
|---------------------|------------------|
|        Mános        |        cc        |
|---------------------|------------------|

然后,我将数据加载到R中,如下所示:

text_raw <- readtext::readtext("path/test_encoding.csv"),
                   encoding = "UTF-8",
                   text_field = "c_text")
text_raw

输出为:

readtext object consisting of 3 documents and 1 docvar.
# Description: data.frame [3 x 3]
  doc_id              text              c_id 
  <chr>               <chr>             <chr>
1 test_encoding.csv.1 "\"München\"..." aa   
2 test_encoding.csv.2 "\"Laïrie\"..."  bb   
3 test_encoding.csv.3 "\"Mános\"..."   cc 

如果我随后将对象写入.csv文件,则输出将再次不同。命令write.csv(text_raw, file = "path", fileEncoding = "UTF-8")产生以下结果:

München
Laïrie
Mános

一些其他信息:

  • 我正在使用Windows计算机,而我的sys.getLocale()English_United Kingdom.1252(显然,它不能更改为UTF-8)

  • 即使我在readtext()函数中指定了其他编码(例如,“ utf8”,“ Windows-1252”,“ ISO8859-1”),输出也不会改变。但是,鉴于我将测试文件显式保存为utf-8,所以我不知道发生了什么。

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我创建了一个拉取请求,因为这是readtext包中的一个问题:

https://github.com/quanteda/readtext/pull/151

在此PR被接受或问题解决之前,您可以使用我的叉子解决此问题:

remotes::install_github("JBGruber/readtext")

更新

PR已获得批准,因此可以通过以下方式安装新的软件包版本:

remotes::install_github("quanteda/readtext")

然后它应该起作用:

df <- structure(list(c_text = structure(c(3L, 1L, 2L), .Label = c("Laïrie", 
                                                                  "Mános", "München"), class = "factor"), c_id = structure(1:3, .Label = c("aa", 
                                                                                                                                           "bb", "cc"), class = "factor")), class = "data.frame", row.names = c(NA, 
                                                                                                                                                                                                                -3L))
write.csv(df,
          "~/test.csv",
          row.names = FALSE,
          fileEncoding = "UTF-8")
text_raw <- readtext::readtext("~/test.csv",
                               encoding = "UTF-8",
                               text_field = "c_text")

text_raw
#> readtext object consisting of 3 documents and 1 docvar.
#> # Description: data.frame [3 x 3]
#>   doc_id     text             c_id 
#>   <chr>      <chr>            <chr>
#> 1 test.csv.1 "\"München\"..." aa   
#> 2 test.csv.2 "\"Laïrie\"..."  bb   
#> 3 test.csv.3 "\"Mános\"..."   cc

reprex package(v0.2.1)于2019-05-02创建