[英]applying regular expression keeping commas in R
我想在数据集上使用正则表达式应用文本清理。 但是我想保留逗号,因为我需要在基于逗号 (,) 清理文本后分割文本。 问题是我对正则表达式不是很熟悉(我通常使用 quanteda 并将单词单独视为 uni-gram,但在这种情况下我不能,因为我需要根据逗号处理每个 X-gram .)
数据集如下所示:
ID Key
1 "Hello, dog_ food, This is it2, water"
2 "wow! nice, love, yes"
3 "1997"
4
5 "blabla, 34 l lol, @IceCream, #nice #wow d, seriously Not"
....
.
.
在我想做的事情中,我想摆脱短于 2 个字母的单词,摆脱任何不是字母数字词干的单字词。
我尝试使用这些命令仅获取低调的字母数字并删除少于 2 个字母的单词,但我最终也取消了逗号,我不知道如何避免它
data$keys <- to_lower(data$keys)
data$keys <- str_replace_all(data$keys, "[^[:alnum:]]", " ")
data$keys <- gsub(" *\\b[[:alpha:]]{1,2}\\b *", " ", data$keys) # Remove 1-2 letter words
data$keys <- gsub("^ +| +$|( ) +", "\\1", data$keys)
预期的 output 应该类似于
ID Key
1 "hello, dog food, this, water"
2 "wow nice, love, yes"
3 "1997"
4
5 "blabla, lol, icecream, nice wow, seriously not"
....
.
.
.
所以基本上,所有内容都是小写的,删除 2 个字母的单词,删除任何不是字母数字的符号。
提前非常感谢您的帮助!
这是一个四步过程:
在此处查看此正则表达式
[^a-z\d\s,]+|(?<!\d)\d+(?=[a-z])|(?<=[a-z])\d+(?!\d)
这个怎么运作:
[^az\d\s,]+
匹配集合中不存在的任何字符中的一个或多个:
az
的字符(或AZ
因为我们通过将ignore.case=T
添加到gsub
函数来添加 use i
不区分大小写的匹配),不匹配数字字符\d
或空格\s
,或逗号,
(?<?\d)\d+(?=[az])
匹配字母字符之前的任何数字(捕获33www
或w3w3w
等单词中的数字)
(?<!\d)
确保前面的不是数字\d+
匹配一位或多位数字(?=[az])
确保后面是字母字符(?<=[az])\d+
匹配字母字符后的任何数字(与之前的交替相反,但在it2
之类的单词末尾捕获数字)
(?<=[az])
确保前面是字母字符\d+
匹配一位或多位数字在此处查看此正则表达式
\b[a-z\d]{1,2}\b
这个怎么运作:
\b
断言 position 作为单词边界(我们在之前的任务中去掉了_
,所以没有问题)[az\d]{1,2}
匹配一个或两个字母单词和数字(不区分大小写 - 与前面的正则表达式相同)\b
将 position 断言为字边界请参阅此处使用的正则表达式
(?<= ) +| +(?=,|$)
这个怎么运作:
(?<= ) +
匹配空格字符后面的一个或多个空格,或+(?=,|$)
匹配前面的一个或多个空格,
或行尾r有以下 function:
tolower(x)
在此处查看正在使用的代码
x <- c(
"Hello, dog_ food, This is it2, water",
"wow! nice, love, yes",
"1997",
"",
"blabla, 34 l lol, @IceCream, #nice #wow d, seriously Not"
)
x <- gsub("[^a-z\\d\\s,]+|(?<!\\d)\\d+(?=[a-z])|(?<=[a-z])\\d+", "", x, perl=T, ignore.case=T)
x <- gsub("\\b[a-z\\d]{1,2}\\b", "", x, perl=T, ignore.case=T)
x <- gsub("(?<= ) +| +(?=,|$)", "", x, perl=T)
tolower(x)
输出:
[1] "hello, dog food, this, water"
[2] "wow nice, love, yes"
[3] "1997"
[4] ""
[5] "blabla, lol, icecream, nice wow, seriously not"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.