如何在我的标记化输出中摆脱空字符串?



预处理tweet后,我得到一个空字符串作为最常见的标记之一。我已经尝试了re.sub函数"(空格)和"(空字符串)但不能摆脱空字符串。
我认为当一行中有三个空格时可能会发生这种情况。所以我尝试了re.sub(r'(?<= ) (?= )',但那不起作用。
我还尝试用tokens.index('')获得空字符串的索引,并获得了输出ValueError: '' is not in list,但是当从输出中复制粘贴空字符串时,它返回了索引。

你知道这是怎么回事吗?

#Join all Tweets
tweets_joined = " ".join(all_tweets)

#Safe urls and remove them
no_links = re.sub(r'https://t.co/w{10}', ' ', tweets_joined)

#Remove emojis
emojis = re.compile("(["
u"U0001F600-U0001F64F"  # emoticons
u"U000025B0-U000025BF"  # geometric shapes
u"U00002190-U000021FF"  # arrows
u"U000027A0-U000027AF"  # arrows
u"U0001F300-U0001F5FF"  # symbols & pictographs
u"U0001F680-U0001F6FF"  # transport & map symbols
u"U0001F1E0-U0001F1FF"  # flags (iOS)
"])", flags= re.UNICODE)
no_emojis = re.sub(emojis, ' ', no_links)
#put together big numbers (german writing)
safe_numbers = re.sub(r'(?<=d).(?=d)', '', no_emojis)
#remove html tags
no_newlines = re.sub(r'n', ' ', safe_numbers)
no_amp = re.sub(r'&amp;', ' ', no_newlines)

#remove punctuation
interpunkt = string.punctuation + "„“–»«´’"
interpunkt = interpunkt.replace("#","")
interpunkt = interpunkt.replace("@","")
no_punct_text = no_amp
for punct in interpunkt:  # durch Interpunktionszeichen in string.punctuation iterieren
no_punct_text = no_punct_text.replace(punct, ' ')  # Satzzeichen entfernen

#remove empty strings (this attempt failed)
no_empty_string = re.sub(r'(?<= ) (?= )', '', no_punct_text)

#casefold
text_lower = no_empty_string.casefold()
#tokenize
tokens = nltk.tokenize.word_tokenize(text_lower)


下面是部分' tokens '输出:
'#berlin',
'#bundestag',
'#brandner',
'️',
'wer',
'hält',
'sie',
'auf'

你的工作流程是…复杂。但有时,最简单或最好的标记化正则表达式只会生成空标记和好东西。而不是跳圈避免空的令牌,只需通过后处理来摆脱它们:

clean_tokens = [ tok for tok in tokens if tok ]

所以,我检查了空字符串的长度,它是1。然后我将其编码为Unicode字节对象。原来它是一个变体选择器,用于符号,表情符号等的变体。

相关内容

  • 没有找到相关文章

最新更新