RegEx过滤器用于常用单词

时间:2016-04-03 17:47:39

标签: regex python-3.x

我试图从一个文本块中删除常用词(连词,副词,代词等)。我正在使用正则表达式,但出于某种原因,我的过滤器中的一些常用单词不会被过滤掉。

未被过滤的单词的一些示例:"没有","为什么","应该"

任何想法为什么?

 splitResult = s.split()
        p = re.compile(
            """^(&|also|a|about|again|all|after|are(nt)?|arent|as|an(y)?|at|
                bcuz|before|be(low)?|between|bring|but|by|and|can(not)?|close(d)?|could(nt)?|
                cuz|do(nt)?|down|decide(d)?|decision|on(to)?|or|of|our|over|out|have(nt)?|he(re)?|
                her|his|other(s)?|even|got(ten)?|for|from|get(s)?|got(ten)?|has(nt)?|havent|he(s)?|
                him|his|if|in|to|in(to)?|is(nt)?||make|me|once|play(ed)?|role|say(s)?|seen|she(s)?|
                should(nt)?|stop(ped)?|time|my|no(t)?|must(nt)?|now|you(re)?|your|want|want(ed)?|
                watch(ed)?|way|we(re)?|will|with||i|a|is(nt)?|just|would(nt)?|before|that|the(re)?|
                their|them|they|this|turn|when|at|how|it(s)?|which|who|after|then|if|how|because|know(s)?|
                yet|[A-Za-z]{1,2}|http(s)?://.*|www\..*)$""",re.I)

        for word in splitResult:
            m = p.findall(word)
            if not m:
                word = "".join(c for c in word if c not in ("?", ".", "!", '"', ",","'","(",")"))
                wordsList.insert(ctr,word)

1 个答案:

答案 0 :(得分:0)

您的模式没有why作为其中一个替换。

您的模式似乎变得如此之大,以至于您无法管理它。

当存在周围的空格或撇号时,您的模式不匹配。

没有理由haventshould无法过滤,否则。没有更多代码,没有人知道。

(以下是regex101.com中的错误,但您应该相应地修复正则表达式。)

根据regex101.com,有以下两个错误:

  

|此位置的交替者有效地截断了该组,使得超出此点的任何其他令牌无效

这意味着您的代码中存在||,基本上。

注意:如果你想匹配虚无(相当于一个空字符串),之后不应该有改动,因为这个正则表达式引擎匹配最早的交替。

他们是:

  • ||make
  • |with||i

(找到正则表达式:\|\|