Apitore blog

Apitoreを運営していた元起業家のブログ

【API】URLの自動タグ付けAPIを公開しました(TFIDF版)

はじめに

URLの中身を解析して代表語を計算するAPI、URL2Label by tfidfを公開しました。このAPIはURL2TEXT APIでスクレイピングし、TEXT2LABEL by tfidf APIで代表語を計算します。お気に入りに登録したWebサイトの分類に使ってみると面白いかもしれません。 amarec (20161225-071028)

API

サンプルコード

使ってみた

基本的なアルゴリズムについてはTEXT2LABEL by tfidfの解説記事を御覧ください。URL2TEXTでスクレイピングしたあと、TEXT2LABEL by tfidfで代表語を計算します。あと、ちょっとした工夫ですが、titleやh1などの強調目的で使われるタグ内の文章は多少重みを強くしています。 せっかくなので、TEXT2LABEL by tfidfの解説記事で使ったミーアキャットのwikipediaの記事を入力してみます。

"input": "https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%BC%E3%82%A2%E3%82%AD%E3%83%A3%E3%83%83%E3%83%88",
"num": "10",
"labels": [
  {
    "label": "ミーアキャット",
    "score": 61.96526067058136
  },
  {
    "label": "Wikipedia",
    "score": 12.012157282860917
  },
  {
    "label": "衣",
    "score": 9.314981960042228
  },
  {
    "label": "褐色",
    "score": 9.100539792010892
  },
  {
    "label": "毛",
    "score": 8.272037820828292
  },
  {
    "label": "生後",
    "score": 7.871644293159014
  },
  {
    "label": "上下",
    "score": 7.450132056768146
  },
  {
    "label": "灰白色",
    "score": 6.988390560903168
  },
  {
    "label": "属",
    "score": 6.845039327791088
  },
  {
    "label": "ヘルパー",
    "score": 6.575153905126369
  }
]

一位が「ミーアキャット」なので、ミーアキャットの記事ということはわかりますね。その他の単語はミーアキャットに関連する語のようですが、一見ではわかりませんね。続いてYahooのニュースを入力してみます。

"input": "http://headlines.yahoo.co.jp/hl?a=20161225-00000004-mai-pol",
"num": "10",
"labels": [
  {
    "label": "安倍首相",
    "score": 38.755255636038754
  },
  {
    "label": "Facebook",
    "score": 36.03647184858275
  },
  {
    "label": "真珠湾",
    "score": 35.11842760833063
  },
  {
    "label": "JavaScript",
    "score": 30.030393207152294
  },
  {
    "label": "Twitter",
    "score": 24.024314565721834
  },
  {
    "label": "J-CASTニュース",
    "score": 24.024314565721834
  },
  {
    "label": "Yahoo!",
    "score": 24.024314565721834
  },
  {
    "label": "不戦",
    "score": 23.29336200278024
  },
  {
    "label": "ハワイ",
    "score": 19.933282444681712
  },
  {
    "label": "ニュース",
    "score": 18.15774132698732
  }
]

「真珠湾」と「安倍首相」が上位なので、その手の記事なのかなと推測できます。一方で「Facebook」や「Twitter」など、URLの記事本文の内容ではなく、サイトの構成要素の悪影響が出ていますね。続いてTechCrunchを試します。

"input": "http://jp.techcrunch.com/2016/12/23/20161222autonomous-cars-seen-as-smarter-than-human-drivers/",
"num": "10",
"labels": [
  {
    "label": "自動運転車",
    "score": 73.19543803634357
  },
  {
    "label": "Uber",
    "score": 42.042550490013205
  },
  {
    "label": "2016年",
    "score": 34.66114505459981
  },
  {
    "label": "Twitter",
    "score": 30.030393207152294
  },
  {
    "label": "MORE",
    "score": 30.030393207152294
  },
  {
    "label": "Facebook",
    "score": 30.030393207152294
  },
  {
    "label": "運転者",
    "score": 28.57940975470783
  },
  {
    "label": "12月23日",
    "score": 26.666973472629632
  },
  {
    "label": "Google",
    "score": 24.024314565721834
  },
  {
    "label": "一般消費者",
    "score": 20.496774240628504
  }
]

この記事は アメリカの一般消費者の見解: 「自動運転車は人間運転者よりも優秀」 というタイトルで、代表語にその要素はありますね。一方で「Facebook」や「Twitter」がこちらでも入ってきています。最近だとSNSで拡散することはよくあることなので、こういった単語はニュースサイトだと絶対に含まれてきますね。

おわりに

URL2LABEL by tfidfを公開しました。いくつか事例を見てみると、なかなか良い精度でURLの代表語を取れています。一方で、SEO対策で色んな記事へのリンクがあったり、SNS拡散目的でTwitterやFacebookへのリンクが散見したり、サイト固有の構成があったりすると、それがタグ付けの際には悪影響を及ぼしてしまいます。このあたりをどう制御するかが課題になりそうです。作って試してみて課題は見えてきたので、精度改善に向けて工夫してみます。