Sof*_*fia 2 python string split emoticons
如果我有字符串:
"O João foi almoçar :) ."
Run Code Online (Sandbox Code Playgroud)
我如何最好将它分成python中的单词列表,如下所示:
['O','João', 'foi', 'almoçar', ':)']
Run Code Online (Sandbox Code Playgroud)
?
谢谢 :)
苏菲亚
如果标点符号与您的示例一样落入其自己的空格分隔标记中,那么很容易:
>>> filter(lambda s: s not in string.punctuation, "O João foi almoçar :) .".split())
['O', 'Jo\xc3\xa3o', 'foi', 'almo\xc3\xa7ar', ':)']
Run Code Online (Sandbox Code Playgroud)
如果不是这种情况,你可以像这样定义一个表情词典(你需要添加更多):
d = { ':)': '<HAPPY_SMILEY>', ':(': '<SAD_SMILEY>'}
Run Code Online (Sandbox Code Playgroud)
然后用不包含标点符号的占位符替换笑脸的每个实例(我们认为<>不是标点符号):
for smiley, placeholder in d.iteritems():
s = s.replace(smiley, placeholder)
Run Code Online (Sandbox Code Playgroud)
这让我们到了"O João foi almoçar <HAPPY_SMILEY> .".
然后我们删除标点符号:
s = ''.join(filter(lambda c: c not in '.,!', list(s)))
Run Code Online (Sandbox Code Playgroud)
这给了我们"O João foi almoçar <HAPPY_SMILEY>".
我们确实还原了笑脸:
for smiley, placeholder in d.iteritems():
s = s.replace(placeholder, smiley)
Run Code Online (Sandbox Code Playgroud)
我们然后拆分:
s = s.split()
Run Code Online (Sandbox Code Playgroud)
给我们最后的结果:['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()
Run Code Online (Sandbox Code Playgroud)