我試圖找到一個句子的一部分,在否定詞後面出現(例如,不要,不能,不),直到下一個標點符號並在句尾附加「_NOT」例如: 「我真的很喜歡土耳其,但不是西紅柿雞,因爲我過敏」變成 「我真的很喜歡土耳其,但沒有chicken_NOT with_NOT tomatoes_NOT,因爲我過敏」 。正則表達式匹配部分句子
最初我的方法是運行正則表達式,看起來是這樣的:
(dont|cant|not)(.*)[!?,.]
讓我感興趣的句子的一部分,然後通過字去字,並附_NOT,然後運行str.replace(oldPartOfSentence,newPartOfSentence)。
這幾乎可行,但搜索並不貪婪,如果我稍後有一個標點符號,它會找到比需要更長的部分。此外,如果我有一個否定詞,它不支持這種情況,但它後面沒有標點符號(那麼它應該將否定詞中的每個詞加上否定字符串到結尾)。
例如運行正則表達式的例句給
[('not', ' chicken with tomatoes')]
但如果我有句號結尾,我得到:
[('not', " chicken with tomatoes, because I'm allergic")]
我該如何解決這個問題,並在那裏這是一個更有效的解決方案嗎?例如,有沒有辦法更新正則表達式,通過re.sub()自動附加句子末尾的「_NOT」?
變化'* '到'。*?'。 –
謝謝,這解決了問題的第一部分。是否有可能使一些正則表達式也爲匹配字符串中的每個單詞添加「_NOT」? – Limon
@Limonup:我不這麼認爲,不是直接。我最初認爲嘗試使用積極的背後的斷言,檢查不類似的單詞,並匹配在每個單詞跟隨它沒有干預標點符號,但至少對於Python來說,後面的斷言必須固定寬度,並嘗試向前搜索命中與不處理重疊匹配的搜索相關的問題,而需要省略匹配不相似的詞本身使得(AFAICT)也不切實際。你需要鏈接正則表達式調用。 – ShadowRanger