2013-04-17 45 views
0

我得到了這兩個供稿(生產中會有更多)所有關於事件的票價 - 兩個供稿的格式不同,但基本上顯示相同的信息。比較來自兩種不同格式的xml供稿的數據

什麼即時試圖做的是比較價格屬性,找到最低的價格,我知道如何比較的實際價格

if(floatval($feed1['price']) > floatval($feed2['price']]){ 
    return $feed1['price']; 
} 
else { 
    return $feed2['price']; 
} 

但沒法把我的頭圍繞如何確保IM什麼IM比較相同的事件價格,因爲它們來自格式不同的Feed。

即。我如何才能比較倫敦HMV演唱會價格和兩種飼料的價格?

飼料1個

<type id="4558" name="Rolling Stones Concert" url="http://example1.com"> 
    <event id="52115351" name="HMV forum - London"> 
     <ticket name="Stalls" id="1354855" price="120"/> 
     <ticket name="Standing" id="4654845" price="85"/> 
    </event> 

    <event id="52115351" name="Webley Arena - London"> 
     <ticket name="Stalls" id="4556147" price="110"/> 
     <ticket name="Standing" id="9743466" price="95"/> 
    </event> 
</type> 

飼料2

<type id="5786" name="Rolling Stones Concert - World Tour" url="http://example2.com"> 
    <market id="45645634" name="London - HMV"> 
     <unit name="Seating" id="212770047" price="125"/> 
     <unit name="Standing" id="212770046" price="80"/> 
    </market> 

    <market id="45645914" name="London - Wembley"> 
     <unit name="Seating" id="212770047" price="109"/> 
     <unit name="Standing" id="212770046" price="99"/> 
    </market> 
</type> 

回答

2

您正在尋找的東西叫做Information extraction (IE)。這通常用Natural language processing (NLP)完成,例如,你需要一些程序,能夠分析該

<type id="4558" name="Rolling Stones Concert" url="http://example1.com"> 
第一飼料中

代表一樣

<type id="5786" name="Rolling Stones Concert - World Tour" url="http://example2.com"> 

第二飼料中,儘管差異:

id="4558"      =/= id="5786" 
name="Rolling Stones Concert" =/= name="Rolling Stones Concert - World Tour" 
<event>      =/= <market> 
id="45645634"     =/= id="45645914" 
name="HMV forum - London"  =/= name="London - HMV" 
<ticket>      =/= <unit> 
name="Stalls"     =/= name="Stalls" 

,你可以想象一下,您可以獲得每個新飼料的差異。如果預先分析數據strucutre(如<事件><市場>和屬性屬於對方,那麼你就可以運行在值文本分析,並做了相似性分析。

而且如果有喜歡攤位常見同義詞是座位(反之亦然),則可以減少複雜性放在首位。

[feed 1] -- streamline --> [sfeed 1]\     /[combined feed] 
        ...    X compare/align X 
[feed N] -- streamline --> [sfeed N]/     \ [unknown data] 
+0

感謝@harke,當你說「你需要一些程序」有沒有東西,可能會這樣做,作爲一個圖書館或p lugin。或者你能否指引我進一步閱讀。對不起,如果這似乎是一個明顯的問題,這是自從學習php以來第一個真正的項目。 – sam

+1

@sam:這有多個層次。我對NLP不太擅長,所以我不能在這裏提出任何建議(我知道有一個很棒的基於python的庫)。對於提要中的XML,您可以使用DOMDocument和DOMXpath。另外XSL會想到一些預先運行的轉換(例如,重命名元素和屬性名稱以匹配您的首選命名)。但是在完成之後,剩下的要麼是手工製作的,要麼是一些對結構有所瞭解的NLP。也許你會在IE領域找到一些可以提供更多建議的人。 – hakre

相關問題