使用gsub在R字符向量列表中用直撇号替换卷曲撇号

时间:2017-10-18 16:23:04

标签: r special-characters text-mining 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"

非常感谢您提供的任何帮助!

5 个答案:

答案 0 :(得分:1)

我在调用gsub时发现了一个问题:

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

您使用正斜杠在大写单引号前面加上前缀。我不知道你为什么要这样做。我可以推测你试图逃避引号字符,但这有副作用,你的模式现在试图匹配正斜杠后跟引号。由于这在您的文本中从未发生过,因此不会进行任何替换。你应该这样做:

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

点击以下链接进行演示,该演示显示使用上述gsub来电可以按预期工作。

Demo

答案 1 :(得分:1)

您可能正在Windows上遇到bug in R。尝试在输入中使用utf8::as_utf8。或者,这也有效:

library(utf8)
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)。

答案 2 :(得分:0)

即将说同样的话。

尝试使用stringr包中的void slowlogPushEntryIfNeeded(client *c, robj **argv, int argc, long long duration);,不需要使用斜杠

答案 3 :(得分:0)

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

我在这里找到了它:http://axonflux.com/handy-regexes-for-smart-quotes

答案 4 :(得分:0)

我正面临类似的问题。不知何故,这些解决方案都不适合我。因此,我设计了一种间接方式来实现此目的,即识别撇号并将其​​替换为所需的格式。

gsub("(\\w)(\\W)(\\w\\s)", "\\1'\\3","sid’s bicycle")
[1] "sid's bicycle"

希望它可以帮助某人。