用python将字符串中的表情(微信表情 [ ])和普通文本拆分开来

有一堆包含表情(微信表情)的文本,要计算情绪量。
表情和普通文本需要分开命中情绪词典。
这里解决的是将字符串中的表情和普通文本拆分开来的问题。
有两种方法:

  1. 用正则表达式查找和移除表情
  2. 用表情分隔符 ‘[’ 和 ‘]’ 将文本拆开,然后合并
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 19 16:37:54 2020

@author: weisssun
"""

#有一段包含表情的字符串,要将表情和文本拆分

#————————————————————————————————————————————
#第一个思路是用正则表达式直接查找

#正则表达式查找方法:
#import re
#pattern = re.compile('正则表达式')
#text = '一段字符串'
#result = pattern.findall(text)

#表情的正则表达式:
#emojis = re.compile(r'\[.\]|\[..\]|\[...\]|\[....\]')
#参考链接:https://zhuanlan.zhihu.com/p/110912040


import re

content = 'BGM好好听[皱眉][皱眉][皱眉][皱眉]又骗我买香水[傲慢]我期待邂逅[傲慢][笑中带泪]'
#content是需要拆分的字符串

emoji_pattern = re.compile(r'\[.\]|\[..\]|\[...\]|\[....\]')
#定义表情的正则表达式方法

emojis = emoji_pattern.findall(content)
#从字符串中查找所有符合表情格式的内容
print(emojis)
#输出的是字符串列表
#['[皱眉]', '[皱眉]', '[皱眉]', '[皱眉]', '[傲慢]', '[傲慢]', '[笑中带泪]']

text = emoji_pattern.sub('', content)
#将表情移除,剩下的是文本
print(text)
#输出的是字符串

#——————————————————————————————————————————————
#第二个是使用 '[' 和 ']' 拆分文本的思路
#学习其他人的代码,有两个地方不明白

import copy

content = '啊[皱眉][皱眉][皱眉][皱眉]又骗我买香水[傲慢]我期待邂逅[傲慢][笑中带泪]'
emojilist = []


first_emoji_pos = content.find('[')
#找到字符串中第一个 emoji表情 的位置

pieces = content.split('[')
#将字符串用 '[' 分割开来,分成多个碎片
#输出的是字符串列表,列表中的每个元素是一个碎片
#表情现在在单个碎片的最前方,如: 傲慢]我期待邂逅红色的毛爷爷
#一个碎片里只会有一个表情

text = pieces[0]
#pieces[0] 是第一个表情的 '[' 之前的文本
#如果前面没有文本,pieces[0] 就是空字符串

for piece in pieces:
#挨个处理每个碎片
    emoji_pos_r = piece.find(']')
    #找到碎片中 ']' 的位置
    #碎片中的 ']' 是表情和文本分分界线
    #print(emoji_pos_r),为啥第一个是-1呢?不理解
    if emoji_pos_r >= 0:
        text = text + piece[(emoji_pos_r + 1):]
        #piece[(emoji_pos_r + 1):] 是单个碎片中 ']' 之后的文本
        #将第一个 '[' 之前的文本,和每个碎片 ']' 之后的文本合并起来
        #最终得到字符串中所有的文本
        emoji = '[' + piece[:emoji_pos_r] + ']'
        #piece[:emoji_pos_r] 是单个碎片中 ']' 之前的内容,也就是表情
        #给表情前后加上 '[' 和 ']', 得到单个碎片中表情的完整版
        emojilist.append(copy.deepcopy(emoji))
        #将每个碎片里的表情拷贝后添加到列表中
        #这里为什么要用deepcopy呢?可能是为了避免某种错误? 
print(text)
#字符串中的文本
print(emojilist)
#字符串中的表情
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值