问题描述
我正在尝试创建一个包含 2000 万个模式的 PhraseMatcher
。例如:
terms = [''.join(random.choices(string.ascii_uppercase,k = 4)) for i in range(20000000)]
nlp = English()
matcher_large = PhraseMatcher(nlp.vocab,attr = 'LOWER')
terms_large = list(nlp.tokenizer.pipe(terms))
matcher_large.add('Terms',None,*terms_large)
这会导致内核在 Jupyter 中死亡,或者进程在终端中被杀死。它还以 100% cpu 运行。是否有一种内存密集程度较低的方法来创建此匹配器?我想过分块创建匹配器,但我不想最终得到数百个匹配器。
解决方法
确实,PhraseMatcher
可能不是这么多模式的最佳选择,但您可以逐步添加模式,而不是预先创建一个巨大的列表并将同样大量的参数一次传递给 {{ 1}} 方法:
add
Jupyter 笔记本通常具有相对较低的默认内存限制,这可能是您遇到的问题。