2017-09-03 4 views
-1

나는 계약 된 단어를 파이썬으로 대체하려고하지만 오류가 있습니다.가장 일반적인 수축 사전을 기반으로 영어 수축 확장하기

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

여기에 실마리 감사합니다 %s 이후

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

는 정규식에서 특별한 의미가 없다, 그것은 단순히 자신을 일치합니다. 그러나 입력에 백분율 기호가 없으므로 일치하지 않습니다.

난 당신이

>>> 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

꽤 어리석은 실수입니까? :) 고맙습니다! –