2017-09-03 3 views
-1

私はPythonを使用して契約した言葉に置き換えようとしていますが、間違いに直面しています。最も一般的な収縮の辞書に基づいて英語の収縮を拡大する

import re 
tweet = "I luv my <3 iphone & you're awsm apple. DisplayIsAwesome, sooo happppppy http://www.apple.com" 
contractions_dict = {"ain't": "am not", 
        "aren't": "are not", 
        "can't": "cannot", 
        "you're": "you are"}  

contractions_re = re.compile('(%s)' '|'.join(contractions_dict.keys())) 

def expand_contractions(s, contractions_dict=contractions_dict): 
    def replace(match): 
     return contractions_dict[match.group(0)] 

    return contractions_re.sub(replace, s) 

expand_contractions(tweet) 

私は「あなたのもの」に「/」を追加しようとしましたが、無駄です。

出力は、通過した元のツイートです。どこが間違っていますか?

はあなた

答えて

1

ありがとうここで手がかりです:

>>> print('(%s)' '|'.join(contractions_dict.keys())) 
you're(%s)|aren't(%s)|ain't(%s)|can't 

%sが正規表現には特に意味はありませんので、それは単に自分自身にマッチします。しかし、入力にパーセント記号がないので、一致は失敗します。

私はあなたが

>>> print('|'.join('(%s)' % k for k in contractions_dict.keys())) 
(you're)|(aren't)|(ain't)|(can't) 

それとも

>>> print('(%s)' % '|'.join(contractions_dict.keys())) 
(you're|aren't|ain't|can't) 

ような何かを探していたと思われる。しかし、あなたはキャプチャが無関係である、と(すなわち、全体マッチした文字列)をmatch.group(0)を使用しているので、交互に単語をかっこにする必要はありません。だから、もっと簡単な解決策は大丈夫です:

>>> contractions_re = re.compile('|'.join(contractions_dict.keys())) 
>>> expand_contractions(tweet) 
'I luv my <3 iphone & you are awsm apple. DisplayIsAwesome, sooo happppppy \xf0\x9f\x99\x82 http://www.apple.com' 
+0

かなり愚かな間違いでしょうか? :) ありがとうございました! –

関連する問題