我需要使用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