2016-04-03 91 views
0

我试图从文本块中移除常用词(连词,副词,代词等)。我使用的是正则表达式,但由于某种原因,我的过滤器中的一些常见词汇没有被滤除。未被过滤的正则表达式筛选常用词

话的一些例子:“还没有”,“为什么”,“应该”

任何想法,为什么?

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

我认为这是对自然语言处理更合适的工作,看到,例如:http://stackoverflow.com/questions/9953619/technique-to-remove-common-wordsand-their-plural-versions-from-a-string。 – alecxe

+0

我把它放在[Regex101](https://regex101.com/r/wR0dJ2/1)中,你可以在* Explanation *部分看到错误(尽管它没有突出显示它)。基本上你有'是(nt)?|| make',它应该是'是(nt)?|| make'和'用|| I',它应该是'with | i'。两个人都有2个'||'而不是1个。这并不能解决问题,但我建议你更新RegEx – Druzion

+0

我找不到任何问题,我只是将捕获组转换为非捕获以获得更清晰的输出:请参见[演示(http://ideone.com/mnC7nr)。请注意,您可以通过对具有共同结局的关键字进行分组来使其更有效,从而使其更有效。 –

回答

0

您的图案没有why作为其中的一种变化。

看来你的模式已经变得如此之大以至于你无法管理它。

当周围有空白或撇号时,您的模式不匹配。

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

(以下是regex101.com一个bug,但你仍然应该相应地解决您的正则表达式。)

根据regex101.com有下列错误二:

|发电机在这个位置有效地截断组,使得其他任何标记超出此点无用

这意味着代码中有|| s,本质上。

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

在这里,他们是:

  • ||make
  • |with||i

(发现正则表达式:\|\|

+0

这是一个很好的接触。错误消息hiwever可以得到改进:)双“||”使得正则表达式匹配'没有',在那一点上 - 它并不真正截断。 (好吧,但所有的规则。) – usr2564301

+0

@RadLexus我没有选择该措辞。去告诉'regex101.com'。 – Laurel

+0

我意识到||我只是想解释这个问题。 – usr2564301