片括弧の除去

マルコフ連鎖で、botの発言を生成していると、時々片括弧が生み出されてしまいます。

たとえばこんな感じ。

群馬(ポロリもあるよ)」=感謝なんだろうかと担当さんにレスの仕方教えてあげてくださいー
http://twitter.com/tomiya_bot/status/29734855453450243

手っ取り早く処理するならば、括弧を全て除去すればいいのですが、正しい括弧の使用でも破壊してしまう恐れがあります。しかし、その一方で片括弧が正しい「(ry」みたいなときもあります。この処理は簡単そうで意外に難解だと思います。正当なやり方であれば、プログラムのコンパイラのように、スタックを使って括弧を分析させる方法もあるのですが、それはちょっと時間がかかるので、中間的なペアマッチング法で実装してみました。下記にコードを載せておきます。

#!/usr/bin/python
# -*- encoding: utf-8 -*-

def rm_parentheses(txt=u""):
    #print txt
    pr = re.compile(ur'\{|\(|\[|\「|\[|\【|\『|\{|\〔|“|‘|《|\
                      \}|\)|\]|\」|\]|\】|\』|\}|\〕|”|’|》')
    parentheses = {u"『":u"』",  # left
                   u"{":u"}",
                   u"(":u")",
                   u"【":u"】",
                   u"〔":u"〕",
                   u"[":u"]",
                   u"{":u"}",
                   u"「":u"」",
                   u"“":u"”",
                   u'"':u'"',
                   u'《':u'》',
                   u"』":u"『",  # right
                   u"}":u"{",
                   u"」":u"「",
                   u")":u"(",
                   u"】":u"【",
                   u"〕":u"〔",
                   u"]":u"[",
                   u"}":u"{",
                   u"”":u"“",
                   u"》":u"《"}


    #文字列から文字を一つずつ取り出す
    for m in txt:
        #print m,
        #対象の括弧が見つかったら
        if pr.match(m):
            #parenthesesを利用して、相手の括弧を見つけ、oppositeに入れる
            opposite = parentheses[m]
            #print opposite
            try:
                #相手が見つからなければその括弧は削除する
                if re.search(opposite, txt) == None:
                    txt = re.sub(m, "", txt)
                #エラーは無視
            except re.error:
                pass
    return txt

if __name__ == '__main__':
    print rm_parentheses(u"(あいうえお)「きゃー!!")

この方法でも欠点があり、「(ry」の問題や「あい(えお{お)かきく}けこ」のような書き方には対処できません。
ご意見や、こんな方法あるわよってのがあれば教えてください。