我正在尝试用 Python 构建一个算法来过滤大量 RDF 数据。
我有一个包含大约 70,000 个项目的列表,格式如下<"datum">
.
然后我有大约 6GB 的项目(三元组),格式如下<"A">
<"B">
<"C">
我想提取包含第一个列表中任何项目的所有三元组,然后从第一次提取中提取包含任何单个项目的任何三元组(最终效果是形成通过一步连接到种子的图的分区从第一个列表开始)。
我一直没能为此想出一个很好的算法(因为我没有接受过正式的 CS 训练,这对我没有帮助。)
到目前为止,我想到的最好的方法是首先将大列表中的三元组拆分为三个项目列表的列表[<"A">, <"B">, <"C">]
。然后我将其分成块,并使用多重处理来创建进程,该进程获取完整的小列表和大列表的一部分......
for line in big list:
for item in small list:
if item in line:
bucket.append(line)
这个算法需要相当长的时间。
有没有更快的方法来做到这一点?如果有具体的算法,你可以给我名字,我会弄清楚如何实现它。
Thanks!
每条评论的澄清:
所有数据项都是字符串。所以小列表可能包含["Mickey", "Mouse", "Minny", "Cat"]
大名单可能是[["Mickey","Pluto","Bluto"],["John", "Jane", "Jim]...]
每个大列表三元组中只有一个项目需要与小列表中的一个项目相匹配才能计数
小列表中的所有项目实际上都是唯一的,所以我无论如何也不想将它们转换为集合。但我会尝试一下。
我可以创建任何我想要的中间结构。我现在正在尝试使用架子构建的倒排索引。
您可能应该首先将小列表存储在一个集合中,这样查找速度会更快。这可以防止 big_list 中的每个项目经历 70,000 次迭代。
small_list_set = set(small_list)
for line in big_list:
for item in line:
if item in small_list_set:
bucket.append(line)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)