如何在R中删除非大写字母的单词?

3

我正在使用R进行文本分析。是否有一种方法可以使用 tmstringi 移除所有非大写字母的单词呢?

如果我有这样的内容:

Albert Einstein went to the store and saw his friend Nikola Tesla ... + 200 pags

转换为

Albert Einstein Nikola Tesla

最好的问候

2个回答

8
你可以使用简单的正则表达式来删除这些词。
gsub("\\b[a-z]+\\s+", "", x)
# [1] "Albert Einstein Nikola Tesla"

这只是在查找单词边界 > 小写字母 > 它后面的所有字母 > 它后面的所有空格并将其删除。


虽然在某些情况下,您可能会遇到像don't这样的单词,需要使用稍微复杂一点的正则表达式。例如:

x <- "if Albert Einstein didn't see his friend Nikola Tesla leavin'"
gsub("\\b[a-z][^ ]*(\\s+)?", "", x)
# [1] "Albert Einstein Nikola Tesla "

(\\s+)? 也被称为 \\s* :) 多余的空格很烦人 - 如果不想把正则表达式搞得一团糟,就不太明显该如何修复。 - eddi
@eddi,是的,谢谢 - 不过不确定是否更好。关于额外的空格 - 它只会在整个文档末尾有标点符号的某些情况下发生,但我想这对OP来说并不是太大的损失,对吧? - David Arenburg

6

只需使用grep和正则表达式:

words <- 'Albert Einstein went to the store and saw his friend Nikola Tesla'

# split to vector of individual words
vec <- unlist(strsplit(words, ' '))
# just the capitalized ones
caps <- grep('^[A-Z]', vec, value = T)
# assemble back to a single string, if you want
paste(caps, collapse=' ')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接