使用 gsub 将 R 字符向量列表中的弯撇号替换为直撇号

Use gsub to replace curly apostrophe with straight apostrophe in R list of character vectors

正在寻找有关如何在字符向量 R 列表中用直撇号替换弯撇号的指导。

我要替换花撇号的原因 - 在脚本的后面,我检查每个列表项,看看它是否在字典中找到(使用 qdapDictionary)以确保它是一个真实的词而不是垃圾。字典使用直撇号,所以带有弯撇号的词是 "rejected."

我目前使用的代码示例如下。在我的测试列表中,第 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"

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

我发现你对 gsub 的调用有问题:

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

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

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

按照下面的 link 进行演示,该演示显示使用上面的 gsub 调用如您所愿。

Demo

正要说同样的话。

尝试使用 stringr 包中的 str_replace,不需要使用斜线

您可能 运行 与 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)。

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

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

我遇到了类似的问题。不知何故,没有一种解决方案对我有用。所以我设计了一种间接的方法来识别撇号并将其​​替换为所需的格式。

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

希望对大家有所帮助。