- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个列表需要相互匹配。我需要将每个 str1
单词与每个 str2
单词列表进行匹配。我在 str2
中有一个 40k 单词的列表。我想尝试使用多处理
来使其运行得更快。
例如:
str1 = ['how', 'are', 'you']
str2 = [['this', 'how', 'done'], ['they', 'were', 'here'], ['can', 'you', 'leave'], ['how', 'sad]]
我尝试过的代码:
from multiprocessing import Process, Pool
from fuzzywuzzy import process
def f(str2, str1):
for u in str1:
res = []
for i in str2:
Ratios = process.extract(u,i)
res.append(str(Ratios))
print(res)
return res
if __name__ == '__main__':
str1 = ['how', 'are', 'you']
str2 = [['this', 'how', 'done'], ['they', 'were', 'here'], ['can', 'you', 'leave'], ['how', 'sad]]
for i in str2:
p = Process(target=f, args=(i, str1))
p.start()
p.join()
这不会返回我期望的结果 - 我期望输出看起来像数据框:
words how are you
['this', 'how', 'done'] 100 0 0
['they', 'were', 'here'] 0 90 0
['can', 'you', 'leave'] 0 80 100
['how', 'sad'] 100 0 0
最佳答案
由于这个循环,您并没有真正使用并行多处理:
for i in str2:
p = Process(target=f, args=(i, str1))
p.start()
p.join()
p.join()
等待每个进程按顺序完成。因此,该构造并没有加速(请注意,仅为每种情况创建一个新的干净进程就很有用,例如在某些情况下,您在 DLL 中加载 native 代码)。
您必须存储流程对象并在单独的循环中等待它们。
# create & store process objects
processes = [Process(target=f, args=(i, str1)) for i in str2]
# start processes
for p in processes:
p.start()
# wait for processes to complete
for p in processes:
p.join()
请注意,该方法有几个主要问题:
f
的返回值简单吗?使用当前方法,返回值将丢失,除非将其存储在 manager
中。目的。 map
方法允许获取结果,如上面的示例所示。
这就是进程池等对象存在的原因。小使用示例:
from multiprocessing import Pool
def sq(x):
return x**2
if __name__=="__main__":
p = Pool(2)
n = p.map(sq, range(10))
print(n)
这里只有 2 个进程同时处于事件状态。
您的代码,适用于池(未经测试)
from multiprocessing import Pool
from fuzzywuzzy import process
def f(str2, str1):
for u in str1:
res = []
for i in str2:
Ratios = process.extract(u,i)
res.append(str(Ratios))
return res
if __name__ == '__main__':
str1 = ['how', 'are', 'you']
str2 = [['this', 'how', 'done'], ['they', 'were', 'here'], ['can', 'you', 'leave'], ['how', 'sad']]
nb_processes = 4
p = Pool(nb_processes)
results = p.map(f, [(i,str1) for i in str2])
results
是每次调用 f
的返回值列表(列表) ,按照 str2
指定的顺序
关于针对 fuzzywuzzy 的 Python 多处理列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59741297/
我正在尝试使用 FuzzyWuzzy 来纠正文本中拼写错误的名称。但是,我无法让 process.extract 和 process.extractOne 按照我预期的方式运行。 from fuzzy
首先,请注意我是一个Python新手,所以提前致歉。然而,我在最后一两天对此进行了研究,但没有运气 - 因此我在这里发表第一篇文章。 我需要根据以下格式的 CSV 文件中的“名称”来模糊匹配数据: C
当我尝试使用外来字符进行简单的 fuzzywuzzy 表达式时,使用 process.extractOne 方法得到错误的结果(我尝试过使用和不使用 u): >>> choices= [u"הלכות
我有以下数据框: df = pd.DataFrame( {'id': [1, 2, 3, 4, 5, 6], 'fruits': ['apple', 'apples', 'orang
要么我的进程一个接一个地启动,要么它们启动(同时)但没有调用指向函数。我以某种方式尝试了许多变体,它不会像许多教程所教的那样起作用。 我的目标是模糊模糊字符串匹配 80k 文本句子项目列表,删除不必要
我有一个包含 10 个解析地址的数据帧 df_sample,并将其与另一个包含数十万个解析地址记录 df 的数据帧进行比较。 df_sample 和 df 共享完全相同的结构: zip_code
我正在使用 fuzzywuzzy 在公司名称的 csv 中查找近似匹配项。我正在将手动匹配的字符串与未匹配的字符串进行比较,希望找到一些有用的近似匹配,但是,我在 fuzzywuzzy 中遇到了字符串
我有一个包含 10 个解析地址的数据帧 df_sample,并将其与另一个包含数十万个解析地址记录 df 的数据帧进行比较。 df_sample 和 df 共享完全相同的结构: zip_code
我有一个数据框: alertname custname 0 wlison wilson 1 dais said 2 4dams adams 3 ad4ms adam
我正在 python 中使用模糊 wuzzy,虽然它声称它可以使用编辑距离,但我发现许多具有不同字符的字符串会产生不同的结果。例如。 >>>fuzz.ratio("vendedor","vendedo
我正在使用 fuzzywuzzy 来计算两个句子之间的相似度。以下是一些对我来说毫无意义的结果: from fuzzywuzzy import fuzz s1 = "moist tender pork
我正在使用 FuzzyWuzzy String Matching module from SeatGeek . 我发现在使用 token_set_ratio 搜索算法时,大小写上的微小差异会产生截然不
我用 pip 为 python3 安装了 fuzzywuzzy。当我执行 pip list 时,我看到了 fuzzywuzzy (0.8.1) 但是,当我尝试导入时出现错误。 Python 3.4.0
我有一个包含约 20000 个单词的 CSV 文件,我想按相似性对这些单词进行分组。为了完成这样的任务,我正在使用神奇的 fuzzywuzzy包,它似乎工作得非常好,并且用一个小数据集(~100 字)
我在 fuzzywuzzy 中得到的结果不如预期的那样有效。如果中间多了一个词,由于levenshtein的差异,得分较低。 例子: from fuzzywuzzy import fuzz score
我在 pandas 中有一个数据框,我在 python 中使用 fuzzywuzzy 包来匹配数据框中的第一列和第二列。 我已经定义了一个函数来创建具有第一列、第二列和部分比率分数的输出。但它不起作用
我正在尝试模糊匹配两个 csv 文件,每个文件包含一列名称,它们相似但不相同。 到目前为止我的代码如下: import pandas as pd from pandas import DataFram
我有两个列表需要相互匹配。我需要将每个 str1 单词与每个 str2 单词列表进行匹配。我在 str2 中有一个 40k 单词的列表。我想尝试使用多处理来使其运行得更快。 例如: str1 = ['
假设我有以下 3 个数据框: import numpy as np from fuzzywuzzy import fuzz from fuzzywuzzy import process import
我正在使用 Python fuzzywuzzy 在句子列表中查找匹配项: def getMatches(needle): return process.extract(needle, boo
我是一名优秀的程序员,十分优秀!