使用python消除列表中不需要的数据

时间:2014-03-11 17:11:50

标签: python unicode utf-8

我有一个像这样的列表。我可以使用python从列表中删除 \ xe2 \ x80 \ x99,\ xe2 \ x80 \ x9c等。无论如何要从我的列表中消除这些数据? 常见模式是可用的吗?

  

[' guest',' demo',':',' eric',' iverson', ' \ xe2 \ x80 \ x99s',' itty',   ' bitty',' search',' february',' 16',' th',', ',' 2010',' by',   ' daniel',' tunkelang','回复',' i',' \ xe2 \ x80 \ x99m', '背面&#39 ;,   '来自','度假',',','和','仍然','挖掘','我的''方式',   ' out','','所有','',' \ xe2 \ x80 \ x99s', '堆积',' up',   '而',' i',' \ xe2 \ x80 \ x99ve','已经','离线', '而',' i',   ' catch',' up',',','我','思考','我',' \ xe2 \ x80 \ x99d','分享',   '',',' a',' demo','',' eric& #39;,' iverson','是',   '亲切','足够','','分享','与',' me& #39;,'它','使用',   ' yahoo','!',' boss',' to','支持',' ','探索','搜索',   '体验',''' top',''' a''' general& #39;,'网络','搜索',   '引擎','当','你','执行',' a','查询& #39;,',','',   '应用','检索''','设置''',''' && 39; #39;,' term',   '考生','使用',' yahoo',' \ xe2 \ x80 \ x99s',' key', '术语&#39 ;,   ' api','它','然后','得分','每个'' term& #39;,'通过','划分','它',   '''''''''''''''''结果& #39;,'设置',' by',   '''''全球''''''''''' \ XE2 \ X80 \ x93a&#39 ;,   '相关性','衡量','类似','到','一个','我的& #39;,'前',   '同事''和','我',''' at',' endeca& #39;,' in',' enterprise',   '上下文','你','''尝试''''& #39;,'演示','你自己',   ' at',' http',':// www',' ittybittysearch',' com',&# 39; /','而',' it',   ''' rough',' edge',',',' it','产生',' nice','结果',   ' \ xe2 \ x80 \ x93特别','考虑',''简单''',   '''',' here',' \ xe2 \ x80 \ x99s',' an', '示例',' of',   '','我''''''''''& #39;,'探索','和',   '学习',''' new','我','开始','& #39;,' ["',   '信息','检索''"]','我','注意到', ' \ XE2 \ X80 \ x9c&#39 ;,   '互动','信息','检索' \#39; \ xe2 \ x80 \ x9d',' as', '一个&#39 ;,   ' top',' term',',',' so',' i','使用','它',',','精简','大多数',   '''''''''''''看起来','熟悉& #39;,'到',   '我',' \ xe2 \ x80 \ x93但','','陌生','名称', '抓住了','我的',   '关注',',' \ xe2 \ x80 \ x9c',' anton',' leuski' ,' \ xe2 \ x80 \ x9d',   '关注','我的','好奇心',',','我','精致','再次',   '查看',''''''''''''我立刻'立即''看到',   '',' leuski','','完成','工作',' on& #39;,'评估',   '记录','群集','对于','互动','信息',   '检索','进一步','探索''制作','它''清除& #39;,'这个',   '是','某人','他们的工作''我''应该& #39;,' get',' to',' know',   ' \ xe2 \ x80 \ x93check',' out','他的',' home',' page', '!','我','可以',   ' \ xe2 \ x80 \ x99t','承诺','那','你'' \ xe2 \ x80 \ x99ll','有',   ' as','生产','''体验''''' i& #39;,'做了',',','但是',   '我','鼓励',','到','尝试'' eric& #39;,' \ xe2 \ x80 \ x99s',' demo',   '它'' \ xe2 \ x80 \ x99s','简单','示例','喜欢', '这些','那',   '提醒','','''''''& #39;,'追求',' hcir',' for',   '','打开''网络','说','','& #39;,',',' hcir',' 2010',   '''''''''''''我们'' \ xe2 \ x80 \ x99ll','肉体',' out',   '''详情',' over',''''''周& ',',','和',' of',   '当然',' i',' \ xe2 \ x80 \ x99ll','分享','他们', '这里']

3 个答案:

答案 0 :(得分:3)

如果我猜测输入是utf8编码,你可以这样做:

>>> from unidecode import unidecode
>>> my_list = ['guest', 'demo', ':', 'eric', 'iverson', '\xe2\x80\x99s', 'itty', 'bitty', 'search', 'february', '16', 'th', ',', '2010', 'by', 'daniel', 'tunkelang', 'respond', 'i', '\xe2\x80\x99m', 'back', 'from', 'vacation', ',', 'and', 'still', 'digging', 'my', 'way', 'out', 'of', 'everything', 'that', '\xe2\x80\x99s', 'piled', 'up', 'while', 'i', '\xe2\x80\x99ve', 'been', 'offline', 'while', 'i', 'catch', 'up', ',', 'i', 'thought', 'i', '\xe2\x80\x99d', 'share', 'with', 'you', 'a', 'demo', 'that', 'eric', 'iverson', 'was', 'gracious', 'enough', 'to', 'share', 'with', 'me', 'it', 'uses', 'yahoo', '!', 'boss', 'to', 'support', 'an', 'exploratory', 'search', 'experience', 'on', 'top', 'of', 'a', 'general', 'web', 'search', 'engine', 'when', 'you', 'perform', 'a', 'query', ',', 'the', 'application', 'retrieves', 'a', 'set', 'of', 'related', 'term', 'candidates', 'using', 'yahoo', '\xe2\x80\x99s', 'key', 'terms', 'api', 'it', 'then', 'scores', 'each', 'term', 'by', 'dividing', 'it', 'is', 'occurrence', 'count', 'within', 'the', 'result', 'set', 'by', 'it', 'is', 'global', 'occurrence', 'count', '\xe2\x80\x93a', 'relevance', 'measure', 'similar', 'to', 'one', 'my', 'former', 'colleagues', 'and', 'i', 'used', 'at', 'endeca', 'in', 'enterprise', 'contexts', 'you', 'can', 'try', 'out', 'the', 'demo', 'yourself', 'at', 'http', '://www', 'ittybittysearch', 'com', '/', 'while', 'it', 'has', 'rough', 'edges', ',', 'it', 'produces', 'nice', 'results', '\xe2\x80\x93especially', 'considering', 'the', 'simplicity', 'of', 'the', 'approach', 'here', '\xe2\x80\x99s', 'an', 'example', 'of', 'how', 'i', 'used', 'the', 'application', 'to', 'explore', 'and', 'learn', 'something', 'new', 'i', 'started', 'with', '["', 'information', 'retrieval', '"]', 'i', 'noticed', '\xe2\x80\x9c', 'interactive', 'information', 'retrieval', '\xe2\x80\x9d', 'as', 'a', 'top', 'term', ',', 'so', 'i', 'used', 'it', 'to', 'refine', 'most', 'of', 'the', 'refinement', 'suggestions', 'looked', 'familiar', 'to', 'me', '\xe2\x80\x93but', 'an', 'unfamiliar', 'name', 'caught', 'my', 'attention', ':', '\xe2\x80\x9c', 'anton', 'leuski', '\xe2\x80\x9d', 'following', 'my', 'curiosity', ',', 'i', 'refined', 'again', 'looking', 'at', 'the', 'results', ',', 'i', 'immediately', 'saw', 'that', 'leuski', 'had', 'done', 'work', 'on', 'evaluating', 'document', 'clustering', 'for', 'interactive', 'information', 'retrieval', 'further', 'exploration', 'made', 'it', 'clear', 'this', 'is', 'someone', 'whose', 'work', 'i', 'should', 'get', 'to', 'know', '\xe2\x80\x93check', 'out', 'his', 'home', 'page', '!', 'i', 'can', '\xe2\x80\x99t', 'promise', 'that', 'you', '\xe2\x80\x99ll', 'have', 'as', 'productive', 'an', 'experience', 'as', 'i', 'did', ',', 'but', 'i', 'encourage', 'you', 'to', 'try', 'eric', '\xe2\x80\x99s', 'demo', 'it', '\xe2\x80\x99s', 'simple', 'examples', 'like', 'these', 'that', 'remind', 'me', 'of', 'the', 'value', 'of', 'pursuing', 'hcir', 'for', 'the', 'open', 'web', 'speaking', 'of', 'which', ',', 'hcir', '2010', 'is', 'in', 'the', 'works', 'we', '\xe2\x80\x99ll', 'flesh', 'out', 'the', 'details', 'over', 'the', 'next', 'weeks', ',', 'and', 'of', 'course', 'i', '\xe2\x80\x99ll', 'share', 'them', 'here']
>>> my_clean_list = [unidecode(x.decode('utf8')) for x in my_list]
>>> my_clean_list
['guest', 'demo', ':', 'eric', 'iverson', "'s", 'itty', 'bitty', 'search', 'february', '16', 'th', ',', '2010', 'by', 'daniel', 'tunkelang', 'respond', 'i', "'m", 'back', 'from', 'vacation', ',', 'and', 'still', 'digging', 'my', 'way', 'out', 'of', 'everything', 'that', "'s", 'piled', 'up', 'while', 'i', "'ve", 'been', 'offline', 'while', 'i', 'catch', 'up', ',', 'i', 'thought', 'i', "'d", 'share', 'with', 'you', 'a', 'demo', 'that', 'eric', 'iverson', 'was', 'gracious', 'enough', 'to', 'share', 'with', 'me', 'it', 'uses', 'yahoo', '!', 'boss', 'to', 'support', 'an', 'exploratory', 'search', 'experience', 'on', 'top', 'of', 'a', 'general', 'web', 'search', 'engine', 'when', 'you', 'perform', 'a', 'query', ',', 'the', 'application', 'retrieves', 'a', 'set', 'of', 'related', 'term', 'candidates', 'using', 'yahoo', "'s", 'key', 'terms', 'api', 'it', 'then', 'scores', 'each', 'term', 'by', 'dividing', 'it', 'is', 'occurrence', 'count', 'within', 'the', 'result', 'set', 'by', 'it', 'is', 'global', 'occurrence', 'count', '-a', 'relevance', 'measure', 'similar', 'to', 'one', 'my', 'former', 'colleagues', 'and', 'i', 'used', 'at', 'endeca', 'in', 'enterprise', 'contexts', 'you', 'can', 'try', 'out', 'the', 'demo', 'yourself', 'at', 'http', '://www', 'ittybittysearch', 'com', '/', 'while', 'it', 'has', 'rough', 'edges', ',', 'it', 'produces', 'nice', 'results', '-especially', 'considering', 'the', 'simplicity', 'of', 'the', 'approach', 'here', "'s", 'an', 'example', 'of', 'how', 'i', 'used', 'the', 'application', 'to', 'explore', 'and', 'learn', 'something', 'new', 'i', 'started', 'with', '["', 'information', 'retrieval', '"]', 'i', 'noticed', '"', 'interactive', 'information', 'retrieval', '"', 'as', 'a', 'top', 'term', ',', 'so', 'i', 'used', 'it', 'to', 'refine', 'most', 'of', 'the', 'refinement', 'suggestions', 'looked', 'familiar', 'to', 'me', '-but', 'an', 'unfamiliar', 'name', 'caught', 'my', 'attention', ':', '"', 'anton', 'leuski', '"', 'following', 'my', 'curiosity', ',', 'i', 'refined', 'again', 'looking', 'at', 'the', 'results', ',', 'i', 'immediately', 'saw', 'that', 'leuski', 'had', 'done', 'work', 'on', 'evaluating', 'document', 'clustering', 'for', 'interactive', 'information', 'retrieval', 'further', 'exploration', 'made', 'it', 'clear', 'this', 'is', 'someone', 'whose', 'work', 'i', 'should', 'get', 'to', 'know', '-check', 'out', 'his', 'home', 'page', '!', 'i', 'can', "'t", 'promise', 'that', 'you', "'ll", 'have', 'as', 'productive', 'an', 'experience', 'as', 'i', 'did', ',', 'but', 'i', 'encourage', 'you', 'to', 'try', 'eric', "'s", 'demo', 'it', "'s", 'simple', 'examples', 'like', 'these', 'that', 'remind', 'me', 'of', 'the', 'value', 'of', 'pursuing', 'hcir', 'for', 'the', 'open', 'web', 'speaking', 'of', 'which', ',', 'hcir', '2010', 'is', 'in', 'the', 'works', 'we', "'ll", 'flesh', 'out', 'the', 'details', 'over', 'the', 'next', 'weeks', ',', 'and', 'of', 'course', 'i', "'ll", 'share', 'them', 'here']

我在这里使用unidecode模块来转换那些"幻想"字符到最近的ascii等价物:

>>> for before, after in zip(my_list, my_clean_list):
...     if before != after:
...         print before, ' --> ', after
...         
’s  -->  's
’m  -->  'm
’s  -->  's
’ve  -->  've
’d  -->  'd
’s  -->  's
–a  -->  -a
–especially  -->  -especially
’s  -->  's
“  -->  "
”  -->  "
–but  -->  -but
“  -->  "
”  -->  "
–check  -->  -check
’t  -->  't
’ll  -->  'll
’s  -->  's
’s  -->  's
’ll  -->  'll
’ll  -->  'll

正如你可能猜到的那样,看起来有些英文数据应该在字边界处被分割,这是错误的。如果是您的代码生成此数据,我建议您更接近问题的来源解决您的问题!

答案 1 :(得分:1)

看起来你想要消除一堆unicode字符串。只需在列表中选择字母数字字符,如下所示:

>>> filter( lambda m: m.isalnum()  ,p)

这应该消除unicode的东西......

另一种选择是直接对字符串进行编码和解码......

>>> ' '.join(p).decode('ascii', 'ignore').encode('ascii').split()

这应该做得更好......

答案 2 :(得分:0)

您可以使用列表理解。假设您只想完全删除包含非字母数字字符的列表元素。如果您的列表位于变量a

[x for x in a if x.isalnum()]

将返回列表,减去\xe2\x80\x99等元素

这是@ssm提到的equivalent to the filter solution,他们刚刚首先使用它。