【问题标题】:Remove text outside of brackets in R删除R中括号外的文本
【发布时间】:2014-08-21 04:38:24
【问题描述】:

所以我有一组像下面这样在所有命名实体周围都有括号的文本,我想删除括号外的文本并保留所有标点符号。有什么想法吗?

Sample_Text <- "[PERSON Meredith Vieira] will become the first woman to host [MISC Olympics] primetime coverage on her own when she fills on Friday night for the ailing [PERSON Bob Costas] , who is battling a continuing eye infection. " It 's an honor to fill in for him , " [PERSON Vieira] said on TODAY Friday ."

理想情况下,我会在下面得到这个向量。

Entities <- ([PERSON Meredith Vieira] [MISC Olympics] [PERSON Bob Costas]. [PERSON Vieira].)

我的第一次尝试是找出两个括号之间的文本,但我没有得到文本,而且我的 REGEX 无法正常工作。然后我意识到我需要标点符号。这是我在下面的 REGEX 尝试。想法?

grep("\\[.*?\\]", "", d, perl=TRUE)

【问题讨论】:

  • 看看 MrFlick 对我提出的这个问题的回答:stackoverflow.com/questions/24319930/…。简而言之,将regexprregmatches 与您的正则表达式一起使用来匹配方括号。
  • Alex,感谢 regexpr 和 regmatches 的建议!不完全合适,因为我真的想要括号内的文字以及一些标点符号。我根本不想替换它们,我想提取它们。它适用于我的 NLP 任务。不过谢谢,因为我不知道 regexpr 或 regmatches,可能很快就会有机会使用它们。

标签: regex r text


【解决方案1】:

您可以尝试以下使用动词(*SKIP)(*F) 的正则表达式,

> gsub("(?:\\[.*?\\]|\\.)(*SKIP)(*F)|[\\w' ,\\\"]+", " ", Sample_Text, perl=TRUE);
[1] "[PERSON Meredith Vieira] [MISC Olympics] [PERSON Bob Costas] . [PERSON Vieira] ."

删除.之前的前导空格,

> result <- gsub("(?:\\[.*?\\]|\\.)(*SKIP)(*F)|[\\w' ,\\\"]+", " ", Sample_Text, perl=TRUE);
> result
[1] "[PERSON Meredith Vieira] [MISC Olympics] [PERSON Bob Costas] . [PERSON Vieira] ."
> gsub(" +(?=\\.)", "", result, perl=TRUE);
[1] "[PERSON Meredith Vieira] [MISC Olympics] [PERSON Bob Costas]. [PERSON Vieira]."

【讨论】:

  • 阿维纳什,感谢您的回答!当我在示例文本上运行它时,它是完美的。
猜你喜欢
  • 2021-02-20
  • 1970-01-01
  • 2019-03-11
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多