我有很多文本文件(10,000,000),我想删除所有以 / m / 开头的令牌。我写了下面的代码,但我正在寻找更快的代码,因为我标记字符串然后再次加入令牌。
import nltk
def removeMId(str):
words=[]
tokens = nltk.word_tokenize(str)
i=0
for tkn in tokens:
if not tkn.startswith('/m/'):
words.append(tkn)
i+=1
return ' '.join(words)
所有移除令牌都遵循此pattern=r''' /\m+(?:[-'/]\w+)*'''
这是输入的一个例子:
稿件处理费(支票必须是 / m / 09c7w0 美元,在 / m / 09c7w0 银行上绘制,MICR编码在支票底部,并支付给ASPET)。 / m / 01kqjn / m / 021b7r 和 / m / 01w6dw 信用卡也被接受。
答案 0 :(得分:1)
好吧,我会咬人 - 直截了当的做法是用正则表达式来做:
import re
TOKEN_REMOVER = re.compile(r"/m+[-'/]\w+\s?")
def removeMId(source):
return TOKEN_REMOVER.sub("", source)
它应该比你的例子快得多。话虽这么说,Python并不是为了打破速度/效率记录而设计的,所以如果你需要的只是一次性文件修改,你可能需要查看专用的编译工具来完成同样的任务。