【问题标题】:extract two hashtags next to each other in r在r中提取两个彼此相邻的主题标签
【发布时间】:2019-07-04 01:03:07
【问题描述】:

我正在分析推特数据,并希望提取推文中的所有主题标签。我曾经像这样提取主题标签:

tweet = 'I like #apple #orange'
str_extract_all(tweet,"#\\S+")

这适用于大多数情况。但有时两个主题标签彼此相邻。

tweet = 'I like #apple#orange'
str_extract_all(tweet,"#\\S+")

我得到的是这样的:

[[1]]
[1] "#apple#orange" 

有谁知道当主题标签分开或相邻时如何正确提取它们?

【问题讨论】:

  • 你能检查你的包版本吗?我无法重现[1] "#apple" "#orange"
  • 尝试使用#[^#\\s]+
  • 只需使用str_extract_all(tweet,"#\\w+") 提取示例中的文本。

标签: r regex stringr


【解决方案1】:

您与 \S 过度匹配,因为这将匹配非空白字符和 #

您可以使用 negated character 类来匹配空白字符以及不匹配 #

#[^#\\s]+

您的代码可能看起来像

tweet = 'I like #apple#orange'
str_extract_all(tweet,"#[^#\\s]+")

结果

[[1]]
[1] "#apple"  "#orange

R demo

【讨论】:

    【解决方案2】:

    我的猜测是这个简单的表达式可能会起作用:

    #([^#\s]+)
    

    在第一个 # 之后排除空格和 #s。

    Demo

    【讨论】:

      【解决方案3】:

      另一种(可能不太简洁)base 可能性:

      gsub("([a-z](?=#))(#\\w)","\\1 \\2",
           strsplit(tweet," (?=#+)",perl = TRUE)[[1]][2], perl=TRUE)
      [1] "#apple #orange"
      

      如果您需要将它们分开:

       strsplit(gsub("([a-z](?=#))(#\\w)","\\1 \\2",
            strsplit(tweet," (?=#+)",perl = TRUE)[[1]][2], perl=TRUE),
            " ")
      [[1]]
      [1] "#apple"  "#orange"
      

      【讨论】:

        猜你喜欢
        • 2017-12-03
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        相关资源
        最近更新 更多