【问题标题】:Remove stopwords with javascript and regex使用 javascript 和 regex 删除停用词
【发布时间】:2014-07-21 02:32:09
【问题描述】:

我想从文本中删除停用词,但未能正确使用正则表达式和变量。例如,我删除了停用词“he”,但这也会影响“when”这个词。我尝试使用这样的单词边界:

new RegExp('\b'+stopwords[i]+'\b' , 'g') 但不起作用...

在这里看一个小例子:jsFiddle

var stopwords = ['as', 'at', 'he', 'the', 'was'];
for (i = 0; i < stopwords.length; i++) {
    str = str.replace(new RegExp(stopwords[i], 'g'), '');
}

【问题讨论】:

    标签: javascript regex variables stop-words


    【解决方案1】:

    您需要转义反斜杠,因为它在字符串文字中,而不是在正则表达式中:

    new RegExp('\\b' + stopwords[i] + '\\b' , 'g')
    

    否则,'\b' 是退格字符 ('\x08')。

    【讨论】:

      【解决方案2】:

      可能是这样的

      str = str.replace(new RegExp('\\b('+stopwords.join('|')+')\\b', 'g'), '');
      

      FIDDLE

      你必须在 RegExp 中双重转义,你可以加入所有创建的东西

      /\b(as|at|he|the|was)\b/g
      

      【讨论】:

      • 不错!你知道这个连接是否比for 循环快吗?考虑一下我有一个包含 300 个停用词的列表。
      • 我认为是这样,因为它创建了一个正则表达式并进行了一次替换,而不是 300 次。
      • 你能解释一下.join('|')的用法吗?抱歉,我现在注意到了这个区别:-)
      • 您需要将连接的单词包含在一个组中,以便\b 锚点正常工作,即模式应该是:/\b(?:word1|word2)\b/ 而不是:/\bword1|word2\b/
      • @antithesis - @antithesis - join('|') 用管道作为“胶水”加入一个数组,正如 ridgerunner 所指出的,添加了括号来创建我在答案中发布的正则表达式。
      【解决方案3】:

      使用\\b 制作一个\b

      new RegExp('\\b'+stopwords[i]+'\\b' , 'g')
      

      【讨论】:

        猜你喜欢
        • 2016-01-19
        • 1970-01-01
        • 2019-09-12
        • 2013-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        相关资源
        最近更新 更多