【问题标题】:Getting distance between two words in R获取R中两个单词之间的距离
【发布时间】:2014-01-23 18:47:58
【问题描述】:

假设我在文件中有一行:

string <- "thanks so much for your help all along. i'll let you know when...."

我想返回一个值,指示单词 know 是否在 help 的 6 个单词内。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    这本质上是蜡笔作为基本功能的答案的非常粗略的实现:

    withinRange <- function(string, term1, term2, threshold = 6) {
      x <- strsplit(string, " ")[[1]]
      abs(grep(term1, x) - grep(term2, x)) <= threshold
    }
    
    withinRange(string, "help", "know")
    # [1] TRUE
    
    withinRange(string, "thanks", "know")
    # [1] FALSE
    

    我建议您对可用的文本工具有一个基本的了解,并使用它们来编写这样的函数。注意 Tyler 的评论:正如实现的那样,这可以匹配多个术语(“you”将匹配“you”和“your”)导致有趣的结果。您需要确定如何处理这些情况才能获得更有用的功能。

    【讨论】:

    • 怎么样:withinRange(string, "you", "know") 角落案例,但发帖人可能根本不在乎。 your 应该算吗? +1
    • @TylerRinker,我实际上是在更新你的评论,强调这只是一个起点:-)
    • 谢谢阿难。这正是我想要的!
    • +1 @AnandaMahto 我也想写一个例子,但我实际上不知道R
    【解决方案2】:

    您将无法仅从正则表达式中获得此信息。我建议使用空格作为分隔符进行拆分,然后循环或使用内置函数对您的两个术语进行数组搜索并减去索引(数组位置)的差异。

    编辑:好的,我想了一下,也许这对你来说是一个正则表达式模式:

    \bhelp(\s+[^\s]+){1,5}+\s+know\b

    这采用了相同的“空格是分隔符”的概念。首先匹配寻求帮助,然后贪婪地匹配最多 5 个“单词”,然后寻找“知道”(因为“知道”将是第 6 个)。

    【讨论】:

    • 我正在尝试将您的正则表达式转换为 R 喜欢的东西,但我并没有完全遵循它(部分原因是我现在已经很晚了,我实际上应该称之为一个晚上)。我早上再看一遍:-)
    【解决方案3】:

    拆分你的字符串:

    > words <- strsplit(string, '\\s')[[1]]
    

    构建索引向量:

    > indices <- 1:length(words)
    

    名称索引:

    > names(indices) <- words
    

    计算单词之间的距离:

    > abs(indices["help"] - indices["know"]) < 6
    FALSE
    

    编辑在函数中

     distance <- function(string, term1, term2) {
        words <- strsplit(string, "\\s")[[1]]
        indices <- 1:length(words)
        names(indices) <- words
        abs(indices[term1] - indices[term2])
     }
    
     distance(string, "help", "know") < 6
    

    编辑

    索引单词有很大的优势,一旦完成,您就可以对文本进行大量统计。

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2019-03-28
      • 2013-08-21
      • 2011-02-14
      • 1970-01-01
      相关资源
      最近更新 更多