问题描述
设置
假设我们有一个 xml 产品(lxml 元素),由一个唯一代码(字符串)或一个列表标识唯一代码(更多关于后者)。产品开始标记位于第一个xml提要中的S1字节索引(开始),产品结束标记位于E1字节索引(结束)处.然后,第二个 xml 提要中有一个匹配产品。 Feed 具有相同的格式,但产品物理位置不同 - 第二个产品在第二个 Feed 中具有位置 S2 和 E2 字节索引。
任务是将这两种匹配的产品放到一个地方(同时,同时)。此任务的一部分是获取两个提要(两组产品)的差异。目标是在处理大型 xml 提要时找到最适合 RAM 的解决方案(每个最多 20,000 个产品,大约 200MB,可能会有很大差异)。一次性内存为2-3Gb。
为了实现目标,我们使用了 SAX 解析器,并将产品替换为它在提要中的位置,在大多数没有问题的情况下,我们得到:
products_from_first_Feed = { 'code': [S1,E1],... }
products_from_second_Feed = { 'code': [S2,E2],... }
# 'code' == 'code' so [S1,E1] match [S2,the products are common,great!
问题
当产品由唯一代码列表描述时,问题就开始了,就像这样:
products_from_first_Feed = { ['sub_a','sub_b']: [S1,... }
products_from_second_Feed = { ['sub_a','sub_b']: [S2,... }
# ['sub_a','sub_b'] == ['sub_a','sub_b'] so [S1,great...?
这显然是不可能的。为了解决这种情况,代码被分解,每个子代码都与原始产品的位置相关联。
products_from_first_Feed = { 'sub_a': [S1,'sub_b': [S1,... }
products_from_second_Feed = { 'sub_a': [S2,'sub_b': [S2,E2] ... }
# 'sub_a' == 'sub_a' or 'sub_b' == 'sub_b' so [S1,great!
然后,要找到通用代码,对键使用集合操作就足够了。
但是有一些问题:
-
在这种情况下,产品将被同时解析为普通和差异(一个子代码是新,一个是普通)
products_from_first_Feed = { 'sub_a': [S1,... } products_from_second_Feed = { 'sub_a': [S2,E2] ... }
是否有可能找到更好的解决方案?我试图将产品表示为其位置和所有子代码的多维矩阵,但总是无法有效地从给定的单个子代码中检索所有子代码...
解决方法
通过减少冗余信息量部分解决的第二个问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)