LoginSignup
1
1

More than 5 years have passed since last update.

Excel の WEBSERVICE 関数で簡易 Entity Linking

Last updated at Posted at 2016-04-15

Excel の WEBSERVICE 関数を使って、任意のキーワードに対応する Wikipedia Japanese の URL を取得する方法を紹介します。ガチの Entity Linking は自然文を解析してコンテクストに応じたリソースを取得するような高度な処理ですが、ここで紹介するのは「セルの値をコピーして検索フォームに貼り付けて Wikipedia のリンクを探すのつかれた、なんとかして」という声にこたえることを目的としています。

WEBSERVICE 関数については前稿 Excel の WEBSERVICE 関数で外部データ取得 を参照してください。ちなみに Mac の Excel ではいまだサポートされていないようです。

1. シナリオ

以下のように A列に雑多なキーワードが並んだ Excel があります。B列に Wikipedia のへのリンクを埋めましょう。

image

2. 手順

入力

セル B1 に以下の式を入力します

キーワードからWikipediaのページ名を取得.
="https://ja.wikipedia.org/wiki/" & FILTERXML(WEBSERVICE("https://ja.wikipedia.org/w/api.php?format=xml&action=query&redirects&titles=" & ENCODEURL(A1)),"//*[not(@missing)]/@title")

うまくいくと次のように URL がフィルされます

image

コピー

B1B2~B19 にコピーすると以下のようにフィルされるはずです

image

確認と手直し

フィルされた URL をそれぞれ確認しましょう。たこドラクエ など、気になるものがありますね。

該当するページが存在しな場合には #VALUE! が表示されます。

またこの方法だとリンク先が 曖昧さ回避ページ であるかどうかまではわからないので、念のため個別に確認するのがいいです。

3. 解説

ここで紹介した方法は MediaWiki API:Query を使って、結果の XML から URL を作る、というものです。

具体的には以下のようなリクエストに対して

以下のような XML 出力が得られます。

response.xml
<?xml version="1.0"?>
<api batchcomplete="">
  <query>
    <redirects>
      <r from="なす" to="ナス" />
    </redirects>
    <pages>
      <page _idx="1211" pageid="1211" ns="0" title="ナス" /> 
    </pages>
  </query>
</api>

ここに //@title という XPath を適用することで、Wiki のページタイトルを取得しています。で、https://ja.dbpedia.org/wiki/ をアタマにつけて URL 化。

なお、リンク先のページがない場合には以下のように page 要素に missing 属性が付与されているので区別することができます。このような XML に対して //*[not(missing)]/@title という XPath を適用することで、missing 属性がついた要素は選択されない= EXCEL 関数上ではエラーとなる、という挙動を実現しています。

missing.xml
<?xml version="1.0"?>
<api batchcomplete="">
  <query>
    <pages>
      <page _idx="-1" ns="0" title="該当なし" missing="" />
    </pages>
  </query>
</api>

なお、ここ紹介した方法は単純な文字列連結で URL を作っていますが、空白をアンダースコアに変換したり、 URL エンコードをしたりなど、用途に応じて必要な処理を追加するといいでしょう。

4. まとめ

  • Wikipedia の API と Excel の WEBSERVICE 関数を使って、キーワードに対応する Wikipage を取得する方法を紹介しました
  • https://ja.dbpedia.org/wiki/ のかわりに http://ja.dbpedia.org/resource/ を使うとより LOD/EntityLinking としては好ましいですがそれはまた別の機会に
  • もっと高度な EntityLinking をお求めの方は http://openrefine.org/ などをどうぞ
1
1
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
1
1