我有一个pandas数据帧,它包含两个名为Potential Word
,Fixed Word
的列。Potential Word
列包含不同语言的单词,其中包含拼写错误单词和正确单词,Fixed Word
列包含与Potential Word
对应的正确单词
下面我分享了一些样本数据
我的vocab数据帧包含600K唯一行
我的解决方案:
key = given_word
glob_match_value = 0
potential_fixed_word = ''
match_threshold = 0.65
for each in df['Potential Word']:
match_value = match(each, key) # match is a function that returns a
# similarity value of two strings
if match_value > glob_match_value and match_value > match_threshold:
glob_match_value = match_value
potential_fixed_word = each
问题
我的代码的问题是它需要花费大量的时间来修复每个单词,因为循环在大的词表中运行。当一个单词在单字上漏掉时,解决一个10~12个单词的句子几乎需要5到6秒。匹配函数执行得很好,因此优化的目标是
我需要优化的解决方案,请在这里帮助我
从Information Retrieval (IR)的角度来看,您需要减少搜索空间。将
given_word
(如key
)与所有潜在单词进行匹配肯定是低效的。 相反,您需要匹配合理数量的候选对象要找到这样的候选词,您需要索引潜在词s和固定词s
使用此索引,您可以搜索一些候选项
输出是
现在,您可以
match
只针对少数候选对象,而不是所有600K但它并不完美,这是不可避免的权衡,也是IR的基本工作原理。用不同数量的候选者试试这个
我将使用sortedcollections模块。通常,对分拣列表或分拣数据的访问时间是O(log(n))而不是O(n);在您的案例中,19.1946 if/then检查与600000 if/then检查
在实现上没有太多变化,因为我认为需要迭代每个单词的潜在单词列表
这里我的目的不是优化匹配函数本身,而是利用多个线程并行搜索
请注意,此操作的运行时间将取决于
相关问题 更多 >
编程相关推荐