2017-10-18 108 views
2

尋找一些關於如何用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'。 –

回答

0

你可能對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)。

1

我看到你的電話一個問題gsub

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

你正斜槓前綴捲曲的單引號。我不知道你爲什麼這樣做。我可以推測你試圖逃避引號字符,但是這有副作用,你的模式現在試圖匹配正斜槓,然後是引號。由於這不會發生在您的文本中,因此不會進行替換。你應該這樣做:

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

按照下面的鏈接,演示這表明使用上述gsub調用像您期望的作品。

Demo

+0

感謝蒂姆,只是在我的腳本(和問題)中做了調整 - 但函數仍然沒有取代捲曲的撇號。 – SarahWeaver

+0

在字符類中包含要替換的東西通常更容易,所以'gsub'的第一個參數變成''''''' – JDL

+0

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

0

正要說同樣的事情。

嘗試使用str_replacestringr包,將不再需要使用斜線