Wikidataにある日本語ラベル数のカウントができなくなってしまった話
一昨年かその前の年だと思いますが、日本語ラベルがついたものがいくつあるかをカウントするために、
select (count(*) as ?item) where { ?item rdfs:label ?l. Filter(lang(?l) = 'ja') }
というクエリで素直にカウントできていたように思います。
残念ながら結果を残せていないのですが、当時はjawpの記事数にちょっと盛ったぐらいで200万件なかった記憶があります。
こういうプロジェクトではレコード数が増えるに応じてitem間の関連が爆発的に増えていくため、サーバのスベックが変わらない限り徐々にできることが減っていくのは予想の範囲内なのですが、どうやら既に普通の方法ではカウントできなくなっていたようです。昨年タイムアウトが短くなった時に試しておけばよかったです。。
今日試したところ、上記のクエリではlimitをつけても100000までカウントできませんでした。
また、
select (count(*) as ?item) where{ select ?item where { ?item rdfs:label ?l. Filter(lang(?l) = 'ja') MINUS{ ?article schema:about ?item ; schema:isPartOf <https://ja.wikipedia.org/> . } } limit 10000 }
こんな感じでjawpの数との差分を取るのもタイムアウトしてしまいました。
今実装されているクエリ・サービスでのクエリの最適化は、あまり性能が良くないようなので、裏技的にやる方法はあるのではないかと思ったりはしています。
しかし裏技的に頑張ってできてもスケールしないため、何か上手にカウントする方法ご存知の方は教えてください。(主に)わたしが喜びます。