比较来自两个不同格式的xml提要的数据


Comparing data from two differently formatted xml feeds

我得到了这两个提要(在生产中会有更多),它们都是关于一个活动的门票价格的——这两个提要的格式不同,但本质上显示的信息是相同的。

我想做的是比较价格属性并找到最低的价格,我知道如何比较实际价格

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

但是我很难弄明白的是如何确保我比较相同的事件价格,因为它们来自不同格式的提要。

ie。我如何比较伦敦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>

您正在寻找的东西叫做信息提取 (IE)。这通常是用自然语言处理(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"

正如你可以想象的那样,你将获得的每个新feed都有不同。如果您预先分析了数据结构(例如以及哪些属性属于彼此),那么您可以对这些值运行文本分析并进行相似性分析。

此外,如果有常见的同义词,如摊位座位(反之亦然),你可以减少复杂性的前期。
[feed 1] -- streamline --> [sfeed 1]'                   / [combined feed]
                     ...             X compare / align X
[feed N] -- streamline --> [sfeed N]/                   ' [unknown data]