2014-07-25 52 views
0

我正在使用OpenCalais語義Web服務並接收對我提交的內容的「應用程序/ JSON」響應。當我查看引用實體時,OpenCalais正在發送人員引用,但人員名稱不是人員的名稱,而是「關聯數據」URI。 例如,對於一個名爲·塔伊普·埃爾多安人:OpenCalais會爲關聯數據返回人員URI而不是實際人員名稱

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

回答

0

事實證明,有訪問這些人的途徑URI的HTML以外;那就是通過解析RDF。任何由OpenCalais提供的鏈接數據資源的URI鏈接也可以用作RDF。只需將.html中的uri更改爲.rdf,即可獲得RDF格式的所有資源信息。

例如,對於一個名爲·塔伊普·埃爾多安人:

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文件。

我想以編程方式解析它,所以我這樣做!

希望有人認爲這有幫助!

乾杯!

相關問題