LoginSignup
15
14

More than 5 years have passed since last update.

NHK番組LODでSPARQLを書いてみる

Posted at

これは SPARQL Advent Calendar 2015 23日目の記事です。
普段は生命情報系のRDFを対象にSPARQLを叩いていますが、折角なのでこれまで触ったことがないデータを対象にSPARQLを投げてみようということで、今年11月に試験提供が開始されたNHK番組LODを選びました。

SPARQLのやさしい解説はしていませんので、よくわからない方はSPARQL本を是非ご参照ください!(宣伝)

NHK番組LODとは

NHK番組LODは、番組放送データの新しい活用方法の調査・研究を目的として、ひとまずLODチャレンジJapan2015用に期間限定(2015年11月12日~2016年7月18日)で提供されているデータのようです。

利用方法 | データ仕様 | SPARQLサンプル

ドキュメントを読んだりちょっと触ればわかりますが、ざっくり特徴をまとめると以下のような感じです。

  • WebAPIでデータ取得でき、リクエストURLにSPARQLを埋め込める
  • API利用には事前にAPIキーの取得が必要
  • DBpediaのSPARQLエンドポイントようなGUIは用意されていない
  • API成功時のレスポンスはSPARQLの仕様に準拠したフォーマットが採用されている
  • クロスドメイン通信は許可されていない(javascript(ajax)では利用出来ない)
  • 放送予定の番組データが提供されている(だいたい2〜3日分ぐらい?原則毎日更新)
  • 放送局(東京,帯広,沖縄...)毎の放送データが提供されている

SPARQL例

サンプル1:ある放送局の放送予定番組一覧を取得する

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>

SELECT ?start_time ?service_name ?title
{
  ?program
    rdf:type nhklod:Program ;
    nhklod:title ?title ;
    nhklod:start_time ?start_time ;
    nhklod:area ?areaIRI ;
    nhklod:service ?serviceIRI .
   ?areaIRI nhklod:area_name "神戸"^^xsd:string .
  ?serviceIRI nhklod:service_name ?service_name .
  FILTER ( STR(?service_name) IN ("NHK総合1", "NHKEテレ1") )
}
ORDER BY ?start_time

上記のSPARQLは神戸放送局の"NHK総合1"または"NHKEテレ1"チャンネルでの放送予定(リアルタイムではない)の番組一覧を取得しています。読みやすいように"神戸"と書いていますが、実際には?areaIRIを直接エリアコード(データ仕様)で指定する方がシンプルなクエリになります。
nhklod:area nhklod-area:280 ;
また、データ仕様のチャンネル名は全角半角が実際のデータと異なっていますのでご注意ください(指摘中)。

結果(jsonをテーブル形式にしたもの)

start_time service_name title
2015-12-23T01:40:00+09:00 NHKEテレ1 放送休止
2015-12-23T04:10:00+09:00 NHK総合1 NHKプレマップ「おやすみ日本 眠いいね!」29(火)夜11:25から
・・・・ ・・ ・・・・

情報提供:NHK

サンプル2:番組内容をテキスト検索する

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>

SELECT ?start_time ?service_name ?title ?content
{
  ?program
    rdf:type nhklod:Program ;
    nhklod:title ?title ;
    nhklod:content ?content ;
    nhklod:start_time ?start_time ;
    nhklod:area ?areaIRI ;
    nhklod:service/nhklod:service_name ?service_name .
   ?areaIRI nhklod:area_name "神戸"^^xsd:string .
   FILTER (REGEX (?content, "ディーン") && REGEX (?content, "フジオカ") ) 
}
ORDER BY ?start_time

上記のクエリは番組内容のテキストから"ディーン"及び"フジオカ"が含まれる番組リストを取得しています。これで、ディーン・フジオカがいっぱい出てきそうな日だけ朝ドラを観る、なんてことも可能だーーー!!(つべこべ言わず毎日観ましょう)

結果(jsonをテーブル形式にしたもの)

start_time service_name title content
2015-12-23T07:30:00+09:00 NHKBSプレミアム 連続テレビ小説 あさが来た(75)「東京物語」 あさ(波瑠)とうめ(友近)は、東京の五代友厚(ディーン・フジオカ)の事務所を訪れる。そこに現れたのは、政府の要人で内務卿を務める大久保利通(柏原収史)であった。あさは、三人でこれからの日本について語る。居眠りしていたうめが目を覚ますと、その様子に驚いて…。改めて大阪のためにがんばろうと思う、あさ。一方、大阪の新次郎(玉木宏)は千代の世話をしながらあさのことを心配に思って…。
2015-12-23T07:30:00+09:00 NHKBSプレミアム(104ch) 連続テレビ小説 あさが来た(75)「東京物語」 あさ(波瑠)とうめ(友近)は、東京の五代友厚(ディーン・フジオカ)の事務所を訪れる。そこに現れたのは、政府の要人で内務卿を務める大久保利通(柏原収史)であった。あさは、三人でこれからの日本について語る。居眠りしていたうめが目を覚ますと、その様子に驚いて…。改めて大阪のためにがんばろうと思う、あさ。一方、大阪の新次郎(玉木宏)は千代の世話をしながらあさのことを心配に思って…。
・・・・ ・・ ・・・・ ・・・・

情報提供:NHK

サンプル3:2つの放送局の片方でしかやってない番組を調べる

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX nhklod: <http://lod2015.nhk.jp/nhklod/>
PREFIX nhklod-area: <http://lod2015.nhk.jp/nhklod/area/>
PREFIX nhklod-service: <http://lod2015.nhk.jp/nhklod/service/>
PREFIX nhklod-genre: <http://lod2015.nhk.jp/nhklod/genre/>

SELECT DISTINCT ?title ?genre
WHERE {
  ?program_area1 rdf:type nhklod:Program ;
    nhklod:title ?title ;
    nhklod:area nhklod-area:270 .
  MINUS
  {
    ?program_area2 rdf:type nhklod:Program ;
      nhklod:title ?title ;
      nhklod:area nhklod-area:130 .
  }
  ?program_area1 nhklod:genre/nhklod:genre_name ?genre
}

ちょっとマニアックなクエリですが、大阪(270)で放送されているが、東京(130)では放送されていない番組をピックアップしています。
どうせ関西だしお笑い番組でも映しとけ、みたいな結果を期待していましたが、そこまで大きな番組の違いはありませんでした。画一放送、さすが公共放送の鑑ですね(?)。

結果(jsonをテーブル形式にしたもの)

title genre
関西のニュース・気象情報 定時・総合
関西の気象情報 天気
関西のニュース・気象情報 天気
関西のニュース ローカル・地域
関西845~関西のニュースと気象情報~ ローカル・地域
ニュースほっと関西▽デスクが“斬る”3来年の政治展望▽あさが来たで大にぎわい! ローカル・地域
おはよう関西 ▼“遊び”で社員育成!技術とアイディア磨く ローカル・地域
平成27年度 NHK新人お笑い大賞~堺市立美原文化会館から中継~ 芸能・ワイドショー
助けて!きわめびと「“笑顔”の写真を撮りたい」 暮らし・住まい
ぐるっと関西 おひるまえ ▽年末年始のヒストリアの秘話 暮らし・住まい
ぐるっと関西 おひるまえ ▽年末年始のヒストリアの秘話 番組紹介・お知らせ
助けて!きわめびと「“笑顔”の写真を撮りたい」 トークバラエティ
平成27年度 NHK新人お笑い大賞~堺市立美原文化会館から中継~ お笑い・コメディ
助けて!きわめびと「“笑顔”の写真を撮りたい」 ドキュメンタリー/教養

情報提供:NHK

まとめ

他のLODと繋がりそうなURIはありませんでしたが、ユースケースの一つとしては、地域的な要素、時間的な要素、番組内容に含まれる単語等で番組を探し出してユーザに通知するとかかなぁと思いました。
ご興味のある方は、是非もっと調べつくしてLODチャレンジJapan2015へご応募を!

15
14
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
15
14