python中哪个ngram实现最快?在
我试着介绍一下nltk和斯科特的zip(http://locallyoptimal.com/blog/2013/01/20/elegant-n-gram-generation-in-python/):
from nltk.util import ngrams as nltkngram
import this, time
def zipngram(text,n=2):
return zip(*[text.split()[i:] for i in range(n)])
text = this.s
start = time.time()
nltkngram(text.split(), n=2)
print time.time() - start
start = time.time()
zipngram(text, n=2)
print time.time() - start
[退出]
^{pr2}$在python中有没有更快的实现来生成ngram?在
扩展M4rtini's code,我用硬编码的
n=2
参数制作了三个附加版本:使用
^{pr2}$timeit
,我得到以下结果:bigram3
是我测试中最快的。如果在整个过程中使用迭代器,那么硬编码和使用迭代器似乎确实有一点好处(至少对于这个参数值)。我们看到迭代器的好处在于zipngram2
和{我还尝试使用PyPy来提高效率,但实际上它似乎使事情变得更慢(这包括在进行计时测试之前尝试通过在函数上调用它10k次来预热JIT)。不过,我对PyPy还是个新手,所以我可能做错了什么。可能使用Pyrex或Cython可以实现更大的加速。在
一些尝试和一些分析。我以为使用发电机可以提高这里的速度。但与对原稿稍作修改相比,改进并不明显。但如果你不需要的话,你不需要在相同的时间里运行完整的函数。在
对于这个测试数据,zipngram2和zipngram3似乎是最快的。在
相关问题 更多 >
编程相关推荐