2010-12-26 4 views

答えて

7

句読点はあなたの例のように、独自のスペースで区切られたトークンに該当する場合、それは簡単です:

>>> filter(lambda s: s not in string.punctuation, "O João foi almoçar :) .".split()) 
['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)'] 

これがない場合、このようなスマイリーの辞書を定義することができます(さらに追加する必要があります):

d = { ':)': '<HAPPY_SMILEY>', ':(': '<SAD_SMILEY>'} 

その後、句読点が含まれていないプレースホルダとスマイリーの各インスタンスを置き換える(我々は句読点ではない<>を考慮します):"O João foi almoçar <HAPPY_SMILEY> ."に私たちを取得する

for smiley, placeholder in d.iteritems(): 
    s = s.replace(smiley, placeholder) 

を。私たち"O João foi almoçar <HAPPY_SMILEY>"を与える

s = ''.join(filter(lambda c: c not in '.,!', list(s))) 

私たちは、その後、句読点を取り除きます。

私たちは顔文字を元に戻すん:

for smiley, placeholder in d.iteritems(): 
    s = s.replace(placeholder, smiley) 

私たちは、その後分割どちら:

s = s.split() 

を私たちの最終的な結果与える:['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)']を。

は、関数にすべて一緒にそれを置く:

def split_special(s): 
    d = { ':)': '<HAPPY_SMILEY>', ':(': '<SAD_SMILEY>'} 
    for smiley, placeholder in d.iteritems(): 
     s = s.replace(smiley, placeholder) 
    s = ''.join(filter(lambda c: c not in '.,!', list(s))) 
    for smiley, placeholder in d.iteritems(): 
     s = s.replace(placeholder, smiley) 
    return s.split() 
-1
>>> import string 
>>> [ i for i in s.split(' ') if i not in string.punctuation] 
['O', 'João', 'foi', 'almoçar', ':)'] 
+0

['O'、 'Jo \ xc6o'、 'foi'、 'almo \ x87ar'、 ':)'] – Edhowler

関連する問題