LoginSignup
5
2

More than 3 years have passed since last update.

wikidata を情報源として、SPARQL 経由で会社名から子会社名一覧を取得した

Last updated at Posted at 2021-04-11

概要

  • やりたかったことはタイトルの通り
  • wikidata では、記事を識別するのに「単語」ではなくQやPから始まるID(entity ID)を利用しているため、その考慮が必要であった
    • wikidata においては、「トヨタ自動車」みたいな文字列は Label などに相当する
    • 「トヨタ自動車」のentity IDQ53268
  • 企業名の表記ゆれも吸収してあげる必要があった
    • 「トヨタ自動車」のラベルはあるが、「トヨタ」のラベルは無い
    • でも、「トヨタ」で問い合わせても子会社一覧を取得できてほしい
    • 例えば、「トヨタ自動車」に対して、wikidata 上の表記ゆれ情報(aliasalos known as)には、以下の通りで「トヨタ」も含まれている image.png
  • 言語(language)の情報もしっかり与えないとうまく結果表示されなかったので注意
  • それらを考慮して得られたのが以下の結果とクエリ image.png
    • ここ から以下のクエリ相当がどなたでもブラウザ経由で実行できます
      • 「トヨタ自動車」を「トヨタ」に変えても結果が得られます
      • というか、「富士通」などに変えてもうまくいきます
SELECT  ?itemLabel ?subitem ?subitemLabel ?subitemAltLabel ?itemDescription WHERE {
  ?item wdt:P31 wd:Q4830453.
  ?item  skos:altLabel ?altabel .
  ?item rdfs:label  ?label .
  FILTER(?label = "トヨタ自動車"@ja || ?altabel = "トヨタ自動車"@ja )
  ?subitem wdt:P31 wd:Q4830453.
  ?subitem wdt:P749 ?item
  SERVICE wikibase:label { bd:serviceParam wikibase:language "ja,en". }
}
LIMIT 100

詳細

事前知識

wikidata 周りに関する基本中の基本情報のみ

wikidata について

SPARQL について

  • RDFクエリ言語の1つ
    • クエリ言語なので、SQLのように、何かしらのデータ集合から特定のデータ(集合)を検索するためのものである
    • 上で述べたように、抽象的な問い合わせを作ることができる
    • RDFについては後述するが、RDFのクエリ言語であるため、クエリの形もRDFの性質に則してる
  • Prolog 触ったことある人なら、似た印象を感じるかも
  • Python などから実行できるライブラリもいくつかあるぽい

RDF について

  • 主語、述語、目的語の形でリソースに関する情報を表す枠組み
  • W3Cによって、規格化されている
  • もともとは、セマンティックwebのための規格であったが、知識ベースを操るうえでも基本的な枠組みとしてよく採用されている感じがする

WikidataQueryService(WQS)について

  • ブラウザからwikidataへのSPARQLクエリを誰でも手軽に試せるやつ
  • 例題も豊富
  • 画像とかグラフとかのUIもあってマジすごい
  • クエリによっては、timeout になりがちなので、その場合は limit を入れると結果を(限定的かもしれないけど)得られるのでお試しを
  • URLにSPARQLのクエリが埋め込まれるので、自分が作ったクエリはURLでやり取りができて便利

試行錯誤の記録

後で書く

考察

  • PythonコードからSPARQLを呼び出すライブラリなどを用いて、企業名を自由変数としてクエリ文字列に埋め込んで Python コードとして実行するともっと柔軟になりそう
    • その際には、en OR ja も一緒に与えたほうが良さそう
  • 今回、子会社を抽出するのに、 wdt:P749(上部組織) の述語を用いたが、ここは別の述語を試してそれとのORを取るほうがいいかも
    • 資本提携とか、そういう関係で定義されている子会社的企業もありそうなので
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2