使用R检测字符串中的两个连续“正确大小写”单词

时间:2017-08-18 09:35:44

标签: r text-mining

我一直在讨论这个问题一段时间了。我正在尝试在R中进行一些文本挖掘,并且我希望尝试对由多个单词组成的名称,地点和组织进行分类。出于此任务的目的,我只查看字符串中以大写字母开头的连续单词。

示例字符串:

origString <- 'The current president of the United States is Donald Trump'

有没有办法在这个字符串中找到以大写字母开头的单词并将它们组合在一起以返回这样的内容?

newString <- 'The current president of the UnitedStates is DonaldTrump'

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

以下解决方案适用于一次两个单词的组:

origString <- 'The current president of the United States is Donald Trump'
gsub('([A-Z]\\w*?)\\s+([A-Z]\\w*)', '\\1\\2', origString)

<强>输出:

[1] "The current president of the UnitedStates is DonaldTrump"

在这里演示:

Rextester

<强>更新

以下是一个适用于任意数量的群集大写单词的脚本。它需要一个解决方法/黑客,因为gsub()使用的正则表达式风格,即使在Perl模式下,也不支持可变长度的lookbehinds。这里的策略是选择性地删除所有大写单词之间的空白,这些单词出现在两个或更多的组中。

origString <- 'The current president of the United States Donald Trump'
temp <- gsub('([A-Z]\\w*)', '\\1\\$MARK\\$', origString)
output <- gsub('(?<=\\$MARK\\$)\\s+(?=[A-Z])', '', temp, perl=TRUE)
output <- gsub('\\$MARK\\$', '', output)
output

[1] "The current president of the UnitedStatesDonaldTrump"

Demo

答案 1 :(得分:2)

这是一个递归函数,可以折叠任意数量的连续大写单词......

collapseCaps <- function(text) {
  result <- gsub('([A-Z]\\w*)\\s+([A-Z]\\w*)', '\\1\\2', text)
  if(result!=text) {
    text <- result
    result <- Recall(text) #calling the function from within itself
  }
  return(result)
}

collapseCaps('The current president of the United States is President Donald J Trump')

[1] "The current president of the UnitedStates is PresidentDonaldJTrump"