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