【问题标题】:How to add a lot of words into FuzzySet quickly?如何快速将大量单词添加到 FuzzySet 中?
【发布时间】:2020-12-28 11:43:19
【问题描述】:

我有一个包含大约 500 万个单词的语料库,我想将其放入模糊集中。 目前,大约需要 5 分钟。有没有更快的方法来做到这一点?

这是我的代码:

    import fuzzyset   
    fuzzy_set = fuzzyset.FuzzySet() 
    for word in list_of_words: # len(list_of_words)=~5M
       fuzzy_set.add(word)

我知道 for 循环不是在 Python 中做事的最快方式,但找不到任何文档来向 FuzzySet 添加列表。

感谢您的帮助。

【问题讨论】:

  • 考虑到语言通常少于 200,000 个单词(即英语、西班牙语、俄语等),您是指单词还是短语?由于大型数据集的模糊匹配速度较慢,Fuzzy matching at scale 提供了一种快速匹配的替代方法。

标签: python list itertools fuzzy-search


【解决方案1】:

您可以使用多重处理。 将您的 list_of_words 拆分成块并在池中运行。

import fuzzyset 
import multiprocessing as mp
fuzzy_set = fuzzyset.FuzzySet() 

def add_words(chunk):
        
    for word chunk:
       fuzzy_set.add(word)

if __name__ == '__main__':
    
    n = 500000 # or whatever size you want your chunks split up into
    
    chunks = [list_of_words[x:x + n ] for x in range(0, len(list_of_words), n )]

    pool = mp.Pool(mp.cpu_count())
    pool.map(add_words, chunks)

【讨论】:

  • 我认为多处理在这种情况下无效,因为fuzzyset 中的函数add 的编码在其中检查了给定单词的存在if lvalue in self.exact_set: return False。这意味着多处理将在这部分内存中相遇。
猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 2020-10-06
  • 2011-03-10
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 2019-11-03
相关资源
最近更新 更多