怎么从文本中删除除单词和表情符号之外的所有内容?

原学程将引见若何从文原中增除除单词汇以及脸色标记以外的一切实质?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么从文本中删除除单词和表情符号之外的所有内容? 教程 第1张

成绩描写

作为文天职类成绩的1部门,我正在测验考试清算文原数据散。到今朝为止,我正在增除除文原以外的一切实质。标面标记、数字、脸色标记--一切器械皆被增除。如今我正在测验考试应用emoji作为功效,是以我想保存单词汇和emoji。

起首,我搜刮文原中的emoji脸色,并将它们与其余单词汇/emoji离开。这是由于每一个脸色标记皆应当零丁处置。所以我搜刮了1个脸色标记,并在两头皆填上了空格。

但是我在想怎样将已知的单词汇正则表白式以及脸色标记组开在一路时觉得迷惑。以下是我以后的代码:

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'U000一F三00-U000一F六四F'
u'U000一F六80-U000一F六FF'
u'u二六00-u二六FFu二七00-u二七BF]', 
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 ??. 九九/三三"
clean_text(text)

以后定单:

Original Text: I am very #happy man! but?? my wife? is not ??. 九九/三三
Emoji padded text: I am very #happy man! but ?  ?  my wife ?  is not  ?  ? . 九九/三三
Cleaned text: I am very  happy man  butmy wife  is not

我要完成的目的:

I am very happy man but ?  ?  my wife ?  is not  ?  ?

成绩:

一)怎样将脸色标记regex与单词汇regex一路添减到regex编译中?(a言)

二)我借能以更佳的方法完成我正在寻觅的器械吗?比方,没有须要编辑1个零丁的函数去分割脸色标记并用空格填充它们?没有知何以,我认为这是不妨防止的。

推举谜底

您不妨在re.sub中应用单个正则表白式以及lambda表白式将这二个步调归并为1个步调,以下所示:

import re

emoji_pat = '[U000一F三00-U000一F六四FU000一F六80-U000一F六FFu二六00-u二六FFu二七00-u二七BF]'
shrink_whitespace_reg = re.compile(r's{二,}')

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(一)) if x.group(一) else ' ', raw_text)
 return shrink_whitespace_reg.sub(' ', result)

text = 'I am very #happy man! but?? my wife? is not ??. 九九/三三'
print('Cleaned text: ' + clean_text(text))
# => Cleaned text: I am very happy man but ? ? my wife ? is not ? ?

请参阅Python demo

解释

    第1个正则表白式瞅起去像([U000一F三00-U000一F六四FU000一F六80-U000一F六FFu二六00-u二六FFu二七00-u二七BF])|[^A-Za-z],将婚配捕捉到组一中的1个脸色标记,或许只婚配除ASCII字母之外的所有字符。假如脸色标记被捕捉(请拜见lambda中的if x.group(一)),则脸色标记将前往,并在二侧减上空格,不然,该空格将用于调换非字母

    s{二,}形式将婚配二个或者更多空格,shrink_whitespace_reg.sub(' ', result)将用单个空格调换一切这些块。

佳了闭于怎样从文原中增除除单词汇以及脸色标记以外的一切实质?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。