R - 将函数应用于正则表达式匹配
R - Apply function to regex match
假设我有这样一个字符串:
txt <- "This is an example of a Tweet with a #HashTag."
我想通过正则表达式查找每个主题标签。我不仅要用标记 <hashtag>
替换“#”。我还想应用一个函数来进一步预处理每个主题标签的内容(主题标签中“#”之后的所有内容),如下所示:
pp_hashtag = function(hashtag) {
ifelse(
grepl("^[[:upper:]]+$", hashtag),
paste(hashtag, "<allcaps>"),
gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
)
}
如果可能,以上函数将主题标签分解为组成词,或者如果不是因为它包含所有大写字母,则将其标记为如此。
我该怎么做?如果有更好的方法来做到这一点,我也愿意接受。
tweet_preprocessor = function(tweets_txt) {
pp_hashtag = function(hashtag) {
hashtag = substring(hashtag, 2)
paste("<hashtag>", ifelse(
grepl("^[[:upper:]]+$", hashtag),
paste(hashtag, "<allcaps>"),
gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
))
}
gr = gregexpr("#\w+", tweets_txt, perl = T)
mat = regmatches(tweets_txt, gr)
regmatches(tweets_txt, gr) = lapply(mat, pp_hashtag)
tweets_txt
}
知道了。刚开始使用 gregexpr
和 regmatches
.
假设我有这样一个字符串:
txt <- "This is an example of a Tweet with a #HashTag."
我想通过正则表达式查找每个主题标签。我不仅要用标记 <hashtag>
替换“#”。我还想应用一个函数来进一步预处理每个主题标签的内容(主题标签中“#”之后的所有内容),如下所示:
pp_hashtag = function(hashtag) {
ifelse(
grepl("^[[:upper:]]+$", hashtag),
paste(hashtag, "<allcaps>"),
gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
)
}
如果可能,以上函数将主题标签分解为组成词,或者如果不是因为它包含所有大写字母,则将其标记为如此。
我该怎么做?如果有更好的方法来做到这一点,我也愿意接受。
tweet_preprocessor = function(tweets_txt) {
pp_hashtag = function(hashtag) {
hashtag = substring(hashtag, 2)
paste("<hashtag>", ifelse(
grepl("^[[:upper:]]+$", hashtag),
paste(hashtag, "<allcaps>"),
gsub("(?<!^)(?=[A-Z])", " ", hashtag, perl = T)
))
}
gr = gregexpr("#\w+", tweets_txt, perl = T)
mat = regmatches(tweets_txt, gr)
regmatches(tweets_txt, gr) = lapply(mat, pp_hashtag)
tweets_txt
}
知道了。刚开始使用 gregexpr
和 regmatches
.