この広告は、90日以上更新していないブログに表示しています。
小説家になろうというWeb小説投稿サイトがあります。
いわゆるライトノベル的な作品が多いのですが、近年書籍化される作品が多く出ていて注目を集めています。
小説を読もう! || 小説ランキング[累計]の上位100件を解析して、どんな作品が多いのか調べてみました。
トピックモデルというものを用います。
これは文書が何のトピックを含むかを推定してくれるモデルで、他にもトピックの代表的な単語などもわかります。
Pythonでトピックモデルを使えるライブラリの一つであるgensim: Topic modelling for humansを使います。
gensimはLDAやLSIなど複数のトピックモデルを実装しています。
今回はLDA(Latent Dirichlet Allocation)というモデルを使って解析をしました。
gensimの日本語解説は以下の記事が詳しいです。
今回は作品の本文ではなく、作者がつけたタグを利用します。
それぞれの作品を文書、作品に付いているタグを文書中の単語とみなしてトピックモデルを適用します。
前処理として以下の関数を用いて、出現頻度が3未満または50より多いタグは除去しています。
gensim.corpora.dictionary.Dictionary.filter_extremes
dictionary.filter_extremes(3)gensim: Tutorialsをみると簡単にLDAが使えることがわかります。
以下はソースコードからの抜粋です。
tagsはリストのリストになっていて、作品ごとのタグのリストが含まれています。
これをDictionaryを使ってコーパスの形式に変換した後LdaModelに渡せば結果が得られます。
dictionary = gensim.corpora.Dictionary(tags) dictionary.filter_extremes(3) corpus = [dictionary.doc2bow(text)for textin tags] lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=10, id2word=dictionary)for xin lda.show_topics(-1,5):print x

以下が出現頻度の上位10件となっています。
「残酷な描写あり」の「異世界」「ファンタジー」が多いことがわかります。
| タグ名 | 頻度 |
|---|---|
| 残酷な描写あり | 73 |
| R15 | 69 |
| 異世界 | 55 |
| ファンタジー | 50 |
| 魔法 | 26 |
| チート | 21 |
| 転生 | 14 |
| 冒険 | 12 |
| 主人公最強 | 9 |
| ハーレム | 9 |
トピック数を10とし、得られたトピックの代表的な単語を5個ずつ出力しました。
出力をみると異世界ファンタジーものや最近流行りの「VRMMO」*1もの、他にも「主人公最強」*2や「内政」*3などがとれていそうなことがわかります。
0.103*チート + 0.103*転生 + 0.103*トリップ + 0.054*ファンタジー + 0.054*魔法0.204*精霊 + 0.019*ファンタジー + 0.019*VRMMO + 0.019*魔法 + 0.019*チート0.109*貴族 + 0.109*内政 + 0.074*ファンタジー + 0.074*ハーレム + 0.074*国家/民族0.200*魔法 + 0.112*ファンタジー + 0.112*チート + 0.090*学園 + 0.068*主人公最強0.115*ファンタジー + 0.070*成長 + 0.070*奴隷 + 0.070*成り上がり + 0.070*コメディー0.265*ファンタジー + 0.119*チート + 0.061*剣と魔法 + 0.061*勇者 + 0.032*冒険0.169*魔法 + 0.089*ファンタジー + 0.089*チート + 0.089*VRMMO + 0.089*最強0.176*ファンタジー + 0.083*魔法 + 0.073*転生 + 0.052*チート + 0.052*主人公最強0.209*VRMMO + 0.086*魔法 + 0.086*ネットゲーム + 0.086*VRMMORPG + 0.045*ファンタジー0.257*ファンタジー + 0.172*冒険 + 0.088*魔法 + 0.088*モンスター + 0.059*ハッピーエンド
小説家になろう作品のタグからある程度トピックを抽出できた。
載せていないが、タグだけでなくあらすじでもやろうかと思ったものの、そちらはあまりうまくいかず。
この記事を書き上げた後にググったら以下の気合の入ったスライドを発見。
全小説(20万件以上)のあらすじを取得して形態素解析後にトピックモデルで解析しているとのこと。
おまけとして18禁版のサイトを解析した結果をこのページの下の方に載せてあります。
18禁(?)なので注意。
タグクラウドの作成に利用。
「ー」が単語区切りとして認識されてしまったり日本語で使うには怪しいところがあって、wordSeparators変数などを書き換える必要があるので注意。
gensimの他にもHTMLの解析用にBeautifulSoupを利用しています。
実行するたびに結果が変わります。
毎回ランキングページのHTMLをダウンロードしているので、あまり短期間に連続で実行しないように注意。
# -*- coding: utf-8 -*-import urllib2from bs4import BeautifulSoupimport gensimdefgetNarouRankingHTML():return urllib2.urlopen('http://yomou.syosetu.com/rank/list/type/total_total/')defgetNarouRankingTags(soup):return [[item.stringfor itemin div.find_all('a')if item.string !=None]for divin soup.find_all(class_='novel_h')]if __name__ =="__main__": html = getNarouRankingHTML() soup = BeautifulSoup(html) tags = getNarouRankingTags(soup) dictionary = gensim.corpora.Dictionary(tags) dictionary.filter_extremes(3) corpus = [dictionary.doc2bow(text)for textin tags] lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=10, id2word=dictionary)for xin lda.show_topics(-1,5):print x
小説家になろうの男性向け18禁版であるノクターンノベルズやムーンライトノベルズに対して同様の解析をしてみました。
ソースコード中のランキングのURLの部分だけを書き換えれば動作します。
男性向けのサイトです。
ノクターンノベルズ || 小説ランキング[四半期]を解析。
0.129*ファンタジー + 0.065*奴隷 + 0.065*異世界 + 0.065*チート + 0.049*近親相姦0.075*中出し + 0.074*女子高生 + 0.074*美少女 + 0.057*調教 + 0.057*アナル0.102*ファンタジー + 0.062*女子高生 + 0.042*近親相姦 + 0.042*調教 + 0.042*美少女0.067*奴隷 + 0.067*鬼畜 + 0.067*監禁 + 0.067*近親相姦 + 0.046*ファンタジー0.078*巨乳 + 0.041*奴隷 + 0.041*近親相姦 + 0.041*ガールズラブ + 0.041*チート0.100*R15 + 0.067*ファンタジー + 0.067*奴隷 + 0.067*調教 + 0.056*メイド0.100*異世界 + 0.100*美少女 + 0.100*R15 + 0.068*奴隷 + 0.068*チート0.140*ファンタジー + 0.114*近親相姦 + 0.058*妊娠 + 0.058*異種姦 + 0.032*ガールズラブ0.077*中出し + 0.077*学校 + 0.053*ファンタジー + 0.052*女子高生 + 0.052*凌辱0.172*ファンタジー + 0.077*処女 + 0.058*強姦/レイプ + 0.058*女子高生 + 0.058*異世界
女性向けのサイトです。
BEST100と書いてありますが、なぜか300個のランキングです。

0.052*ファンタジー + 0.052*残酷な描写あり + 0.052*じれじれ + 0.052*社会人 + 0.035*年の差0.090*残酷な描写あり + 0.065*ファンタジー + 0.052*恋愛 + 0.039*R15 + 0.039*年の差0.132*残酷な描写あり + 0.073*ファンタジー + 0.061*異世界 + 0.037*R15 + 0.037*恋愛0.102*残酷な描写あり + 0.097*R15 + 0.072*恋愛 + 0.047*らぶえっち + 0.047*ハッピーエンド0.113*恋愛 + 0.081*残酷な描写あり + 0.072*ハッピーエンド + 0.069*ファンタジー + 0.052*溺愛0.077*R15 + 0.060*恋愛 + 0.060*溺愛 + 0.052*残酷な描写あり + 0.035*異世界0.153*恋愛 + 0.065*ファンタジー + 0.047*ハッピーエンド + 0.036*現代 + 0.036*らぶえっち0.084*R15 + 0.072*溺愛 + 0.053*恋愛 + 0.053*残酷な描写あり + 0.053*執着0.079*溺愛 + 0.055*ファンタジー + 0.055*R15 + 0.043*ハッピーエンド + 0.037*恋愛0.067*らぶえっち + 0.051*残酷な描写あり + 0.051*ファンタジー + 0.051*複数 + 0.034*恋愛

0.087*学園 + 0.061*R15 + 0.053*恋愛 + 0.044*残酷な描写あり + 0.035*コメディ0.079*残酷な描写あり + 0.079*ファンタジー + 0.059*無理矢理 + 0.059*高校生 + 0.040*溺愛0.151*残酷な描写あり + 0.093*ファンタジー + 0.089*R15 + 0.051*R18 + 0.035*異世界トリップ0.060*R15 + 0.060*ハッピーエンド + 0.041*ファンタジー + 0.041*残酷な描写あり + 0.041*社会人0.069*残酷な描写あり + 0.057*R15 + 0.057*恋愛 + 0.035*ファンタジー + 0.035*BL0.106*ファンタジー + 0.082*残酷な描写あり + 0.068*R15 + 0.039*異世界トリップ + 0.039*魔法0.102*R15 + 0.087*残酷な描写あり + 0.063*ファンタジー + 0.055*異世界 + 0.055*ハッピーエンド0.087*ファンタジー + 0.071*残酷な描写あり + 0.048*R15 + 0.040*恋愛 + 0.040*異世界0.083*ファンタジー + 0.064*高校生 + 0.052*ハッピーエンド + 0.045*R15 + 0.032*残酷な描写あり0.097*残酷な描写あり + 0.060*ファンタジー + 0.045*執着 + 0.045*無理矢理 + 0.038*騎士
このブログではGoogle AnalyticsやGoogle Adsenseを使っています。Amazonのアソシエイトとして、しょとうは適格販売により収入を得ています。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。