【问题标题】:Struggling with removing words based on pattern (text analysis in R)努力根据模式删除单词(R中的文本分析)
【发布时间】:2020-03-27 15:00:20
【问题描述】:

我是文本分析的新手。上周我一直在努力解决 R 中的一个特定问题。我试图弄清楚如何删除或替换字符串中单词的所有变体。例如,如果字符串是:

test <- c("development", "develop", "developing", "developer", "apples", "kiwi")

我希望最终输出是:

"apples", "kiwi"

所以,基本上,我想弄清楚如何删除或替换所有以“^develop”开头的单词。我已经尝试使用这个表达式在 stringr 包中使用 str_remove_all:

str_remove_all(test, "^dev")

但最终的结果是这样的:

"elopment", "elop", "eloping", "eloper", "apples", "kiwi"

它只删除了与开头表达式“dev”匹配的部分单词,而如果它与“dev”的开头匹配,我想删除整个单词。

谢谢!

【问题讨论】:

    标签: r text analysis stringr


    【解决方案1】:

    Filter(function(x) !any(grepl("develop", x)), test)

    【讨论】:

      【解决方案2】:

      将 grep 与 invert 一起使用:

      grep("^develop", test, invert = TRUE, value = TRUE)
      ## [1] "apples" "kiwi"  
      

      或否定 grepl:

      ok <- !grepl("^develop", test)
      test[ok]
      

      或删除develop,然后检索那些没有改变的元素:

      test[sub("^develop", "", test) == test]
      

      【讨论】:

      • 非常感谢!非常感谢。我的实际问题是从数据框中的列中过滤掉单词,而不是从向量中过滤掉。我通过将 grep 的输出转换为数据框并将其分配给新变量来调整您的代码。它不是很优雅,但它有效!我无法将它分配给原始数据框的列,因为行数不同会出现错误消息。
      【解决方案3】:

      通过stringr,您可以:

      stringr::str_subset(test, "^dev", negate = TRUE)
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 2021-01-04
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        相关资源
        最近更新 更多