从Python中的String中删除转义的实体

时间:2013-08-09 12:21:49

标签: python string punctuation

我有一个巨大的推文csv文件。我将它们都读入计算机并将它们存储在两个单独的词典中 - 一个用于负面推文,一个用于正面。我想读取文件并将其解析为字典,同时删除任何标点符号。我用过这段代码:

tweets = []
for (text, sentiment) in pos_tweets.items() + neg_tweets.items():
    shortenedText = [e.lower() and e.translate(string.maketrans("",""), string.punctuation) for e in text.split() if len(e) >= 3 and not e.startswith('http')]
print shortenedText

除了一个小问题,这一切都很好。我下载的巨大的csv文件遗憾地改变了一些标点符号。我不确定这叫什么,所以不能真正谷歌,但实际上有些句子可能会开始:

"ampampFightin"
""The truth is out there"
"&altThis is the way I feel"

有没有办法摆脱所有这些?我注意到后两个以&符号开头 - 将是一个简单的搜索摆脱它(我要求的唯一原因而不是因为有太多的推文供我手动检查)

1 个答案:

答案 0 :(得分:3)

首先,unescape HTML entities,然后删除标点符号:

import HTMLParser

tweets = []
for (text, sentiment) in pos_tweets.items() + neg_tweets.items():
    text = HTMLParser.HTMLParser().unescape(text)
    shortenedText = [e.lower() and e.translate(string.maketrans("",""), string.punctuation) for e in text.split() if len(e) >= 3 and not e.startswith('http')]
print shortenedText

以下是unescape如何运作的示例:

>>> import HTMLParser
>>> HTMLParser.HTMLParser().unescape(""The truth is out there")
u'"The truth is out there'

UPD: UnicodeDecodeError问题的解决方案:使用text.decode('utf8')Here是一个很好的解释,为什么你需要这样做。