4

特定の記事が人、組織、または場所を参照しているかどうかを判断する方法があるかどうかを調べようとしています。答えは「categories」および「clcategories」パラメーターのどこかにあると思いますが、ここに問題があります。

アルバート・アインシュタインを例にとってみましょう。クエリの結果:

https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=categories&clcategories=Category:People%20from%20Berlin

...実際、アルバート アインシュタインは「ベルリン出身の人物」というカテゴリのメンバーであることを示してください。

同様に、ウィキペディアのカテゴリ ツリーをブラウズするだけで、次のパスを介して、「ベルリン出身の人」がカテゴリ「人」のサブカテゴリであることを示すことができます。

People > People_categories_by_parameter > People by place > People by city > People by country and city > People by city in Germany > People from Berlin

ただし、Albert Einstein は (直接) カテゴリ "People" のメンバーではないため、次のクエリは次のようになります。

https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=categories&clcategories=Category:人

...カテゴリの下に結果がありません。つまり、一致しません。

カテゴリ X が特定のカテゴリ Y の子孫である場合、ページが任意のカテゴリ X のメンバーであるかどうかを確認する方法はありますか?

ありがとう!

4

2 に答える 2

2

これを行うためのウィキペディア API の方法はわかりませんが、Freebase の方法は考えられます。次の freebase クエリは、特定のウィキペディアの記事に関連付けられている Freebase の「タイプ」を取得します。「人」、「政治家」、「アーティスト」、「場所」などは、これらのタイプからすべて簡単に認識できます。

{
  "key": [{
    "namespace": "/wikipedia/en",
    "value": "William_Ambrose"
  }],
  "type": []
}

en(もちろん、実際のウィキペディアの言語と、ウィキペディアの記事名に置き換えて"William_Amrose"ください。ただし、エスケープに関する以下のメモを参照してください!)

この場合の結果は次のとおりです。

{
  "result": {
    "type": [
      "/common/topic",
      "/people/person",
      "/people/deceased_person",
      "/government/politician"
    ],
    "key": [{
      "namespace": "/wikipedia/en",
      "value": "William_Ambrose"
    }]
  }
}

...これは明らかに「人」と「政治家」を意味します (また、「故人」でもありますが、それは別の問題です)。

API の仕組みに関するメモと REST の例については、ウィキペディアのリンク リンクを取得するための私の回答を参照してください。特に、Google から API キーを取得するための注意事項と、文字列を Freebase でエスケープするための注意事項をよく見てください。

幸運を。

于 2013-09-17T11:37:20.590 に答える