色んなサイトのTF-IDFを調べてみた（APIも公開したよ）

## はじめに
最近使っているスクレイピングのライブラリ[Jsoup](https://jsoup.org/)と形態素解析器[kuromoji](http://www.atilika.org/)を使って色んなサイトのTF-IDFを調べてみました。DF (Document Frequency) は日本語Wikipediaの記事をDocumentと見なしました。kuromojiにはipadic+Neologdを辞書として用いています。

## とにかくやってみる
### Qiitaの場合
まずは本日（2016/12/26 18:30）の[Qiitaのランキング](http://qiita.com/popular-items)上位3件の記事を調べてみましょう。

1位：[いまさら聞けないLinuxとメモリの基礎＆vmstatの詳しい使い方](http://qiita.com/kunihirotanaka/items/70d43d48757aea79de2d)
メモリやキャッシュ、更にはLinuxのコマンドやPC用語が含まれていますね。

| 単語 | TF-IDF値 |
|:-----------------|:------------------|
| キャッシュ | 309.65258288522097 |
| DD | 246.24922429864893 |
| メモリ | 209.22722419151629 |
| MB | 168.1702019600529 |
| HDD | 156.15804467719198 |
| BO | 132.13373011147013 |
| BS | 132.13373011147013 |
| WA | 132.13373011147013 |
| CPU | 132.13373011147013 |
| BUFF | 120.1215728286092 |

2位：[Retty流『2200万ユーザを支える機械学習基盤』の作り方](http://qiita.com/taru0216/items/dda1f9f11397f811e98a)
「機械学習」「GPU」「Docker」「AWS」など、機械学習基盤っぽい用語が出てきますね！

| 単語 | TF-IDF値 |
|:-----------------|:------------------|
| Retty | 684.6929651230727 |
| 機械学習 | 612.9046715858269 |
| HTTPS | 432.4376621829933 |
| GPU | 420.42550490013235 |
| Docker | 306.31001071295356 |
| 基盤 | 216.15264808371847 |
| Qiita | 192.19451652577476 |
| AWS | 186.1884378843443 |
| PNG | 156.15804467719198 |
| Secret | 144.14588739433106 |

3位：[初心者がchainerで線画着色してみた。わりとできた。](http://qiita.com/taizan/items/cf77fd37ec3a0bef5d9d)
記事に含まれるプログラムコードの用語が出てしまってますね。「デイ・シイ」は実際は「DC」で、これもプログラムの用語です。

| 単語 | TF-IDF値 |
|:-----------------|:------------------|
| 2D | 306.31001071295356 |
| test | 268.5932355319406 |
| BND | 192.19451652577476 |
| デイ・シイ | 153.66267708078513 |
| 線画 | 140.24967520586745 |
| Qiita | 138.1398087529006 |
| Amazon | 114.11549418717874 |
| HTTPS | 102.10333690431781 |
| AWS | 102.10333690431781 |
| IMAGE | 102.10333690431781 |

### Wikipediaの場合
「Wikipedia」でぐぐったらWikipediaと東京喰種のwikiページが最初にヒットしたので、この2例を調べてみましょう。

[ウィキペディア](https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2)
「ヌーペディア」はWikipediaの前身らしいです。「ザンガー」と「ウェールズ」は創始者です。なかなかいい感じですね。

| 単語 | TF-IDF値 |
|:-----------------|:------------------|
| 274301 Wikipedia | 702.711201047364 |
| Wikipedia | 144.14588739433106 |
| プロジェクト | 78.13092808858966 |
| 記事 | 72.39311150747272 |
| ヌーペディア | 62.735128692561766 |
| Wiki | 60.06078641430457 |
| サンガー | 58.79578216133566 |
| Wikimedia | 54.05470777287412 |
| ウィキメディア財団 | 49.42546256406893 |
| ウェールズ | 48.657891781625956 |

[東京喰種トーキョーグール](https://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E5%96%B0%E7%A8%AE%E3%83%88%E3%83%BC%E3%82%AD%E3%83%A7%E3%83%BC%E3%82%B0%E3%83%BC%E3%83%AB)
「隻眼」「アオギリ」「リゼ」「和修」など東京喰種の特徴を捉えていますね。

| 単語 | TF-IDF値 |
|:-----------------|:------------------|
| 東京喰種トーキョーグール | 214.63517540942794 |
| 隻眼 | 41.69656394780747 |
| アオギリ | 40.56688634785545 |
| トーキョーグール | 36.126864209913414 |
| JUMP | 36.03647184858275 |
| Loveit! | 36.03647184858275 |
| リゼ | 34.125727615489716 |
| 和修 | 30.96588360849721 |
| TVアニメ | 30.030393207152294 |
| 東京喰種トーキョーグール√A | 30.030393207152294 |

## アルゴリズム
細かいアルゴリズムは[こちら](http://blog.apitore.com/2016/12/26/api-text2label-tfidf/)をご覧ください。ざっと解説すると、入力文を[kuromoji-ipadic-Neologd](https://apitore.com/store/apis/details?id=7)で形態素解析し、名詞、動詞、形容詞、未知語のみを代表語の候補とします。いくつかストップ品詞細分類とストップワードを設定しています。続いて、代表語の候補に対して[TFIDF](https://ja.wikipedia.org/wiki/Tf-idf)を計算します。DFはWikipediaから算出した[こちら](https://apitore.com/store/apis/details?id=16)のAPIを使いました。

## 関連情報
APIを公開しています。無料なので興味があればお試しください。

- 形態素解析（kuromoji-ipadic-Neologd）
 - [API](https://apitore.com/store/apis/details?id=7)
 - [技術解説](http://blog.apitore.com/2016/07/11/kuromoji-ipadic-neologd-webapi/)
- スクレイピング（URL2TEXT）
 - [API](https://apitore.com/store/apis/details?id=13)
 - [技術解説](http://blog.apitore.com/2016/12/15/api-url-to-html/)
- 単文分割
 - [API](https://apitore.com/store/apis/details?id=17)
 - [技術解説](http://blog.apitore.com/2016/12/25/api-sentence-separator/)
- Document Frequency（日本語Wikipedia）
 - [API](https://apitore.com/store/apis/details?id=16)
 - [技術解説](http://blog.apitore.com/2016/12/25/api-document-frequency/)
- TEXT2LABEL（TF-IDF）
 - [API](https://apitore.com/store/apis/details?id=18)
 - [技術解説](http://blog.apitore.com/2016/12/26/api-text2label-tfidf/)
- URL2LABEL（TF-IDF）
 - [API](https://apitore.com/store/apis/details?id=20)
 - [技術解説](http://blog.apitore.com/2016/12/26/api-url2label-tfidf/)

## おわりに
TF-IDFは非常に初歩的な技術ですが、案外有用ですね。たくさん貯めたブクマ（あとで参考にしようと思ったり、すごく参考になったから保存したものを整理せずに放置してた）があるので、この機会に今回の技術を使って整理してみます。URLだけじゃなく文書とかにも使えるので、なかなか便利です。