2017-05-04 5 views
0

J'ai une chaîne appelée 'str', que j'ai obtenue en chargeant un fichier RDS.Problème d'encodage de texte avec le paquetage ngram

Cette chaîne contient des accents français qui s'affichent très bien dans la console R studio. Toutefois, lorsque vous utilisez le package ngram sur cette chaîne, les caractères accentués ne s'affichent pas correctement.

Si je définis directement une chaîne accentuée dans R cela fonctionne très bien (voir 'str2' dans le code ci-dessous).

Comment puis-je résoudre cela, par exemple, en forçant un nouveau codage sur ma chaîne d'origine.

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 

EDIT:

Suggested link (handling special characters e.g. accents in R) n'a pas fourni une solution à mon problème dans la réponse validée, il est donc pas une question en double, mais il a fourni quelques indices, voir réponse ci-dessous

+1

Premières pensées, n'utilisez pas str car c'est une fonction interne dans R. Voir '? Str' pour ce que je veux dire. –

+1

Copie possible de [manipuler des caractères spéciaux, par ex. Accents dans R] (http://stackoverflow.com/questions/9511281/handling-special-characters-eg-accents-in-r) –

+0

@ErikSchutte il est utilisé dans tous les exemples du paquet ngram donc je suis resté cohérent: –

Répondre

0

En suivant le lien de @ErikSchutte dans le commentaire de la question, j'ai trouvé ce dont j'avais besoin. Ce n'est pas un doublon cependant que la réponse validée n'a pas fonctionné pour moi.

Je posterai ce qui a fonctionné mais je ne comprends pas pourquoi je le ferai, je ne validerai pas ma propre réponse, je validerai une meilleure si elle vient.

De 'handling special characters e.g. accents in R Je trouve les idées suivantes:

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")) 

un (et un seul) d'entre eux ont travaillé pour moi, celui-ci:

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

EDIT:

Cette La ligne fonctionne bien quand vous savez que votre chaîne n'est pas encodée correctement, mais elle le changera en NA, si elle a été encodée correctement. Voici ma solution unsexy pour résoudre le problème:

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

bien que lorsqu'il est appliqué à une chaîne qui est déjà bien codé, il renvoie NA ... –