2017-10-18 11 views
2

Vous cherchez des conseils sur la façon de remplacer une apostrophe bouclée par une apostrophe droite dans une liste R de vecteurs de caractères.Utiliser gsub pour remplacer l'apostrophe bouclée par une apostrophe droite dans la liste R des vecteurs de caractères

La raison pour laquelle je remplace les apostrophes bouclées - plus tard dans le script, je vérifie chaque élément de la liste, pour voir s'il est trouvé dans un dictionnaire (en utilisant qdapDictionary). Le dictionnaire utilise des apostrophes droites, ainsi les mots avec les apostrophes bouclées sont "rejetés".

Un exemple du code que j'ai actuellement suit. Dans ma liste de test, l'item # 6 contient une apostrophe bouclée, et l'item # 2 a une apostrophe droite.

Exemple:

list_TestWords <- as.list(c("this", "isn't", "ideal", "but", "we", "can’t", "fix", "it")) 

func_ReplaceTypographicApostrophes <- function(x) { 
    gsub("’", "'", x, ignore.case = TRUE) 
} 

list_TestWords_Fixed <- lapply(list_TestWords, func_ReplaceTypographicApostrophes) 

Le résultat: Aucun changement. L'article 6 utilise encore l'apostrophe bouclée. Voir la sortie ci-dessous.

list_TestWords_Fixed 
[[1]] 
[1] "this" 

[[2]] 
[1] "isn't" 

[[3]] 
[1] "ideal" 

[[4]] 
[1] "but" 

[[5]] 
[1] "we" 

[[6]] 
[1] "can’t" 

[[7]] 
[1] "fix" 

[[8]] 
[1] "it" 

Toute aide que vous pouvez offrir sera appréciée!

+0

Essayez 'gsub (" » », "'", x, fixe = TRUE) ' –

+0

Merci pour la suggestion, Wiktor. N'a pas fonctionné, mais souhaiterait recevoir des suggestions supplémentaires! – SarahWeaver

+0

Supplémentaire: 'gsub (" (* UCP) '","' ", x, perl = VRAI)' ou simplement 'gsub (" '","' ", x, perl = VRAI)'. Notez que 'ignore.case = TRUE' peut être supprimé en toute sécurité. –

Répondre

0

Vous économiserez ainsi contre un bug in R sous Windows. Essayez d'utiliser corpus::as_utf8 lors de votre saisie. Sinon, cela fonctionne aussi:

library(corpus) 
list_TestWords <- as.list(c("this", "isn't", "ideal", "but", "we", "can’t", "fix", "it")) 
lapply(list_TestWords, utf8_normalize, map_quote = TRUE) 

Cela remplacera les caractères suivants avec ASCII apostrophe:

U+055A ARMENIAN APOSTROPHE 
U+2018 LEFT SINGLE QUOTATION MARK 
U+2019 RIGHT SINGLE QUOTATION MARK 
U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK 
U+FF07 FULLWIDTH APOSTROPHE 

Il sera également convertir votre texte composé sous forme normale (NFC).

1

Je vois un problème dans votre appel à gsub:

gsub("/’", "/'", x, ignore.case = TRUE) 

Vous préfixant la citation unique bouclés avec une barre oblique. Je ne sais pas pourquoi tu fais ça. Je pourrais spéculer que vous essayez d'échapper les caractères de citation, mais cela a l'effet secondaire que votre modèle essaie maintenant de correspondre à une barre oblique suivie d'une citation. Comme cela ne se produit jamais dans votre texte, aucun remplacement n'est en cours. Vous devriez faire ceci:

gsub("’", "'", x, ignore.case = TRUE) 

Suivez le lien ci-dessous pour une démonstration qui montre que l'utilisation des gsub ci-dessus appels fonctionne comme prévu.

Demo

+0

Merci Tim, vient de faire cet ajustement dans mon script (et dans la question) - mais la fonction ne remplace toujours pas l'apostrophe bouclée.Autres idées? – SarahWeaver

+0

Il est souvent plus facile d'inclure la chose à remplacer dans une classe de caractères, donc le premier argument de 'gsub' devient' "[']" ' – JDL

+0

@SarahWeaver Mon code suggéré fonctionne dans la démo qui utilise R version' 3.3.2 –

0

allait dire la même chose.

Essayez d'utiliser str_replace du package stringr, ne sera pas nécessaire d'utiliser des barres obliques