我正在尝试使用Python构建一个算法来过滤大量的RDF数据。
我有一个列表,包含约70,000个格式为
然后我有约6GB的项(三元组),格式如下
我还没有想到一个很好的算法(这并没有帮助,因为我没有正式的CS培训)。
目前我想到最好的方法是先将大列表中的三元组拆分成三个项列表
我有一个列表,包含约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)
这个算法需要相当长的时间。
有没有更快的方法来做这件事?如果有具体的算法,您可以直接告诉我名字,我会想办法实现它。
谢谢!
根据评论进行澄清:
所有数据项都是字符串。因此,小列表可能包含
["Mickey", "Mouse", "Minny", "Cat"]
,而大列表可能是[["Mickey","Pluto","Bluto"],["John","Jane","Jim"] ...]
每个大列表三元组中只需要匹配一个小列表项即可计数
小列表中的所有项目实际上都是唯一的,因此我没有考虑将它们转换为集合。但我会尝试。
我可以创建任何中间结构。我正在尝试使用 shelve 构建一个倒排索引。
<A> <B> <C>
是否都必须匹配?还是只需要匹配<A>
、<B>
或<C>
中的一个即可?另外,您的第二个过滤阶段也有点模糊。这里可以提供一些示例数据吗? - Li-aung Yip