我试图产生一个向量,该向量表示字符串和列表元素的匹配。我在python3.x中做了一个函数:
def vector_build (docs, var):
vector = []
features = docs.split(' ')
for ngram in var:
if ngram in features:
vector.append(docs.count(ngram))
else:
vector.append(0)
return vector
工作正常:
vector_build ('hi my name is peter',['hi', 'name', 'are', 'is'])
出局:[1、1、0、1]
但是此功能无法扩展到重要数据。当其字符串参数'docs'重于190kb时,它将花费更多时间。所以我试图用地图函数代替for循环:
var = ['hi', 'name', 'are', 'is']
doc = 'hi my name is peter'
features = doc.split(' ')
vector = list(map(var,if ngram in var in features: vector.append(doc.count(ngram))))
但这会返回此错误:
SyntaxError:语法无效
是否有一种方法可以将map,lambda和itertools的for循环替换为更快的执行速度?
答案 0 :(得分:0)
您可以将列表理解用于此任务。另外,在一组功能中进行查找也应该会对功能有所帮助。
var = ['hi', 'name', 'are', 'is']
doc = 'hi my name is peter'
features = doc.split(' ')
features_set = set(features) #faster lookups
vector = [doc.count(ngram) if ngram in features_set else 0 for ngram in var]
print(vector)