fastTextでクイズ問題のジャンル分けをやってみた

#はじめに

FacebookのfastTextでツイートやニュース記事やレシピの分類をやってる記事をいろいろ見ながら、クイズ問題のジャンル分けが自動でできるかなと思って、夏休みの自由研究でやってみました。

# 環境
- MacBook Air (11-inch, Early 2015)
- OS X El Capitan バージョン 10.11.6
- ターミナルとテキストエディタ(Atom)

# Python, MeCab, fastTextのインストール
- python3
 - 以下の記事を参考にHomebrewとpyenvでpython3.6.6環境にした。
 - [MacOSとHomebrewとpyenvで快適python環境を。](https://qiita.com/crankcube@github/items/15f06b32ec56736fc43a)
- MeCab
 - 以下の記事を参考にmecab, mecab-ipadic, mecab-pythonをインストール（mecab-ipadic-NEologd は未導入）
  - [Python3からMeCabを使う](https://qiita.com/taroc/items/b9afd914432da08dafc8)
- fastText
 - fastTextのgithubに書かれてる以下の方法でインストール
(https://github.com/facebookresearch/fastText#building-fasttext-for-python)

```
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ pip install .
```

以下のようにpipで直接インストールすると、importの仕方や使えるメソッドが違うので注意（というかハマった）
参考：[Is different between fasttext and fastText in python?](https://github.com/facebookresearch/fastText/issues/497)

```
$ pip install fasttext
```

# 分類までの流れ

1. 学習データの準備
    1. HTMLのダウンロード 
    2. HTMLから必要なテキストを抽出
    3. MeCabで分かち書き
    4. 分類ラベルを付与
    5. 学習データと検証データを仕分け（サンプリング）
2. 学習（モデルの作成）
3. 分類（モデルの使用）

## 1. 学習データの準備

クイズのジャンルと問題が揃っているものとして、今回は有志の方が公開してくださっている『クイズマジックアカデミー』のジャンルと問題を使わせていただきました。
[QMA THE WORLD EVOLVE問題集](http://lumely.org/qma/)

以下、学習データの準備に関するソースコードは上記サイト固有のロジックを多く含みます。

### 1-1. HTMLのダウンロード

元サイトのHTMLファイルをダウンロード＆保存。
ダウンロードにはPythonのHTTPライブラリ`Requests`を使いました。
参考：[Requests の使い方 (Python Library)](https://qiita.com/sqrtxx/items/49beaa3795925e7de666)

```python:download_qma.py
import requests
import os
import sys

baseurl = 'http://lumely.org/qma/'

genre = ['anime_game', 'sport', 'entertainment', 'lifestyle',
         'society', 'literature', 'science']

rule = ['true_or_false', 'four', 'associate', 'sort', 'panel',
        'slot', 'type', 'effect', 'cube', 'order',
        'line', 'multi', 'group']

for g in genre:
    for r in rule:
        filename = g + '-' + r + '.html'
        download_url = baseurl + g + '/' + r + '/'
        page = requests.get(download_url, timeout=10)
        with open(filename, 'wb') as fout:
            fout.write(page.content)
            print (filename + ' is saved.')
```

### 1-2. HTMLから必要なテキストを抽出

今回はHTMLの問題群から○×や正解の並び順や、並べ替え前の文字列やパネルの文字群といった情報を除外しました。元サイトの問題データがtableで整形されていたため、`<td>`内の要素をXPathでリスト抽出してから、必要な部分を取り出しました。また、残った文字列から選択肢の英数字（A.や1.）を取り除いています。

HTMLのDOM操作には [lxml](https://lxml.de/) を使いました。
参考：
- [「Requests」と「lxml」を使ってWebの情報を取得してみた](https://qiita.com/grm/items/56fe6570a5bea1ac474f)
- [Requests+lxmlでXPathを使ってみたい](https://qiita.com/kura_mod/items/7b620e6af3f78fe6f5a9)


#### 元のHTML（一部）

```
<tr>
<td>1967年に放送されたアニメ『パーマン』でのパーマンの飛行速度は時速何km？</td>
<td class="nowrap">
199<br />
91<br />
69<br />
119<br />
</td>
<td class="answer">
×<br />
○<br />
×<br />
×<br />
</td>
</tr>
```

#### 抽出後の文字列の例

```
1967年に放送されたアニメ『パーマン』でのパーマンの飛行速度は時速何km？ 199 91 69 119
```
## 1-3. MeCabで分かち書き

日本語の場合、fastTextの学習データ、検証データは分かち書きしたテキストである必要があります。
MeCabで分かち書きしたテキストのみが必要な場合、`MeCab.Tagger('-Owakati')`とすればparse(文字列)で分かち書きしたテキストだけを取得できます。

### 1-4. 分類ラベルを付与

MeCabで分かち書きしたテキストに学習用の分類ラベルを付与します。分類ラベルと分かち書きしたテキストの間は半角空白で囲まれたカンマ(` , `)で区切ります。カンマの前後の空白がないとカンマ以降の文字列がラベルの一部に使われて学習結果が意図したものにならなかったりします（しました）。

#### ラベル付与後の文字列の例

```
__label__アニメ＆ゲーム , 1967 年 に 放送 さ れ た アニメ 『 パー マン 』 で の パー マン の 飛行 速度 は 時速 何 km ？ 199 69 91 119 
```

### 1-5. 学習データと検証データを仕分け（サンプリング）

サンプリングには`random.sample(サンプリング元のリスト, サンプル数)` を使いました。
元サイトのジャンル別の問題数で最も少ないのが約1000問（スポーツ）だったので、各ジャンル1000件を学習データとして、残りを検証データとしました。
検証データは、サンプリング元のリストとサンプリングした学習データのリストの差分で作りました。

以下、１−２．から１−５．のソースです。

```python:extract.py
import lxml.html
import os
import sys
import re
import MeCab
import random

# td要素からテキスト抽出
def td2string(e):
    # 先頭と末尾の改行を削除(strip)
    # 文字列途中の改行は半角空白に置換
    str =  e.text_content().strip()
    return re.sub('\n', ' ', str)

def extract(htmlfile, rule):
    # htmlを開いてDOMを取得
    with open(htmlfile, 'r') as fin:
        dom = lxml.html.fromstring(fin.read())

    # table内の要素 <tr><td>XXX</td></tr> を取得
    elems = dom.xpath('//table[@class="qma-problems"]/tr/td/.')

    list = []
    # 形式ごとに不要な列を除外
    # [x::y] 0から数えてx番目の要素をy個置きに取得
    if rule is 'true_or_false':
        # ○×：問題文、正解○×　→　正解を除外
        question = elems[0::2]
        for q in question:
            list.append(td2string(q))
    if rule in {'four', 'associate', 'order', 'multi', 'group'}:
        # 四択：問題文、選択肢、解答○×　→　解答を削除
        # 連想：問題文、選択肢、解答○×　→　解答を削除
        # 順番あて：問題文、選択肢、順番　→　順番を削除
        # 一問多答：問題文、選択肢、解答　→　解答を削除
        # グループ分け：問題文、選択肢、解答　→　解答を削除
        question = elems[0::3]
        choices = elems[1::3]
        for q, c in zip(question, choices):
            if rule is 'group':
                qstr = re.sub('A: |B: |C: ' , '', td2string(q))
            else:
                qstr = td2string(q)
            list.append(' '.join([qstr, td2string(c)]))
    if rule in {'panel', 'sort', 'cube'}:
        # パネル：問題文、パネル文字、正解　→　パネル文字を削除
        # 並べ替え：問題文、元の文字列、正解　→　元の文字列を削除
        # キューブ：問題文、元の文字列、正解　→　元の文字列を削除
        question = elems[0::3]
        answer = elems[2::3]
        for q, a in zip(question, answer):
            list.append(' '.join([td2string(q), td2string(a)]))
    if rule is 'effect':
        # エフェクト：問題文、エフェクト、解答（ひらがな）　→　解答を削除
        question = elems[0::3]
        answer = elems[1::3]
        for q, a in zip(question, answer):
            list.append(' '.join([td2string(q), td2string(a)]))
    if rule is 'line':
        # 線結び：問題文、選択肢１、選択肢２、順番　→　順番を削除
        question = elems[0::4]
        left_choices = elems[1::4]
        right_choices = elems[2::4]
        for q, l, r in zip(question, left_choices, right_choices):
            l2 = re.sub('A. |B. |C. ' , '', td2string(l))
            r2 = re.sub('1. |2. |3. ' , '', td2string(r))
            list.append(' '.join([td2string(q), l2, r2]))
    if rule in {'slot', 'type'}:
        # スロット：問題文、正解
        # タイピング：問題文、正解
        question = elems[0::2]
        answer = elems[1::2]
        for q, a in zip(question, answer):
            list.append(' '.join([td2string(q), td2string(a)]))

    return list

if __name__ == '__main__':
    genre_list = ['anime_game', 'sport', 'entertainment', 'lifestyle',
             　　　　　　　　　'society', 'literature', 'science']
    gname_list = ['アニメ＆ゲーム', 'スポーツ', '芸能', 'ライフスタイル',
              　　　　　　　　'社会', '文系学問', '理系学問']
    rule_list = ['true_or_false', 'four', 'associate', 'sort', 'panel',
            　　　　　　　　　'slot', 'type', 'effect', 'cube', 'order',
             　　　　　　　　'line', 'multi', 'group']

    tagger = MeCab.Tagger('-Owakati')

    for genre, gname in zip(genre_list, gname_list):
        g_result = []
        label = '__label__' + gname
        for rule in rule_list:
            input_file = genre + '-' + rule + '.html'
            # htmlから問題文リストを抽出
            result = extract(input_file, rule)
            # 中間ファイルを保存
#            output_file = '__extract__' + g + '-' + r + '.txt'
#            with open(output_file, 'wt') as fout:
#                fout.write('\n'.join(result))
            # 一問ごとにラベルを付与
            for item in result:
                wakati = tagger.parse(item)
                g_result.append(' , '.join([label, wakati]))

        # 学習データをサンプリング（各ジャンル1000個ずつとする）
        g_traindata = random.sample(g_result, 1000)
        with open('__traindata__' + genre + '.txt', 'wt') as fout:
            fout.write(''.join(g_traindata))

        # テストデータは元データと学習データの差分とする
        diff = set(g_result) - set(g_traindata)
        g_testdata = list(diff)
        with open('__testdata__' + genre + '.txt', 'wt') as fout:
            fout.write(''.join(g_testdata))
```

各ジャンルごとの学習データ（`__traindata__ジャンル名.txt`と`__testdata__ジャンル名.txt`)ができるので、最後に`cat`で１つにまとめます。

```
$ cat __traindata__* > traindata.txt
$ cat __testdata_* > testdata.txt
```

## 2. 学習（モデルの作成）

fastTextのgithubにあるサンプルソースをもとにモデルを生成します。
(https://github.com/facebookresearch/fastText/blob/master/python/doc/examples/train_supervised.py)

```python:learning.py
from fastText import train_supervised
import sys
import os

def print_results(N, p, r):
    print("N\t" + str(N))
    print("P@{}\t{:.3f}".format(1, p))
    print("R@{}\t{:.3f}".format(1, r))

def main(argv):
    train_data = os.path.join(os.getenv("DATADIR", ''), argv[0])
    valid_data = os.path.join(os.getenv("DATADIR", ''), argv[1])
    model = train_supervised(
        input=train_data, epoch=1000,
        loss="hs"
    )
    print_results(*model.test(valid_data))
    model.save_model(argv[2])

if __name__ == '__main__':
    main(sys.argv[1:])
```

作成した学習データ、検証データ、出力先のモデル名（任意）を指定して`learning.py`を走らせます。

```
$ python learning.py traindata.txt testdata.txt qmamodel.bin
```

以下のように学習が行われます。Top1精度・再現率は75％程度でした（学習回数を100回と1000回にして試しましたが大差ありませんでした）。

```
$ python learning.py traindata.txt testdata.txt qmamodel.bin
Read 0M words
Number of words:  22024
Number of labels: 7
Progress:   0.6% words/sec/thread:  852287 lr:  0.099375 loss:  0.944237 ETA:
:
Progress: 100.0% words/sec/thread:  806608 lr:  0.000000 loss:  0.011095 ETA:   0h 0m
N	14752
P@1	0.758
R@1	0.758
```

## 3. 分類（モデルの使用）

出来上がった学習モデルを使って、ジャンル分けができるか試します。

１行１問のクイズ問題のテキストを入力ファイルとします。
入力ファイルを１行ずつ読み込み分かち書きを行い、分かち書きしたテキストに対して分類し、出力されるラベルとスコアをつなげたものをcsvファイルで出力します。

```python:prediction.py
import sys
import fastText as ft
import MeCab
import re

def main(argv):
    model_name = argv[0]
    classifier = ft.load_model(model_name)

    input_file = argv[1]
    with open(input_file, 'r') as fin:
        qlist = fin.readlines()

    tagger = MeCab.Tagger('-Owakati')
    output_csv = []
    for q in qlist:
        line = tagger.parse(q)
        labels, probs = classifier.predict(line.strip(), k=2)
        output = []
        for label, prob in zip(labels, probs):
            output.append(re.sub('__label__', '', label) + ':' + str(prob))
        output.append(q.strip())
        output_csv.append(','.join(output))
    output_file = argv[2]
    with open(output_file, 'wt') as fout:
        fout.write('\n'.join(output_csv))

if __name__ == '__main__':
    main(sys.argv[1:])
```

作成した学習モデル、入力テキスト（クイズ問題群）、出力するcsvファイル名（任意）を指定して`prediction.py`を走らせます。

```
$ python prediction.py qmamodel.bin sib2017-test.txt sib2017-test.csv
```

#### 分類に用いたクイズ問題３０問(`sib2017-test.txt`)

```
原康史（はら・やすし）のペンネームで『激録日本大戦争』『激録力道山』などの著作を手がけた、東京スポーツの記者から取締役編集局長を歴任した日本のスポーツ新聞記者で、テレビ東京の『アメリカンプロレス』、テレビ朝日の『ワールドプロレスリング』の解説者として1980年代のプロレスブームを盛り上げたことで知られるのは誰でしょう？	櫻井康雄（桜井康雄、さくらい・やすお）
園子温監督の映画『冷たい熱帯魚』ででんでんが演じる村田幸雄（ゆきお）のモデルとされている、シベリアン・ハスキーブームの仕掛け役、アラスカン・マラミュートの第一人者と呼ばれるなど業界では有名人であった、埼玉県熊谷市のペットショップ「アフリカケンネル」の創業者で、1993年に起きた埼玉愛犬家連続殺人事件の首謀者として元妻の風間博子とともに知られるのは誰でしょう？	関根元（せきね・げん）
作品内で凸凹コンビを演じたアンソニー・ダニエルズとは不仲であった、1977年公開の『エピソード４・新たなる希望』から2006年公開の『エピソード３・シスの復讐』まで映画『スターウォーズ』シリーズのR2-D2を演じたことで知られるイギリスの俳優は誰でしょう？	ケニー・ベイカー（Kenny Baker）
「ミスタープロ野球」といえば長嶋茂雄、「ミスターアマ野球」といえば杉浦正則（まさのり）のことですが、都市対抗野球大会において10年間で６度の優勝経験、通算本塁打と社会人ベストナイン受賞の史上最多タイ記録を持ち「ミスター社会人野球」と呼ばれた、三菱ふそう川崎とHondaでプレーした元野球選手は誰でしょう？	西郷泰之（さいごう・やすゆき）
力士時代は高見将（たかみしょう）、青雲龍（せいうんりゅう）、武蔵海（むさしうみ）の四股名を名乗り、プロレスラー時代は本名を含めて７度の改名をしている、本田多聞とのタッグ「ヘッドバッターズ」で1998年の第54代アジアタッグ王座を獲得したことや、2012年にはプロレスリング・ノアの暴露本『内側から見たノアの崩壊』を出版したことで知られるのは誰でしょう？	泉田純（いずみだ・じゅん）
1970年の大阪万博では「せんい館」の映像『スペース・プロジェクション・アコ』を制作している、記録映画の『西陣』『石の詩』や劇映画の『薔薇の葬列』『ドグラ・マグラ』のほか、多くの実験映画で知られる日本の映像作家は誰でしょう？	松本俊夫（まつもと・としお）
1952年に竹田製菓を設立しウェハースの「麦ふぁ～」やタマゴボーロをヒット商品に育て上げた日本の実業家で、経営を退いた後は100社を超える上場企業の大株主となり「日本一の個人投資家」とも呼ばれるのは誰でしょう？	竹田和平（わへい）
クロスワードパズル作りの名手であったことでも知られる、CWA・英国推理作家協会のゴールド・ダガー賞とシルバー・ダガー賞をそれぞれ２回受賞したイギリス本格派を代表する推理作家で、デビュー作の『ウッドストック行最終バス』をはじめとする『モース警部』シリーズで知られるのは誰でしょう？	コリン・デクスター（Norman Colin Dexter, OBE）
1996年にWWE殿堂入りを果たすも2015年に元恋人の殺人と過失致死容疑で逮捕されたことから記録は抹消されている、ブルーザー・ブロディとの鋼鉄野獣コンビや、ダイビングボディアタックの「スーパーフライ」で知られたフィジー出身の元プロレスラーは誰でしょう？	ジミー・スヌーカ（Jimmy Snuka）
1986年のメキシコ・ワールドカップでは得点王に輝き、日本では1993年のJリーグ開幕時に当時の最高年俸３億円で名古屋グランパスエイトでプレーしているイングランド・レスター出身の元サッカー選手で、2015－2016シーズンのレスター・シティの優勝の際「もし優勝したら自分のサッカー番組にパンツ一丁で出演する」という公約を守ったことで話題となったのは誰でしょう？	ゲーリー・リネカー（Gary Winston Lineker OBE）
名前が長いことから「Mr.S」の愛称でも親しまれた、日本では読売日本交響楽団の第8代常任指揮者を務め、のちに同団初の桂冠名誉指揮者となっているポーランド生まれのアメリカの指揮者で、オーストリアの作曲家アントン・ブルックナー作品の指揮で世界的に定評があることで知られるのは誰でしょう？	スタニスラフ・スクロバチェフスキ（Stanisław Skrowaczewski）
夫に石原裕次郎の『嵐を呼ぶ男』などを手がけた映画監督の井上梅次（うめつぐ）を持つ本名を明子という女優で、宝塚歌劇団の娘役スターとして活躍し、2014年には同期の乙羽信子、越路吹雪らとともに「宝塚歌劇の殿堂」100人に選ばれたことや、1942年の大映映画『新雪』の主演女優として知られるのは誰でしょう？	月丘夢路（つきおか・ゆめじ）
1980年の映画『普通の人々』ではアカデミー主演女優賞にノミネートされているアメリカの女優で、1960年代のシットコム『ディック・ヴァン・ダイク・ショー』で国民的人気を博し、70年代には自身の名を冠したシットコムでキャリアウーマンのメアリー・リチャーズを演じ、当時のフェミニスト運動家の象徴的な存在として知られたのは誰でしょう？	メアリー・タイラー・ムーア（Mary Tyler Moore）
2003年には上方お笑い大賞の読売テレビ特別功労賞を夢路いとし・喜味こいしとともに受賞している、夢路いとし・喜味こいしの「花嫁の父」や横山やすし・西川きよし「男の中の男」など数多くの漫才台本を手がけた漫才作家は誰でしょう？	中田明成（なかた・めいせい、あきしげ）
日本公演のMCでは「君たち最高だよ！（キミタチサイコダヨ）」と日本語で挨拶するのがお約束であった、ファミリー、ロキシー・ミュージック、ユーライア・ヒープなど数多くのバンドに在籍したイングランドのミュージシャン・ベーシストで、特に1972年再編成時のキング・クリムゾン、U.K.、エイジアといったプログレッシブ・ロック分野での活動が知られるの誰でしょう？	ジョン・ウェットン（John Kenneth Wetton）
ちばてつや原作のアニメ『ハリスの旋風（かぜ）』で作画デビューした日本のアニメーターで、『無敵鋼人ダイターン３』『装甲騎兵ボトムズ』『鎧伝サムライトルーパー』などのキャラクターデザイン・作画監督チーフを歴任したことで知られるのは誰でしょう？	塩山紀生（のりお）
父ニホンピロウイナー、母ヤマニンポリシー。1993年度の最優秀５歳以上牝馬（ひんば）、最優秀短距離馬、最優秀父内国産馬（ちちないこくさんば）に選ばれている日本の競走馬で、1992年と93年の安田記念を連覇したことで知られるのは何でしょう？	ヤマニンゼファー
群馬県安中市生まれであり、北陸新幹線・安中榛名駅のモニュメント『礎（そ）から未来へ』も手がけている日本の巨石彫刻家で、代表作に1985年のつくば万博に出展された『揺るぎ石』や日航機墜落事故の慰霊塔があるのは誰でしょう？	半田富久（はんだ・とみひさ）
「55年体制」を崩壊させた1993年の細川連立政権の樹立に尽力した日本の労働運動家で、旧電電公社の労働組合・全電通の委員長を経て、1989年に結成された日本労働組合総連合会（連合）の初代会長を務めたことで知られるのは誰でしょう？	山岸章（やまぎし・あきら）
1979年に東京理科大学を卒業後にソード電算機システムのプログラマを経て94年にソフトバンク総合研究所に入社した経歴を持つ日本の実業家で、孫正義の側近としてヤフー株式会社を立ち上げ、創業直後の97年から2012年まで同社の代表取締役社長を務めたことで知られるのは誰でしょう？	井上雅博（いのうえ・まさひろ）
1972年のミュンヘン夏季オリンピックの男子マラソンで金メダルを獲得したアメリカの元マラソン選手で、今年（2017年）、サイクルロードレースのジロ・デ・イタリアで優勝したトム・デュムランに対し、1973年の毎日マラソンでレース中に野糞しながらも大会新記録で優勝した彼のエピソードがよく引き合いに出されたのは誰でしょう？	フランク・ショーター（Frank Shorter）
1969年にグラフィックデザイナーの黒田征太郎とデザイン会社・Ｋ２を設立し、雑誌・広告・ポスターのデザインを数多く手がけたことや、ANAの機内誌『翼の王国』のエッセイ『おいしい手土産』で知られる日本のグラフィックデザイナー、アートディレクターは誰でしょう？	長友啓典（けいすけ）
2012年の映画『愛、アムール』ではアカデミー賞主演女優賞に史上最年長の85歳でノミネートされているフランスの女優で、日本では1959年のアラン・レネ監督の日仏合作映画『ヒロシマ・モナムール（二十四時間の情事）』の主演で知られるのは誰でしょう？	エマニュエル・リヴァ（Emmanuelle Riva）
兄に歌人の修二をもつ、1966年から愛知県立芸術大学で教鞭をとり画家・彫刻家の奈良美智（なら・よしとも）は彼の教室の学生であったという、キュビスム的構成の中に叙情性の漂う「かたちびと」と呼ばれる画風で知られる日本の洋画家は誰でしょう？	島田章三（しまだ・しょうぞう）
2014年にはFPSゲーム『Call of Duty: Black Ops II（コールオブデューティ：ブラックオプス２）』に名前を無断で使用されたとして損害賠償をもとめる訴訟を起こしたが退けられている、1980年代にパナマ軍最高司令官として独裁政権を築くもアメリカのパナマ侵攻で失脚したことで知られる軍人、政治家は誰でしょう？	マヌエル・ノリエガ（Manuel Antonio Noriega Moreno）
戦中戦後に孤児として放浪生活を送った経験を持つ日本の作家で、第２回ノンフィクション賞を受賞した『雨にも負けて風にも負けて』や、テレビドラマ化もされた『お菓子放浪記』で知られるのは誰でしょう？	西村滋（にしむら・しげる）
1976年には『彩りのころ』、1993年には『闇の果てから』で日本漫画家協会賞優秀賞を受賞している日本の漫画家で、昼ドラの原作となった『風の輪舞（ロンド）』『聞かせてよ愛の言葉を』や森田健作主演でドラマ化された『おれは男だ！』などで知られるのは誰でしょう？	津雲むつみ（つくも・むつみ）
昨年（2016年）のリオ・デ・ジャネイロ夏季五輪では聖火ランナーも務めたブラジルの医師で、ケネディ大統領夫人ジャクリーン・オナシスや女優のエリザベス・テイラー、ソフィア・ローレンの美容整形を手がけるなど形成外科の世界的権威として知られるのは誰でしょう？	イヴォ・ピタンギ（Ivo Pitanguy）
1978年に創業者一族のウィリアム・ソロモンの後を受けてから、1991年にアメリカ国債の不正入札の責任をとって会長を辞任するまでアメリカの投資銀行ソロモン・ブラザーズの実権を握り、同社をウォール街屈指の投資銀行に育て上げたことから「ウォール街の帝王」と呼ばれたアメリカの実業家は誰でしょう？	ジョン・グッドフレンド（John Halle Gutfreund）
最高指導者のハメネイ師と長年ライバル関係にあった、1989年から97年までイラン・イスラム共和国の第4代大統領を務め、2005年の大統領選でアフマディネジャドに敗れたイランの政治家は誰でしょう？	アリー・アクバル・ハーシェミー・ラフサンジャーニー
```

#### 出力されたcsvファイル(`sib2017-test.csv`)

```
ライフスタイル:0.9253872632980347,スポーツ:0.06948941200971603,原康史（はら・やすし）のペンネームで『激録日本大戦争』『激録力道山』などの著作を手がけた、東京スポーツの記者から取締役編集局長を歴任した日本のスポーツ新聞記者で、テレビ東京の『アメリカンプロレス』、テレビ朝日の『ワールドプロレスリング』の解説者として1980年代のプロレスブームを盛り上げたことで知られるのは誰でしょう？	櫻井康雄（桜井康雄、さくらい・やすお）
芸能:0.8389459848403931,文系学問:0.15653905272483826,園子温監督の映画『冷たい熱帯魚』ででんでんが演じる村田幸雄（ゆきお）のモデルとされている、シベリアン・ハスキーブームの仕掛け役、アラスカン・マラミュートの第一人者と呼ばれるなど業界では有名人であった、埼玉県熊谷市のペットショップ「アフリカケンネル」の創業者で、1993年に起きた埼玉愛犬家連続殺人事件の首謀者として元妻の風間博子とともに知られるのは誰でしょう？	関根元（せきね・げん）
芸能:0.8988960981369019,アニメ＆ゲーム:0.10113588720560074,作品内で凸凹コンビを演じたアンソニー・ダニエルズとは不仲であった、1977年公開の『エピソード４・新たなる希望』から2006年公開の『エピソード３・シスの復讐』まで映画『スターウォーズ』シリーズのR2-D2を演じたことで知られるイギリスの俳優は誰でしょう？	ケニー・ベイカー（Kenny Baker）
スポーツ:1.000019907951355,理系学問:1.0000269867305178e-05,「ミスタープロ野球」といえば長嶋茂雄、「ミスターアマ野球」といえば杉浦正則（まさのり）のことですが、都市対抗野球大会において10年間で６度の優勝経験、通算本塁打と社会人ベストナイン受賞の史上最多タイ記録を持ち「ミスター社会人野球」と呼ばれた、三菱ふそう川崎とHondaでプレーした元野球選手は誰でしょう？	西郷泰之（さいごう・やすゆき）
ライフスタイル:0.8606539368629456,スポーツ:0.10952442139387131,力士時代は高見将（たかみしょう）、青雲龍（せいうんりゅう）、武蔵海（むさしうみ）の四股名を名乗り、プロレスラー時代は本名を含めて７度の改名をしている、本田多聞とのタッグ「ヘッドバッターズ」で1998年の第54代アジアタッグ王座を獲得したことや、2012年にはプロレスリング・ノアの暴露本『内側から見たノアの崩壊』を出版したことで知られるのは誰でしょう？	泉田純（いずみだ・じゅん）
芸能:0.9951449036598206,ライフスタイル:0.003443627618253231,1970年の大阪万博では「せんい館」の映像『スペース・プロジェクション・アコ』を制作している、記録映画の『西陣』『石の詩』や劇映画の『薔薇の葬列』『ドグラ・マグラ』のほか、多くの実験映画で知られる日本の映像作家は誰でしょう？	松本俊夫（まつもと・としお）
社会:0.6147809028625488,ライフスタイル:0.30004820227622986,1952年に竹田製菓を設立しウェハースの「麦ふぁ～」やタマゴボーロをヒット商品に育て上げた日本の実業家で、経営を退いた後は100社を超える上場企業の大株主となり「日本一の個人投資家」とも呼ばれるのは誰でしょう？	竹田和平（わへい）
ライフスタイル:0.9956843852996826,アニメ＆ゲーム:0.004276785533875227,クロスワードパズル作りの名手であったことでも知られる、CWA・英国推理作家協会のゴールド・ダガー賞とシルバー・ダガー賞をそれぞれ２回受賞したイギリス本格派を代表する推理作家で、デビュー作の『ウッドストック行最終バス』をはじめとする『モース警部』シリーズで知られるのは誰でしょう？	コリン・デクスター（Norman Colin Dexter, OBE）
ライフスタイル:0.6395313739776611,文系学問:0.14056415855884552,1996年にWWE殿堂入りを果たすも2015年に元恋人の殺人と過失致死容疑で逮捕されたことから記録は抹消されている、ブルーザー・ブロディとの鋼鉄野獣コンビや、ダイビングボディアタックの「スーパーフライ」で知られたフィジー出身の元プロレスラーは誰でしょう？	ジミー・スヌーカ（Jimmy Snuka）
スポーツ:1.0000190734863281,ライフスタイル:1.085782059817575e-05,1986年のメキシコ・ワールドカップでは得点王に輝き、日本では1993年のJリーグ開幕時に当時の最高年俸３億円で名古屋グランパスエイトでプレーしているイングランド・レスター出身の元サッカー選手で、2015－2016シーズンのレスター・シティの優勝の際「もし優勝したら自分のサッカー番組にパンツ一丁で出演する」という公約を守ったことで話題となったのは誰でしょう？	ゲーリー・リネカー（Gary Winston Lineker OBE）
社会:0.9230471849441528,文系学問:0.0669085904955864,名前が長いことから「Mr.S」の愛称でも親しまれた、日本では読売日本交響楽団の第8代常任指揮者を務め、のちに同団初の桂冠名誉指揮者となっているポーランド生まれのアメリカの指揮者で、オーストリアの作曲家アントン・ブルックナー作品の指揮で世界的に定評があることで知られるのは誰でしょう？	スタニスラフ・スクロバチェフスキ（Stanisław Skrowaczewski）
芸能:0.9410256743431091,アニメ＆ゲーム:0.02998894266784191,夫に石原裕次郎の『嵐を呼ぶ男』などを手がけた映画監督の井上梅次（うめつぐ）を持つ本名を明子という女優で、宝塚歌劇団の娘役スターとして活躍し、2014年には同期の乙羽信子、越路吹雪らとともに「宝塚歌劇の殿堂」100人に選ばれたことや、1942年の大映映画『新雪』の主演女優として知られるのは誰でしょう？	月丘夢路（つきおか・ゆめじ）
芸能:0.9976087212562561,ライフスタイル:0.00148086401168257,1980年の映画『普通の人々』ではアカデミー主演女優賞にノミネートされているアメリカの女優で、1960年代のシットコム『ディック・ヴァン・ダイク・ショー』で国民的人気を博し、70年代には自身の名を冠したシットコムでキャリアウーマンのメアリー・リチャーズを演じ、当時のフェミニスト運動家の象徴的な存在として知られたのは誰でしょう？	メアリー・タイラー・ムーア（Mary Tyler Moore）
ライフスタイル:0.8716727495193481,芸能:0.09879455715417862,2003年には上方お笑い大賞の読売テレビ特別功労賞を夢路いとし・喜味こいしとともに受賞している、夢路いとし・喜味こいしの「花嫁の父」や横山やすし・西川きよし「男の中の男」など数多くの漫才台本を手がけた漫才作家は誰でしょう？	中田明成（なかた・めいせい、あきしげ）
文系学問:0.5503194332122803,ライフスタイル:0.24323347210884094,日本公演のMCでは「君たち最高だよ！（キミタチサイコダヨ）」と日本語で挨拶するのがお約束であった、ファミリー、ロキシー・ミュージック、ユーライア・ヒープなど数多くのバンドに在籍したイングランドのミュージシャン・ベーシストで、特に1972年再編成時のキング・クリムゾン、U.K.、エイジアといったプログレッシブ・ロック分野での活動が知られるの誰でしょう？	ジョン・ウェットン（John Kenneth Wetton）
アニメ＆ゲーム:1.0000278949737549,ライフスタイル:1.2091318239981774e-05,ちばてつや原作のアニメ『ハリスの旋風（かぜ）』で作画デビューした日本のアニメーターで、『無敵鋼人ダイターン３』『装甲騎兵ボトムズ』『鎧伝サムライトルーパー』などのキャラクターデザイン・作画監督チーフを歴任したことで知られるのは誰でしょう？	塩山紀生（のりお）
スポーツ:0.5983017683029175,ライフスタイル:0.3994850516319275,父ニホンピロウイナー、母ヤマニンポリシー。1993年度の最優秀５歳以上牝馬（ひんば）、最優秀短距離馬、最優秀父内国産馬（ちちないこくさんば）に選ばれている日本の競走馬で、1992年と93年の安田記念を連覇したことで知られるのは何でしょう？	ヤマニンゼファー
文系学問:0.9466806054115295,芸能:0.04872951656579971,群馬県安中市生まれであり、北陸新幹線・安中榛名駅のモニュメント『礎（そ）から未来へ』も手がけている日本の巨石彫刻家で、代表作に1985年のつくば万博に出展された『揺るぎ石』や日航機墜落事故の慰霊塔があるのは誰でしょう？	半田富久（はんだ・とみひさ）
文系学問:0.9809808731079102,社会:0.014911427162587643,「55年体制」を崩壊させた1993年の細川連立政権の樹立に尽力した日本の労働運動家で、旧電電公社の労働組合・全電通の委員長を経て、1989年に結成された日本労働組合総連合会（連合）の初代会長を務めたことで知られるのは誰でしょう？	山岸章（やまぎし・あきら）
ライフスタイル:0.8881906270980835,文系学問:0.04371645674109459,1979年に東京理科大学を卒業後にソード電算機システムのプログラマを経て94年にソフトバンク総合研究所に入社した経歴を持つ日本の実業家で、孫正義の側近としてヤフー株式会社を立ち上げ、創業直後の97年から2012年まで同社の代表取締役社長を務めたことで知られるのは誰でしょう？	井上雅博（いのうえ・まさひろ）
スポーツ:1.0000163316726685,ライフスタイル:1.3655901966558304e-05,1972年のミュンヘン夏季オリンピックの男子マラソンで金メダルを獲得したアメリカの元マラソン選手で、今年（2017年）、サイクルロードレースのジロ・デ・イタリアで優勝したトム・デュムランに対し、1973年の毎日マラソンでレース中に野糞しながらも大会新記録で優勝した彼のエピソードがよく引き合いに出されたのは誰でしょう？	フランク・ショーター（Frank Shorter）
ライフスタイル:0.7387215495109558,芸能:0.16145829856395721,1969年にグラフィックデザイナーの黒田征太郎とデザイン会社・Ｋ２を設立し、雑誌・広告・ポスターのデザインを数多く手がけたことや、ANAの機内誌『翼の王国』のエッセイ『おいしい手土産』で知られる日本のグラフィックデザイナー、アートディレクターは誰でしょう？	長友啓典（けいすけ）
芸能:0.9972425103187561,アニメ＆ゲーム:0.0018100691959261894,2012年の映画『愛、アムール』ではアカデミー賞主演女優賞に史上最年長の85歳でノミネートされているフランスの女優で、日本では1959年のアラン・レネ監督の日仏合作映画『ヒロシマ・モナムール（二十四時間の情事）』の主演で知られるのは誰でしょう？	エマニュエル・リヴァ（Emmanuelle Riva）
文系学問:0.65135258436203,理系学問:0.30626755952835083,兄に歌人の修二をもつ、1966年から愛知県立芸術大学で教鞭をとり画家・彫刻家の奈良美智（なら・よしとも）は彼の教室の学生であったという、キュビスム的構成の中に叙情性の漂う「かたちびと」と呼ばれる画風で知られる日本の洋画家は誰でしょう？	島田章三（しまだ・しょうぞう）
ライフスタイル:0.9179922938346863,アニメ＆ゲーム:0.05031091719865799,2014年にはFPSゲーム『Call of Duty: Black Ops II（コールオブデューティ：ブラックオプス２）』に名前を無断で使用されたとして損害賠償をもとめる訴訟を起こしたが退けられている、1980年代にパナマ軍最高司令官として独裁政権を築くもアメリカのパナマ侵攻で失脚したことで知られる軍人、政治家は誰でしょう？	マヌエル・ノリエガ（Manuel Antonio Noriega Moreno）
ライフスタイル:0.5431274175643921,文系学問:0.45668262243270874,戦中戦後に孤児として放浪生活を送った経験を持つ日本の作家で、第２回ノンフィクション賞を受賞した『雨にも負けて風にも負けて』や、テレビドラマ化もされた『お菓子放浪記』で知られるのは誰でしょう？	西村滋（にしむら・しげる）
アニメ＆ゲーム:0.9969399571418762,ライフスタイル:0.003097527427598834,1976年には『彩りのころ』、1993年には『闇の果てから』で日本漫画家協会賞優秀賞を受賞している日本の漫画家で、昼ドラの原作となった『風の輪舞（ロンド）』『聞かせてよ愛の言葉を』や森田健作主演でドラマ化された『おれは男だ！』などで知られるのは誰でしょう？	津雲むつみ（つくも・むつみ）
スポーツ:0.5049921870231628,理系学問:0.4330403208732605,昨年（2016年）のリオ・デ・ジャネイロ夏季五輪では聖火ランナーも務めたブラジルの医師で、ケネディ大統領夫人ジャクリーン・オナシスや女優のエリザベス・テイラー、ソフィア・ローレンの美容整形を手がけるなど形成外科の世界的権威として知られるのは誰でしょう？	イヴォ・ピタンギ（Ivo Pitanguy）
社会:0.8553645014762878,ライフスタイル:0.07760068029165268,1978年に創業者一族のウィリアム・ソロモンの後を受けてから、1991年にアメリカ国債の不正入札の責任をとって会長を辞任するまでアメリカの投資銀行ソロモン・ブラザーズの実権を握り、同社をウォール街屈指の投資銀行に育て上げたことから「ウォール街の帝王」と呼ばれたアメリカの実業家は誰でしょう？	ジョン・グッドフレンド（John Halle Gutfreund）
社会:0.9993765950202942,文系学問:0.0005712618585675955,最高指導者のハメネイ師と長年ライバル関係にあった、1989年から97年までイラン・イスラム共和国の第4代大統領を務め、2005年の大統領選でアフマディネジャドに敗れたイランの政治家は誰でしょう？	アリー・アクバル・ハーシェミー・ラフサンジャーニー
```

## 所感
ジャンル分けについては、芸能やスポーツに分類されたものはだいたい合ってる印象。間違いはライフスタイルに引っ張られる傾向がありそうです。
もともと精度には期待していなかったのですが、厳密なジャンル分けには難しいとしても、自作問題の全体像を眺めるといった用途なら使ってみてもいいのではと思いました。
[abc/EQIDEN](http://abc-dive.com/2019/question_remark.html)のジャンル付き問題データが入手できたら、abcの問題ジャンルで作ってみたいですね。