问题描述
for message in df['Message']:
for char in message:
if char in emoji.UNICODE_EMOJI:
print(char)
它可以工作并正确识别哪些字符是表情符号。但是,输出无法正确解析某些表情符号,它们只是显示为棕色正方形:
?
为什么会这样?有什么办法解决这个问题吗?大多数表情符号显示都很好,但有一些表情符号不会显示。
编辑: 再次查看之后,棕色方块似乎带有一些表情符号来说明所用的色调。
但是,某些表情符号仍然存在一些问题。例如,通常的心脏表情符号确实显示为心脏字符,但不是以表情符号样式显示。屏幕快照,因为将其粘贴到此处最终可以正确显示它:
解决方法
问题是深色肤色(通常是色变)通常被编码为两个单独的符号,而不是一个,即
??
来自两个符号? ?
的结果(第二个给出颜色)。
您可以从以下示例中看到它:
df = pd.DataFrame({"Message": ["test ?? "]})
for message in df['Message']:
for char in message:
if char in emoji.UNICODE_EMOJI:
print(char)
?
?
因此,您将必须使用正则表达式(as per this answer):
import regex
df = pd.DataFrame({"Message": ["test ?? ","test 2 ? ?"]})
def split_count(text):
emoji_list = []
data = regex.findall(r'\X',text)
for word in data:
if any(char in emoji.UNICODE_EMOJI for char in word):
emoji_list.append(word)
return emoji_list
for message in df['Message']:
counter = split_count(message)
print(' '.join(emoji for emoji in counter))
输出:
??
? ?