使用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"
任何帮助你可以提供将是最感谢!
你可能对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
感谢蒂姆,只是在我的脚本(和问题)中做了调整 - 但函数仍然没有取代卷曲的撇号。 – SarahWeaver
在字符类中包含要替换的东西通常更容易,所以'gsub'的第一个参数变成''''''' – JDL
@SarahWeaver我的建议代码在使用R版本'3.3.2 '。 –
正要说同样的事情。
尝试使用str_replace
从stringr
包,将不再需要使用斜线
这可能会实现:gsub("[\u2018\u2019\u201A\u201B\u2032\u2035]", "'", x)
尝试'GSUB(“””, ”'“,X,固定= TRUE)' –
感谢您的建议,Wiktor的。没有工作,但会欢迎其他建议! – SarahWeaver
附加:'gsub(“(* UCP)'”,“'”,x,perl = TRUE)''或者'gsub(“'”,“'”,x,perl = TRUE)''。请注意,可以安全地删除'ignore.case = TRUE'。 –