我致力于清理大量文本。到目前為止,我的程序是:
- 洗掉任何非 ASCII 字符
- 洗掉網址
- 洗掉電子郵件地址
- 正確的字距調整(即“BA D”變為“BAD”)
- 正確的拉長詞(即“baaaaaad”變成“bad”)
- 確保每個逗號后都有一個空格
- 用空格替換所有數字和標點符號 - 除了撇號
- 洗掉任何 22 個字符或更長的術語(這種大小的任何東西都可能是垃圾)
- 洗掉任何剩余的單個字母
- 洗掉所有空行
我的問題是在倒數第二步。最初,我的代碼是:
gsub(pattern = "\\b\\S\\b", replacement = "", perl = TRUE)
但這破壞了留下的任何收縮(我故意留下的)。然后我嘗試了
gsub(pattern = "\\b(\\S^'\\s)\\b", replacement = "", perl = TRUE)
但這留下了很多單個字符。
然后我意識到我需要保留三個單字母單詞:“A”、“I”和“O”(無論哪種情況)。
有什么建議?
uj5u.com熱心網友回復:
您可以使用
gsub("(?i)\\b(?<!')(?![AOI])\\p{L}\\b", "", x, perl=TRUE)
詳情:
(?i)- 不區分大小寫匹配\b- 單詞邊界(?<!')-'左側立即不允許(?![AOI])- 下一個字符不能是A,I, 或O\p{L}- 任何 Unicode 字母\b- 單詞邊界
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410146.html
標籤:
上一篇:Google測驗使用C 11/14,如何修復無效的POSIXExtended錯誤
下一篇:匹配選項串列中的確切字串
