暑さに耐えきれず、最近エアコンを使いだしたぴのです。7月も終盤というのに雨が続いて湿度がヤバいです。服を着ているだけで蒸れてしまうのですが、どうしたらいいんですかね。
さて、前回「なろう頻出単語辞典」なるものを作ったのですが、今回はそれを応用して「なろう偏差値計算機」を作ってみました。読んで字のごとく、タイトルを入力するとなろう偏差値を算出してくれるプログラムです。前回の記事はこちら↓
なろう偏差値計算機
ちょっと改良
詳しいことは省きますが、前回のプログラムの以下の点を改良しました。
- 記号や空白を辞書に含めないようにした
- プログレスバーを表示させ、進捗を視覚的にわかるようにした
- タイトル数を2000件から10000件に増やした
追加ソースコード
import statistics
mean = statistics.mean(dic.values())
pstdev = statistics.pstdev(dic.values())
dic_dev = {k:10 * (v - mean) / pstdev + 50 for k, v in dic.items()}
あらかじめ辞書内のそれぞれの単語に対して、単語の登場頻度を「なろう度偏差値」に置き換えます。偏差値の計算は計算機に値(タイトル)の入力があってから計算した方が全体の待ち時間が短くて済むのですが、先に計算しておいたほうが実行時の待ち時間が短くなります。
noun = 0
point = 0
title = "異世界転生した俺、魔術チートで無双する"
print(title)
tokens = tokenizer.tokenize(title)
for token in tokens:
if token.part_of_speech[:2] == '名詞':
if token.surface in dic_dev:
print(token.surface + ":\t" + str(dic_dev[token.surface]))
point += dic_dev[token.surface]
else:
print(token.surface + ":\tNone")
noun += 1
print("偏差値:\t"+str(point/noun))
titleの部分に計算したいタイトルを入れてプログラムを実行させるとなろう度偏差値を計算してくれます。出力はタイトルに登場する「なろう度偏差値」の合計を平均したものとなっています(計算式は改良の余地あり)。
なろう度偏差値TOP30
[('世界', 398.859405802636),
('最強', 233.56569481058156),
('転生', 220.31101043857717),
('俺', 182.88601927056487),
('者', 171.97039684656127),
('令嬢', 171.97039684656127),
('勇者', 134.54540567854892),
('版', 121.29072130654455),
('スキル', 119.73134667454404),
('冒険', 116.61259741054302),
('魔法', 115.05322277854249),
('悪役', 111.93447351454148),
('師', 111.15478619854122),
('魔王', 101.01885109053788),
('追放', 99.45947645853737),
('チート', 95.56103987853609),
('私', 94.00166524653557),
('ライフ', 93.2219779305353),
('生活', 91.6626032985348),
('無双', 90.88291598253454),
('ダンジョン', 90.88291598253454),
('英雄', 90.88291598253454),
('婚約', 90.88291598253454),
('魔', 89.32354135053403),
('記', 89.32354135053403),
('人', 88.54385403453378),
('聖女', 87.76416671853352),
('魔術', 85.42510477053274),
('騎士', 84.64541745453249),
('様', 83.86573013853223)]
今回使用した「なろう単語偏差値」の上位30位までです。上位の偏差値が100を超えていてヤバさを感じますね…
実行例
それっぽい単語を並べて計算してみた
異世界転生した俺、魔術チートで無双する
世界: 398.859405802636
転生: 220.31101043857717
俺: 182.88601927056487
魔術: 85.42510477053274
チート: 95.56103987853609
無双: 90.88291598253454
偏差値: 178.98758269056358
パーティーから追放された俺、辺境の村でスローライフします
パーティー: 69.05167113452735
追放: 99.45947645853737
俺: 182.88601927056487
辺境: 59.695423342524265
村: 53.45792481452221
スロー: 75.2891696625294
ライフ: 93.2219779305353
偏差値: 90.43738037339155
なんかタイトルだけ印象に残っていたラノベ(実在)
劣等職の最強賢者 ~底辺の【村人】から余裕で世界最強~
劣等: 51.11886286652144
職: 68.27198381852709
最強: 233.56569481058156
賢者: 74.50948234652915
~: None
底辺: 57.35636139452349
村人: 60.47511065852452
余裕: 50.33917555052118
世界: 398.859405802636
最強: 233.56569481058156
~: None
偏差値: 111.641979278086
普通の漫画
とある科学の超電磁砲
科学: 48.779800918520664
電磁: None
砲: 48.00011360252041
偏差値: 32.25997150701369
おわりに
計算方法については改良の余地があると感じています。文字列の長さや単語数も考慮に入れるとか、名詞だけでなく他の品詞も入れるともっとおもしろいかもしれないし、なろう度を計算したいならタイトルを機械学習させてみるのも…などといろいろ考えています。環境は整っているので、気が向いたときにやります。
WordPress上でPHPを経由してPythonのコードを実行することに成功したので、次回あたり「なろう度偏差値計算機」をこのサイトに埋め込んでみたいと思います。
コメント