LoginSignup
0
0

More than 1 year has passed since last update.

Wikidumpのハイパーグラフでの分析(導入編)

Last updated at Posted at 2022-11-06

はじめに

本記事は、ハイパーグラフの考え方をSQLで実現し・操作することを目的に記載しています。まずは、簡単な検索ができるところまで記載します。

ハイパーグラフについての情報は、Google検索しても多くは出てきません。Qiitaでも記事が一つあるだけです。Amazonで検索したところ、和書では壊滅、洋書でも多くはありませんでした。Wikipediaに記事があるようです。

ハイパーグラフ(Wikipedia)を読むと、ハイパーグラフは、グラフ理論を一般化したものらしく、集合論の用語を利用しているとのことです。

私が注目したのは、集合論だったら「SQLで操作できるのではないか」と考えました。

グラフ構造をライブラリで操作するのは、Python製ではNetworkXが有名と思います。データベースとしてはNeo4jが有名です。Neo4jだと独自のクエリ言語(CypherQL)を覚える必要があるという点で、少々の学習コストがかかってしまいます。

なお、SQLで扱うだけなら、ミック氏の書籍で「入れ子集合モデル」等が紹介されています。本記事では、PostgreSQLの配列型を用います。どちらがいいかは評価していません。
PostgreSQLを選んだのは筆者が得意という理由だけです。

データ

利用するデータです。
ノード(内容:コンテンツのタイトル、形式:csv、サイズ:5.3M)
エッジ(内容:コンテンツのタグ、形式:csv、サイズ:158M)

Wikidumpをベースに作成しています。本書執筆者が運用しているサイトで公開しています。無断で商用利用等は構いません。突如、停止したり、消したり、場所を変えたりするかもしれません。

ノードは、Wikipedia記事のタイトルです。

エッジは、Wikipedia記事に含んでいる、他のWikipedia記事へのリンクのアンカーです。

インポート

以下のようなテーブルを作成します。

ddl.sql
CREATE TABLE t_wh_contents_title (
    id INTEGER
    , title TEXT
    , PRIMARY KEY(id)
);

CREATE TABLE t_wh_contents_tags (
    id INTEGER
    , tags TEXT[]
    , PRIMARY KEY(id)
);
CREATE INDEX ON t_wh_contents_tags USING GIN (tags);

t_wh_contents_titleにノードのCSVを、t_wh_contents_tagsにエッジのCSVをインポートします。

本旨とは関係ないですが、GINインデックスは、Generalized Inverted Indexの略で汎用転置インデックス、と訳されています。情報検索の世界で多用します。

検索

簡単な検索を行います。私が好きな俳優の「妻夫木聡」さんと女優の「黒木華」さんをキーに検索します。このお二人をエッジとして検索します。

SELECT id, title
FROM t_wh_contents_title
    LEFT JOIN t_wh_contents_tags USING(id)
WHERE 
    ARRAY['妻夫木聡', '黒木華'] <@ tags
;

「<@」は、配列演算子の一つです。

USINGはPostgreSQL独自だったと記憶していますが、idで連結しているだけです。

なお、検索結果は以下のようなものになります。

id	title
8147	日本アカデミー賞
8148	ブルーリボン賞 (映画)
44503	山田洋次
107510	金曜ドラマ (TBS)
132490	鶴瓶のスジナシ!
235262	おしゃれイズム
421938	世にも奇妙な物語の放映作品一覧
1986518	あさイチ
2032970	北九州市
2385792	小野寺修二
3493509	第29回東京国際映画祭
3539652	第40回日本アカデミー賞
3763518	ぼぎわんが、来る
4060860	日本のテレビドラマ一覧 (2020年代)
4238953	2021年のテレビドラマ (日本)
4290679	第44回日本アカデミー賞
171948	キネマ旬報
569632	高崎映画祭
740989	ドラマW
862307	エランドール賞
1177970	ヨコハマ映画祭
1747566	A-Studio
1858052	オールナイトニッポンGOLD
1934058	ザテレビジョンドラマアカデミー賞
2913853	第37回日本アカデミー賞
2944911	櫻井・有吉 THE夜会
3211234	バナナマンのせっかくグルメ!!
3395793	2016年のテレビドラマ (日本)
3740167	GALAC
4040477	浅田家!
67309	サントリー
417883	日本映画プロフェッショナル大賞
541839	日刊スポーツ映画大賞・石原裕次郎賞
659548	TAMA CINEMA FORUM
1360378	埼玉県を舞台とした作品一覧
1498861	しゃべくり007
1970520	日本のテレビドラマ一覧 (2010年代)
2868848	小さいおうち
3733730	Template:エランドール賞新人賞
4010370	第71回毎日映画コンクール
4020798	2020年のテレビドラマ (日本)
0
0
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
0
0