【发布时间】:2020-04-07 13:14:53
【问题描述】:
我目前正在尝试处理大量非常大(>10k 字)的文本文件。在我的数据管道中,我将 gensim tokenize 函数确定为我的瓶颈,相关部分在下面的 MWE 中提供:
import re
import urllib.request
url='https://raw.githubusercontent.com/teropa/nlp/master/resources/corpora/genesis/english-web.txt'
doc=urllib.request.urlopen(url).read().decode('utf-8')
PAT_ALPHABETIC = re.compile('(((?![\d])\w)+)', re.UNICODE)
def tokenize(text):
text.strip()
for match in PAT_ALPHABETIC.finditer(text):
yield match.group()
def preprocessing(doc):
tokens = [token for token in tokenize(doc)]
return tokens
foo=preprocessing(doc)
调用给定示例的preprocessing 函数大约需要66ms,我想改进这个数字。我的代码中还有什么可以优化的吗?还是我的硬件(2010 年代中期消费者笔记本电脑)有问题?我也会对拥有一些较新硬件的人的运行时感兴趣。
提前谢谢你
【问题讨论】:
-
你的正则表达式相当......你应该只使用
PAT_ALPHABETIC = re.compile(r'[^\W\d]+')。re.UNICODE在 Python 3.x 中是多余的 -
您好 Wiktor,感谢您的回答。正则表达式源自 gensim 源代码。据我所知,您的建议似乎也很有效,并且将运行时间提高了大约 30%
-
删除
text.strip() -
是的,这里没有任何作用。
标签: regex python-3.x nltk gensim