2017-05-04 61 views
0

我有一個名爲'str'的字符串,我從加載RDS文件中獲得。ngram包的文本編碼問題

此字符串包含法語口音,在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

首先想到,不要使用str,因爲它是R中的一個內部函數。請參閱'?str'表示我的意思。 –

+1

[處理特殊字符例如在R的口音](http://stackoverflow.com/questions/9511281/handling-special-characters-eg-accents-in-r) –

+0

@ErikSchutte它用於所有的ngram包的例子,所以我保持一致: ) –

回答

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) 
+0

儘管當應用於已經很好編碼的字符串時,它會返回NA ... –