1

链接从 Python 中的字符串中删除转义实体

我的代码正在读取一个大的 csv 推文文件并将其解析为两个字典(取决于推文的情绪)。然后,我创建一个新字典并使用 HTML 解析器取消转义所有内容,然后使用 translate() 方法从文本中删除所有标点符号。
最后,我试图只保留大于 length = 3 的单词。
这是我的代码:

tweets = []
for (text, sentiment) in pos_tweets.items() + neg_tweets.items():
    text = HTMLParser.HTMLParser().unescape(text.decode('ascii'))
    remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)
    shortenedText = [e.lower() and e.translate(remove_punctuation_map) for e in text.split() if len(e) >= 3 and not e.startswith(('http', '@')) ]
    print shortenedText

然而,我发现的是,虽然我想要的大部分内容都在完成,但我仍然得到长度为 2 的单词(但不是长度为 1),并且我的字典中有一些空白条目。
例如:

(: !!!!!! - so I wrote something last week
* enough said *
.... Do I need to say it?

产生:

[u'', u'wrote', u'something', u'last', u'week']
[u'enough', u'said']
[u'', u'need', u'even', u'say', u'it']

我的代码有什么问题?如何删除长度小于 2 的所有单词,包括空白条目?

4

1 回答 1

4

我认为您的问题是,当您测试是否 len(e) >= 3 时,e 仍然包含标点符号,所以“它?” 没有被过滤掉。也许分两步做?清除标点符号 e,然后过滤大小?

就像是

cleanedText = [e.translate(remove_punctuation_map).lower() for e in text.split() if not e.startswith(('http', '@')) ]
shortenedText = [e for e in cleanedText if len(e) >= 3]
于 2013-08-09T14:25:30.803 回答