gpt4 book ai didi

Python 表情符号搜索和替换无法按预期工作

转载 作者:行者123 更新时间:2023-11-28 22:27:19 27 4
gpt4 key购买 nike

我试图将给定文本中的表情符号与其他字符/单词/表情符号分开。我想稍后使用表情符号作为文本分类的特征。因此,重要的是我将句子中的每个表情符号单独视为一个单独的字符。

代码:

import re

text = "I am very #happy man but😘😘 my wife😞 is not 😊😘"
print(text) #line a

reg = re.compile(u'['
u'\U0001F300-\U0001F64F'
u'\U0001F680-\U0001F6FF'
u'\u2600-\u26FF\u2700-\u27BF]+',
re.UNICODE)

#padding the emoji with space at both the ends
new_text = reg.sub(' \1 ',text)
print(new_text) #line b

# this is just to test if it can still identify the emoji in new_text
new_text2 = reg.sub('#\1#', new_text)
print(new_text2) # line c

这是实际的输出:

enter image description here

(我必须粘贴屏幕截图,因为从终端复制粘贴输出会扭曲 b 和 c 行中那些已经扭曲的表情符号)

这是我的预期输出:

I am very #happy man but😘😘 my wife😞 is not 😊😘
I am very #happy man but 😘 😘 my wife 😞 is not 😊 😘
I am very #happy man but #😘# #😘# my wife #😞# is not #😊# #😘#

问题:

1) 为什么搜索和替换没有按预期工作?被替换的表情符号是什么? (b 行)。它绝对不是原始表情符号的 unicode,否则第 c 行会打印出在两端填充 # 的表情符号。

2) 我不确定我对此是否正确,但是 - 为什么分组的表情符号被替换为单个表情符号/unicode? (b 行)

最佳答案

这里有几个问题。

  • 正则表达式模式中没有捕获组,但在替换模式中,您定义了 \1对第 1 组的反向引用 - 因此,最自然的解决方法是使用对第 0 组的反向引用,即整个匹配项,即 \g<0> .
  • \1替换中的 in 实际上并未解析为反向引用,而是解析为八进制值为 1 的字符,因为常规(非原始)字符串文字中的反斜杠形成 转义序列。这里是八进制转义。
  • +]之后意味着正则表达式引擎必须匹配 1 次或多次匹配字符类的文本,因此您匹配表情符号的序列,而不是每个单独的表情符号。

使用

import re

text = "I am very #happy man but😘😘 my wife😞 is not 😊😘"
print(text) #line a

reg = re.compile(u'['
u'\U0001F300-\U0001F64F'
u'\U0001F680-\U0001F6FF'
u'\u2600-\u26FF\u2700-\u27BF]',
re.UNICODE)

#padding the emoji with space at both ends
new_text = reg.sub(r' \g<0> ',text)
print(new_text) #line b

# this is just to test if it can still identify the emojis in new_text
new_text2 = reg.sub(r'#\g<0>#', new_text)
print(new_text2) # line c

参见 Python demo打印

I am very #happy man but😘😘 my wife😞 is not 😊😘
I am very #happy man but 😘 😘 my wife 😞 is not 😊 😘
I am very #happy man but #😘# #😘# my wife #😞# is not #😊# #😘#

关于Python 表情符号搜索和替换无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44100804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com