如何从文本中删除除单词和表情符号之外的所有内容? [英] How to remove everything except words and emoji from text?
本文介绍了如何从文本中删除除单词和表情符号之外的所有内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
作为文本分类问题的一部分,我正在尝试清理文本数据集。到目前为止,我正在删除除文本之外的所有内容。标点符号、数字、表情符号--所有东西都被删除了。现在我正在尝试使用emoji作为功能,因此我想保留单词以及emoji。
首先,我搜索文本中的emoji表情,并将它们与其他单词/emoji分开。这是因为每个表情符号都应该单独处理。所以我搜索了一个表情符号,并在两端都填上了空格。
但我在想如何将已知的单词正则表达式和表情符号组合在一起时感到困惑。以下是我当前的代码:
import re
def clean_text(raw_text):
padded_emoji_text = pad_emojis(raw_text)
print("Emoji padded text: " + padded_emoji_text)
reg = re.compile("[^a-zA-Z]") # line a
# old regex to remove everything except words
letters_only_text = reg.sub(' ', raw_text)
print("Cleaned text: " + letters_only_text)
# Code to remove everything except text and emojis
# How?
def pad_emojis(raw_text):
print("Original Text: " + raw_text)
reg = re.compile(u'['
u'U0001F300-U0001F64F'
u'U0001F680-U0001F6FF'
u'u2600-u26FFu2700-u27BF]',
re.UNICODE)
#padding the emoji with space at both ends
new_text = reg.sub(r' g<0> ',raw_text)
return new_text
text = "I am very #happy man! but😘😘 my wife😞 is not 😊😘. 99/33"
clean_text(text)
当前订单:
Original Text: I am very #happy man! but😘😘 my wife😞 is not 😊😘. 99/33
Emoji padded text: I am very #happy man! but 😘 😘 my wife 😞 is not 😊 😘 . 99/33
Cleaned text: I am very happy man but my wife is not
我要实现的目标:
I am very happy man but 😘 😘 my wife 😞 is not 😊 😘
问题:
1)如何将表情符号regex与单词regex一起添加到regex编译中?(a行) 2)我还能以更好的方式实现我正在寻找的东西吗?例如,不需要编写一个单独的函数来分隔表情符号并用空格填充它们?不知何故,我觉得这是可以避免的。推荐答案
您可以在re.sub
中使用单个正则表达式和lambda表达式将这两个步骤合并为一个步骤,如下所示:
import re
emoji_pat = '[U0001F300-U0001F64FU0001F680-U0001F6FFu2600-u26FFu2700-u27BF]'
shrink_whitespace_reg = re.compile(r's{2,}')
def clean_text(raw_text):
reg = re.compile(r'({})|[^a-zA-Z]'.format(emoji_pat)) # line a
result = reg.sub(lambda x: ' {} '.format(x.group(1)) if x.group(1) else ' ', raw_text)
return shrink_whitespace_reg.sub(' ', result)
text = 'I am very #happy man! but😘😘 my wife😞 is not 😊😘. 99/33'
print('Cleaned text: ' + clean_text(text))
# => Cleaned text: I am very happy man but 😘 😘 my wife 😞 is not 😊 😘
请参阅Python demo
说明:
- 第一个正则表达式看起来像
([U0001F300-U0001F64FU0001F680-U0001F6FFu2600-u26FFu2700-u27BF])|[^A-Za-z]
,将匹配并将捕获到组1中的一个表情符号,或者只匹配除ASCII字母以外的任何字符。如果表情符号被捕获(请参见lambda中的if x.group(1)
),则表情符号将返回,并在两侧加上空格,否则,该空格将用于替换非字母 s{2,}
模式将匹配2个或更多空格,shrink_whitespace_reg.sub(' ', result)
将用单个空格替换所有这些块。
这篇关于如何从文本中删除除单词和表情符号之外的所有内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文