撇号和正则表达式;清理 R 中的文本
Apostrophes and regular expressions; Cleaning text in R
我正在清理大量文本。到目前为止我的过程是:
- 删除任何非 ASCII 字符
- 删除网址
- 删除电子邮件地址
- 正确的字距调整(即“B A D”变为“BAD”)
- 纠正加长的单词(即“baaaaaad”变成“bad”)
- 确保每个逗号后有一个space
- 用 space 替换所有数字和标点符号 - 除了撇号
- 删除任何 22 个字符或更长的字词(任何这个大小的字词都可能是垃圾)
- 删除所有剩余的单个字母
- 删除所有空行
我的问题在倒数第二步。最初,我的代码是:
gsub(pattern = "\b\S\b", replacement = "", perl = TRUE)
但这破坏了剩下的任何收缩(我故意留下的)。然后我试了
gsub(pattern = "\b(\S^'\s)\b", replacement = "", perl = TRUE)
但这留下了很多单个字符。
然后我意识到我需要保留三个单字母单词:“A”、“I”和“O”(无论大小写)。
有什么建议吗?
您可以使用
gsub("(?i)\b(?<!')(?![AOI])\p{L}\b", "", x, perl=TRUE)
详情:
(?i)
- 匹配不区分大小写
\b
- 单词边界
(?<!')
- 不允许 '
紧靠左边
(?![AOI])
- 下一个字符不能是 A
、I
或 O
\p{L}
- 任何 Unicod 字母
\b
- 单词边界
我正在清理大量文本。到目前为止我的过程是:
- 删除任何非 ASCII 字符
- 删除网址
- 删除电子邮件地址
- 正确的字距调整(即“B A D”变为“BAD”)
- 纠正加长的单词(即“baaaaaad”变成“bad”)
- 确保每个逗号后有一个space
- 用 space 替换所有数字和标点符号 - 除了撇号
- 删除任何 22 个字符或更长的字词(任何这个大小的字词都可能是垃圾)
- 删除所有剩余的单个字母
- 删除所有空行
我的问题在倒数第二步。最初,我的代码是:
gsub(pattern = "\b\S\b", replacement = "", perl = TRUE)
但这破坏了剩下的任何收缩(我故意留下的)。然后我试了
gsub(pattern = "\b(\S^'\s)\b", replacement = "", perl = TRUE)
但这留下了很多单个字符。
然后我意识到我需要保留三个单字母单词:“A”、“I”和“O”(无论大小写)。
有什么建议吗?
您可以使用
gsub("(?i)\b(?<!')(?![AOI])\p{L}\b", "", x, perl=TRUE)
详情:
(?i)
- 匹配不区分大小写
\b
- 单词边界(?<!')
- 不允许'
紧靠左边(?![AOI])
- 下一个字符不能是A
、I
或O
\p{L}
- 任何 Unicod 字母\b
- 单词边界