日本語による文章表現の特徴を抽出するプログラム
janomeによる日本語の形態素解析(名詞の出現頻度)
文学作品や新聞記事など日本語による文章表現から,形態素解析を通して何か特徴を抽出できないかというモチベーションから始めました。
janomeのインストール
まずは,形態素解析器のjanomeのインストールから:
janomeのインストール
$ pip install janome
janomeに関するドキュメントはこちら:
- Janome v0.3 documentation (ja)
メインプログラムの実行
dataディレクトリ(フォルダ)に作品ごとのテキスト形式のファイル(拡張子は.txt)を用意してから実行します。
main.pyの実行
$ python main.py
メインプログラムのソースコード
とりあえず,ソースコードは以下のとおりです。
main.py
# coding: UTF-8
from collections import Counter
from itertools import chain
from janome.tokenizer import Tokenizer
import math
import glob
result = []
for file in glob.glob('./data/*.txt'):
# ファイルからテキストを読み込む
book = []
length = 0
print(file, '-'*16)
for line in open(file, 'r', encoding="utf-8"):
print(line, '')
book.append(line)
data = []
each_data = []
# 形態素解析(janome)
t = Tokenizer()
for b in book:
tokens = t.tokenize(b)
length += len(b)
for token in tokens:
partOfSpeech = token.part_of_speech.split(',')[0]
print(token)
if partOfSpeech == "名詞":
each_data.append(token.surface)
data.append(each_data)
each_data = []
# 名詞の出現頻度(TF)を求める
chain_data = list(chain.from_iterable(data))
c = Counter(chain_data)
# 統計情報の表示
print("Statistics for ", file, ":")
print("length = ", length)
sum = 0
for cnt in c.values():
sum += cnt
p = 0
for cnt in c.values():
q = cnt / sum
p += - q * math.log(q)
print("entropy = ", p)
result_rankings = c.most_common(10)
for d in result_ranking:
print(d)
result.append([file, length, p, result_ranking])
# 結果の表示(まとめ)
for r in result:
print(r)
exit()
メインプログラムの実行結果(一例)
いくつかの文献は,青空文庫のテキストデータを使用させていただきました。
実行結果の一例
['./data\\かいじん二十めんそう.txt', 9229, 4.869249479002453, [('の', 70), ('めん', 58), ('くん', 50), ('ん', 39), ('小', 37), ('二', 32), ('そう', 28), ('十', 28), ('おばけ', 27), ('中', 26)]]
['./data\\こころ.txt', 61906, 5.73922894743357, [('私', 1098), ('の', 465), ('先生', 356), ('事', 238), ('よう', 178), ('奥さ ん', 176), ('ん', 175), ('それ', 165), ('人', 142), ('もの', 142)]]
['./data\\ごんぎつね.txt', 3851, 4.7399830961522875, [('ん', 50), ('十', 33), ('兵', 32), ('中', 17), ('うなぎ', 15), ('の', 10), ('おれ', 10), ('栗', 10), ('家', 9), ('一', 8)]]
['./data\\坊っちゃん.txt', 22895, 6.168599304143815, [('おれ', 131), ('の', 103), ('ん', 90), ('事', 76), ('君', 59), ('もの', 55), ('シャツ', 55), ('山嵐', 54), ('赤', 53), ('人', 52)]]
['./data\\宇宙旅行の科学.txt', 16832, 5.9582839368126175, [('一', 83), ('こと', 81), ('ロケット', 73), ('の', 72), ('衛星', 58), ('マイル', 50), ('人工', 50), ('二', 50), ('地球', 44), ('五', 42)]]
['./data\\斜陽.txt', 73215, 6.35525411401746, [('私', 656), ('の', 418), ('お母さま', 268), ('事', 224), ('よう', 193), ('さん', 165), ('ん', 140), ('僕', 121), ('それ', 113), ('もの', 107)]]
['./data\\日本国憲法.txt', 11862, 5.884146792014421, [('条', 105), ('これ', 79), ('こと', 67), ('法律', 57), ('議員', 49), (' 国会', 46), ('国民', 45), ('内閣', 41), ('2', 40), ('議院', 32)]]
['./data\\日本国憲法(前文).txt', 650, 4.37189439697608, [('国民', 11), ('われ', 7), ('ら', 7), ('こと', 6), ('これ', 4), (' 平和', 4), ('日本', 3), ('憲法', 3), ('もの', 3), ('つて', 3)]]
['./data\\羅生門.txt', 2766, 4.853945084977317, [('下人', 27), ('事', 19), ('老婆', 18), ('の', 17), ('よう', 13), ('それ', 9), ('雨', 8), ('上', 8), ('門', 7), ('死骸', 7)]]
['./data\\茶わんの湯.txt', 3410, 4.813071551666044, [('湯', 30), ('よう', 22), ('茶わん', 21), ('の', 19), ('こと', 17), ('も の', 16), ('それ', 13), ('とき', 13), ('空気', 13), ('これ', 12)]]
展望
文書に出現するN個の名詞の出現確率
に対して,文書のエントロピーを
によって定義すると,文章の読みやすさに関係した特徴量として使えるのではないかと思って試してみました。
名詞だけでなく動詞や形容詞も含めて考えるなど,まだまだ検討の余地はありそうです。
Author And Source
この問題について(日本語による文章表現の特徴を抽出するプログラム), 我々は、より多くの情報をここで見つけました https://qiita.com/DanYuya/items/c07d0ab86ffb7f2bc479著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .