过滤Python列表中的数字

时间:2017-04-01 10:34:49

标签: python list nltk

我正在从网站上获取NLP到某些数据。这里我有一个爬行数据集,它是一个标记化列表。我只想处理这个列表中的单词而不是其他数字。所以我已经搜索了其他类似的问题,并且已经尝试过那些已经回答的问题,但是在我的情况下它不起作用。下图是iPython笔记本的屏幕截图,您可以在列表中看到一些数字。

enter image description here

我试过以下那些。

#(1)
no_integers = [x for x in tokens if not (x.isdigit() or x[0] == '-' and x[1:].isdigit())]

#(2)    
is_integer = lambda s: s.isdigit() or (x[0] == '-' and x[1:].isdigit())
no_integers = filter(is_integer, tokens)

#(3)
def int_filter( tokens ):
for v in tokens:
    try:
        int(v)
        continue # Skip these
    except ValueError:
        yield v # Keep these

list( int_filter( tokens ))

我没有得到什么问题。没有编译错误。为了弄清楚是否有效,我试图比较之前和之后的'len(令牌)'。但是,没有任何改变。

2 个答案:

答案 0 :(得分:0)

您可以通过这种方式删除所有整数/数字/浮点数的单词:

tokens = "I like 55 donuts with glaze".split()
no_integers = [token for token in tokens if not token.isdigit()]
print(no_integers)

如果您想删除底片和小数:

tokens = "I like 55 95.5 donuts with glaze".split()
no_integers = [token for token in tokens if not all(char.isdigit() or char == '.' or char == '-' for char in token)]
print(no_integers)
token ="55"
print (all(char.isdigit() for char in token))

答案 1 :(得分:0)

您可能想尝试regex(正则表达式)吗?

import re
x = 'I was born in the year 1997'
re.sub(r'\d','',x)

如果x中有一个'\ d'表示数字,则您将用''代替一个数字