2016-04-03 169 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