2

文字列がある場合:

"O João foi almoçar :) ." 

次のように、Pythonで単語のリストに分割するにはどうすればよいですか。

['O','João', 'foi', 'almoçar', ':)']

?

ありがとう :)

ソフィア

4

2 に答える 2

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

次に、スマイリーの各インスタンスを句読点を含まないプレースホルダーに置き換えます (句読点ではないと見なします<>)。

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()
于 2010-12-26T19:12:58.420 に答える