【问题标题】:Text encoding issue with ngram packagengram 包的文本编码问题
【发布时间】:2017-05-04 12:36:21
【问题描述】:

我有一个名为“str”的字符串,它是通过加载 RDS 文件获得的。

此字符串包含在 R Studio 控制台中可以正常显示的法语口音。 但是,在此字符串上使用 ngram 包时,重音字符无法正确显示。

如果我直接在 R 中定义重音字符串,它就可以正常工作(参见下面代码中的“str2”)。

我该如何解决这个问题,例如,对我的原始字符串强制使用新编码。

str # console displays "crédit hypothécaire en juillet"
ng <- ngram(str, n = 2,sep= " ")
get.phrasetable(ng)
# ngrams freq      prop
# 1      hypothécaire en     1 0.3333333
# 2 crédit hypothécaire     1 0.3333333
# 3            en juillet     1 0.3333333
str2 <- "crédit hypothécaire en juillet"
ng2 <- ngram(str2, n = 2,sep= " ")
get.phrasetable(ng2)
# ngrams freq      prop
# 1     hypothécaire en     1 0.3333333
# 2 crédit hypothécaire     1 0.3333333
# 3          en juillet     1 0.3333333

编辑:

建议的链接 (handling special characters e.g. accents in R) 在经过验证的答案中没有为我的问题提供解决方案,因此这不是重复的问题,但确实提供了一些线索,请参阅下面的答案

【问题讨论】:

  • 首先,不要使用 str,因为它是 R 中的内部函数。请参阅 ?str 了解我的意思。
  • @ErikSchutte 它在 ngram 包的所有示例中都使用过,所以我保持一致:)

标签: r utf-8 character-encoding n-gram


【解决方案1】:

按照问题评论中@ErikSchutte 的链接,我找到了我需要的东西。但是,它不是重复的,因为经过验证的答案对我不起作用。

我会发布有效的方法,但我不明白为什么会这样,所以我不会验证我自己的答案,如果有更好的答案,我会验证。

从'handling special characters e.g. accents in R'我发现以下想法:

Encoding(str) <- "UTF-8"
Encoding(str) <- "LATIN1"
str <- iconv(str, from="UTF-8", to="LATIN1")
str <- iconv(str, from="LATIN1", to="UTF-8")
enc2utf8(as(str, "character"))

其中一个(也是唯一一个)对我有用,这个:

str <- iconv(str, from="UTF-8", to="LATIN1")

编辑:

当您知道您的字符串编码不正确时,此行运行良好,但如果编码正确,它将将其更改为 NA。这是我解决问题的不合适的解决方案:

str_arr # a string or array of strings
encode_to_latin1 <- function(str_arr){
  str_arr_converted <- iconv(str_arr, from="UTF-8", to="LATIN1")
  nas <- is.na(str_arr_converted)
  str_arr_converted[nas] <- str_arr[nas]
  return(str_arr_converted)  
}
str_arr <- encode_to_latin1(str_arr)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-04-30
    • 2016-08-02
    • 2010-10-30
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多