使用gsub用R中的直撇符来替换字符向量中的直撇号

问题描述:

寻找一些关于如何用R向量字符向量列表中的直撇子替换卷曲撇号的指导。使用gsub用R中的直撇符来替换字符向量中的直撇号

我替换卷曲撇号的原因 - 稍后在脚本中,我检查每个列表项,看看它是否在字典中找到(使用qdapDictionary)以确保它是一个真正的单词而不是垃圾。字典使用直撇子,所以带有撇号的单词被“拒绝”。

我目前的代码示例如下。在我的测试列表中,项目#6包含一个卷曲撇号,项目#2有一个简单的撇号。

实施例:

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) 

结果:没有变化。第6项仍然使用卷曲撇号。见下面的输出。

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" 

任何帮助你可以提供将是最感谢!

+0

尝试'GSUB(“””, ”'“,X,固定= TRUE)' –

+0

感谢您的建议,Wiktor的。没有工作,但会欢迎其他建议! – SarahWeaver

+0

附加:'gsub(“(* UCP)'”,“'”,x,perl = TRUE)''或者'gsub(“'”,“'”,x,perl = TRUE)''。请注意,可以安全地删除'ignore.case = TRUE'。 –

你可能对Windows上的bug in R运行起来。在输入上尝试使用corpus::as_utf8。另外,这也适用:

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) 

这将ASCII单引号替换以下字符:

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 

它也将文本转换为组成范式(NFC)。

我看到你的电话一个问题gsub

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

你正斜杠前缀卷曲的单引号。我不知道你为什么这样做。我可以推测你试图逃避引号字符,但是这有副作用,你的模式现在试图匹配正斜杠,然后是引号。由于这不会发生在您的文本中,因此不会进行替换。你应该这样做:

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

按照下面的链接,演示这表明使用上述gsub调用像您期望的作品。

Demo

+0

感谢蒂姆,只是在我的脚本(和问题)中做了调整 - 但函数仍然没有取代卷曲的撇号。 – SarahWeaver

+0

在字符类中包含要替换的东西通常更容易,所以'gsub'的第一个参数变成''''''' – JDL

+0

@SarahWeaver我的建议代码在使用R版本'3.3.2 '。 –

正要说同样的事情。

尝试使用str_replacestringr包,将不再需要使用斜线

这可能会实现:gsub("[\u2018\u2019\u201A\u201B\u2032\u2035]", "'", x)

我发现它在这里:http://axonflux.com/handy-regexes-for-smart-quotes