4

ウィキペディアのインフォボックスからデータをハッシュなどに取得して、RubyonRailsプログラムで使用できるようにしようとしています。具体的には、インフォボックス会社インフォボックス担当者に興味があります。私が使っている例は「フォードモーターカンパニー」です。そのための会社情報と、フォードの会社ボックスでリンクされている人の個人情報を取得したいと思います。

Wikipedia APIまたはDBPediaからこれを行う方法を見つけようとしましたが、あまり運がありませんでした。ウィキペディアがルビーで解析できるjsonとしていくつかのものを返すことができることは知っていますが、インフォボックスを取得する方法を理解できていません。DBPediaの場合、FordMotorCompanyの情報を取得するためにDBPediaにクエリを実行する方法に迷っています。

4

4 に答える 4

8

私は DBpedia に投票します。

簡単な説明は次のとおりです。

dbpedia の命名スキームはhttp://dbpedia.org/resource/WikipediaArticleName (一意の識別子) で、スペースは に置き換えられ_ます。

http://dbpedia.org/page/ArticleName (html プレビュー) とhttp://dbpedia.org/data/ArticleName(.json/.jsod)は、必要な記事に関する情報の JSON 表現です。(.rdf などは、今は混乱しているかもしれません。)

Ford Motor Company については、次のことを尋ねてください。

http://dbpedia.org/data/Ford_Motor_Company.json

また:

http://dbpedia.org/data/Ford_Motor_Company.jsod

(あなたにとってどちらが簡単か)

現在、記事の種類、人、または会社に応じて、dbpedia オントロジー ( http://wiki.dbpedia.org/Ontology ) に依存するそれらを定義するさまざまなプロパティがあります。

より高度な手順として、SPARQL クエリを使用してデータを取得することができます。

于 2011-01-12T17:49:22.787 に答える
1

彼らの API を見てみると、詳細がたくさんあるように見えますが、その複雑さがハードルになっています。長期的な使用のためには、それを理解するのが最善ですが、迅速かつ汚いために、ここにデータを取得する方法があります.

XML/HTML パーサーであり、非常に柔軟なNokogiriを使用しています。使いやすさのために、CSS アクセサーを使用しています。

#!/usr/bin/env ruby

require 'open-uri'
require 'nokogiri'
require 'uri'

URL = 'http://en.wikipedia.org/wiki/Ford_Motor_Company'
doc = Nokogiri::HTML(open(URL))
infobox = doc.at('table[class="infobox vcard"]')
infobox_caption = infobox.at('caption').text

uri = URI.parse(URL)
infobox_agents = Hash[ *infobox.search('td.agent a').map{ |a| [ a.text, uri.merge(a['href']).to_s ] }.flatten ]

require 'ap'
ap infobox_caption
ap infobox_agents

出力は次のようになります。

"Ford Motor Company"
{
              "Henry Ford" => "http://en.wikipedia.org/wiki/Henry_Ford",
    "William C. Ford, Jr." => "http://en.wikipedia.org/wiki/William_Clay_Ford,_Jr.",
      "Executive Chairman" => "http://en.wikipedia.org/wiki/Chairman",
        "Alan R. Mulally" => "http://en.wikipedia.org/wiki/Alan_Mulally",
              "President" => "http://en.wikipedia.org/wiki/President",
                    "CEO" => "http://en.wikipedia.org/wiki/Chief_executive_officer"
}

そのため、キャプションのテキストが取得され、人々の名前のハッシュが返されます。キーは名前で、値は URL です。

于 2010-12-28T04:11:05.503 に答える
1

HTML を RegExp で解析しようとしないでください。

参照: XHTML 自己完結型タグを除く RegEx マッチ オープン タグ

xpath などを使用します。

于 2010-12-28T03:23:54.373 に答える
0

を使用open-uriして 1 つの Wiki ページの HTML コードをダウンロードし、正規表現で解釈できます。見て:

require 'open-uri'
infobox = {}
open('http://en.wikipedia.org/wiki/Wikipedia') do |page|
  page.read.scan(/<th scope="row" style="text-align:left;">(.*?)<\/th>.<td class="" style="">(.*?)<\/td>/m) do |key, value|
    infobox[key.gsub(/<.*?>/, '').strip] = value.gsub(/<.*?>/, '').strip # Removes tags (as hyperlink)
  end
end
infobox["Slogan"]                #=> "The free encyclopedia that anyone can edit."
infobox["Available language(s)"] #=> "257 active editions (276 in total)"

より良い方法が存在するはずです。しかし、これは機能します。

于 2010-12-28T00:42:41.330 に答える