regex 在R Str_count中:在一定距离处计算单词的出现次数,例如1到30个单词

nwsw7zdq  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(85)

在一个文本文档中,我想计数的示例时,不确定性|与global的距离为1到30个单词时出现不清楚|需求减少|需求下降。然而,我下面的代码似乎对{1,30}不敏感,因为更改这些值不会更改输出。如果你能帮忙的话,我将不胜感激。

str_count(texttw,"\\buncertainty|unclear(?:\\W+\\w+){1,30} ?\\W+global|decrease in demand|fall in demand\\b"))

字符串

ioekq8ef

ioekq8ef1#

我不确定你的文字中的错别字是否是故意的(“不确定性”而不是“不确定性”),所以我纠正了它,但尝试这样做:

library(stringr)

x <- "uncertainty negatively influences economic agents investment and business decisions which leads to decrease in demand. When the economic environment is fraught with uncertainty and the future is unclear businesses and firms may hold back their decisions until uncertainty subsides. Ever since the start of the pandemic global economic outlook has been unclear with unprecedented uncertainty leading to fall in demand."

regex <- "(uncertainty|unclear)\\s(\\w+\\s){1,30}(global|decrease in demand|fall in demand)"

str_count(x, regex)
# [1] 2

str_extract_all(x, regex)
# [[1]]
# [1] "uncertainty negatively influences economic agents investment and business decisions which leads to decrease in demand"
# [2] "unclear with unprecedented uncertainty leading to fall in demand"

字符串

  • 当发现单词uncertainty OR(|)unclear时开始匹配
  • 单词后面应该有一个空格\\s
  • 该空格后面应该跟随一个或多个(+)a字字符\\w(A-Z,a-z,_)和空格\\s。此模式应在{1,30}的1到30倍之间匹配
  • 其次是短语全球或需求减少或需求下降

从技术上讲,所有捕获组都可以通过?:设置为非捕获组,因为您不需要反向引用或专门捕获它们。
在您发布的文本中,您在最后一句话中有一个有趣的案例,“自疫情开始以来,全球经济前景一直不明朗,前所未有的不确定性导致需求下降。
根据你的理解,这实际上可能有两个匹配:
1.由于前所未有的不确定性导致需求下降
1.不确定性导致需求下降
如果这是你的解释,那么你发布的文本应该有三个,而不是两个匹配。
只是说明一下:
“不确定性消退。自疫情开始以来,全球经济前景一直不明朗,前所未有的不确定性导致需求下降。

相关问题