ngram包的文本编码问题

时间:2017-05-04 12:36:22

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

我有一个名为'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)未在验证的答案中提供我的问题的解决方案,因此这不是一个重复的问题,但确实提供了一些线索,请参阅下面的答案

1 个答案:

答案 0 :(得分:0)

在问题评论中跟随@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)