文字列がある場合:
"O João foi almoçar :) ."
次のように、Pythonで単語のリストに分割するにはどうすればよいですか。
['O','João', 'foi', 'almoçar', ':)']
?
ありがとう :)
ソフィア
あなたの例のように、句読点がスペースで区切られた独自のトークンに分類される場合、それは簡単です:
>>> 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>'}
次に、スマイリーの各インスタンスを句読点を含まないプレースホルダーに置き換えます (句読点ではないと見なします<>)。
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)))
これにより、 が得られ"O João foi almoçar <HAPPY_SMILEY>"ます。
スマイリーを元に戻します。
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()