我需要使用PHP来组合不同结构化的XML文件。我正在做的是;基于条目相似度合并XML文件
- 使用
SimpleXMLElement()
类 - 做其他文件一样,递增第一
SimpleXMLElement()
实例 - 保存新合并的XML文件中读取使用
simplexml_load_file()
- 格式化使用新结构中的元素第一个XML文件。
到目前为止好。棘手的部分是,第一个文件有约。 3000条目,第二个文件有5000条。其中近2000条实际上是相同的;也许只是几个字母不同而已。例如, “联想G50-70 CoreI5”和其他可能是“联想G5070 I5”。
问题是,如何将第一个文件的条目与第二个文件的条目匹配;所以在新的组合文件中实际上它总共只有一个条目?
我使用PHP和SmithWatermanGotoh的similar_text()
函数来计算相似度,它与86%的分数成比例;这对我来说已经足够了。但是迭代另一个文件的所有条目以仅匹配一个条目对我来说是非常不明智和耗费资源的。 Beucase意思是约。每次我保存一个新的更新文件时,7MB的文件加载到内存中至少执行15.000次迭代。
我认为将所有条目插入到数据库表中并使用Sphinx Search来匹配条目;但我不确定它是否真的有足够的帮助。
如果内存问题,[发电机](http://php.net/manual/ro/language.generators.overview.php)可能会有所帮助。 – Andrew
我认为这里的主要问题是'similar_text()'的复杂性。如果我是你,我将定义一组规则以独特的方式格式化每个条目,然后你可以很容易地找到重复。 –
@CasimiretHippolyte,我无法清楚地练习你的建议,你会更具体吗?顺便说一句,有完全相同的条目,又名重复;但也有同样的条目,但不完全重复。就像问题中给出的例子一样。 – Turab