OpenCalais返回链接数据的URI,而不是实际的人名

时间:2014-07-25 23:42:03

标签: php json uri opencalais

我正在使用OpenCalais语义Web服务并接收我提交的内容的“Application / JSON”响应。当我查看报价实体时,OpenCalais正在发送人员报价,但人名不是该人的姓名,而是“关联数据”URI。 例如,对于名叫Tayyip Erdogan的人:

http://d.opencalais.com/pershash-1/a7077bd6-bcc9-3419-b75e-c44e1b2eb693

我需要这个人的名字,而不是URI。 OpenCalais也在PersonCareer实体中发送URI而不是人名。我不想读取URI的html DOM并提取人名,因为它会减慢一切。有解决方案吗?

报价实体说明:http://www.opencalais.com/documentation/calais-web-service-api/api-metadata/entity-index-and-definitions#Quotation

1 个答案:

答案 0 :(得分:0)

事实证明,除了HTML之外,还有一种方法可以访问这些人的URI;那是通过解析RDF。 OpenCalais提供的链接数据资源的任何URI链接也可以用作RDF。只需将uri从.html更改为.rdf,您将以RDF格式获取该资源的所有信息。

例如,对于名叫Tayyip Erdogan的人:

http://d.opencalais.com/pershash-1/a7077bd6-bcc9-3419-b75e-c44e1b2eb693.rdf

以下代码使用file_get_dom库,您也可以使用任何本机函数来获取文件内容。这只是我用来从Web服务中检索的RDF内容中提取人名的方法。我相信你能想到更好的解决方案。

public function get_persons_from_pershash($url)
{   
    //Gets RDF of the person URI
    @$person_html = file_get_dom($url);

    if(!empty($person_html))
    {
        //Get position of name tag and extract the name
        $strpos_start = strpos($person_html, '<c:name>') + 8;
        $strpos_end = strpos($person_html, '</c:name>');
        $str_name_length = $strpos_end - $strpos_start;
        $extracted_name = trim(substr($person_html, $strpos_start, $str_name_length));

        return $extracted_name;
    }
    return '';      
}

当您将URL更改为.rdf时,系统将提示您保存rdf文件。

我想以编程方式解析它,所以我这样做!

希望有人觉得这很有用!

干杯!