簡體   English   中英

從.docx刪除R中的特殊字符

[英]Remove special characters in R from .docx

我看過很多有關刪除R中特殊字符的文章(例如,這篇文章: 從R中的字符串中刪除所有特殊字符 ),但是沒有一種策略可以解決我的問題。

我有一個抄本,可通過qdap的read.transcript()閱讀。 當我閱讀文檔時,它使帶有特殊字符的行看起來像這樣:

If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!

我努力了:

     ATL1$X2 <- gsub("[^0-9A-Za-z///,.?()' ]", "", ATL1$X2)
     If anyone knows how to simply change these special characters (i.e e1b89d to e), again please feel free to update

但這不會刪除特殊字符,還會刪除!!

我也嘗試過:

 str_replace_all(ATL1$X2, "[^[:alnum:]]", " ")
If anyone knows how to simply change these special characters  i e  e1  b8  9d  to e   again please feel free to update 

但這甚至更糟,並且刪除了所有標點符號,但仍然無法解決我的問題。

最后,我也嘗試過:

 iconv(ATL1$X2, from = 'UTF-8', to = 'ASCII//TRANSLIT')
 If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!

但是這里也沒有任何改變。

在理想的世界中,輸出如下所示:

 If anyone knows how to simply change these special characters (i.e e e e to e), again please feel free to update!

因此,特殊字符將按其“應”的含義讀入。 如果不可能做到這一點,那么老實說,只要刪除特殊字符(而不是其他字符,例如感嘆號),就可以了:

 If anyone knows how to simply change these special characters (i.e to e), again please feel free to update!

謝謝!

有幾件事情使這變得困難:

  1. 您想用大體相同的字符替換字符,而不僅僅是轉換編碼。 在您的示例中,“ <e1> <b8> <9d>”不代表“ e”,而是代表“ e”的復雜版本,這意味着R不會僅僅對其進行更改。 但是有一些功能可以做到這一點
  2. 看起來qdap.transcript試圖提供幫助。 至少您在此處顯示的內容與您的結果一致,它們不是特殊字符,而只是字面上的“ <e1> <b8> <9d>”。 因此,如果您嘗試刪除特殊字符,則gsub高興地遵守,並刪除了“ <”和“>”,而單獨保留了“ e1”等。

為了解決你的問題,我想你想轉換回特殊字符,然后用stri_trans_generalstringi包。 我確定那里還有其他類似的功能,但這對我有用。 原來,轉換回特殊字符是困難的部分,但是我有一些有效的代碼:

library(stringi)
mystring <- 'If anyone knows how to simply change these special characters (i.e <e1><b8><9d> to e), again please feel free to update!'
pos <- gregexpr('(<[A-Fa-f0-9]{2}>)+', mystring)[[1]]

replace <- substring(mystring, pos, pos+attr(pos, 'match.length')-1)
replace <- sapply(replace, function(r) {
  eval(parse(text=paste0('\'', gsub('>', '', gsub('<', '\\\\x', r)), '\'')))
})
for(i in seq_along(replace)) {
  mystring <- sub('(<[A-Fa-f0-9]{2}>)+', replace[i], mystring)
}
mystring <- stri_trans_general(mystring, 'latin-ascii')

我們首先提取“ <”和“>”之間看起來像十六進制的所有內容,然后將它們轉換為文字“ \\ xe1 \\ xb8 \\ x9d”,然后要求R進行處理,然后用這些替換值替換舊值。
僅在最后一行,我們將特殊字符替換為(在此示例中)“ e”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM