初めまして。新卒です。
本日はjanomeを使い、「形態素解析を行い、文章中に使われている名詞の数を名詞ごとに数える」というプログラムの処理の流れを簡単に説明します。
janomeとはpythonのライブラリの1つで、文章を形態素ごとに分割し、品詞の判定を行うことができます(形態素解析)。
使用したpythonとjanomeのバージョンは以下の通りです。
python | 3.7.8 |
janome | 0.3.10 |
ライブラリのインストール
$ pip install janome
これでjanomeがインストールできます。
形態素解析
from janome.tokenizer import Tokenizer
path = './test.txt' #同じディレクトリにtext.txtを配置
file = open(path, encoding="utf-8") #ファイルをオープン Windows or Mac
#file = open(path) #ファイルをオープン Mac
bindata = file.read()#開いたファイルの読み込み
#textdata = bindata.decode('shift_jis')
t = Tokenizer() #形態素解析
dic = {} #辞書
#---------------------------------------------------------------------------------------------
lines = bindata.split("\r\n") #改行で分割 手順1
#---------------------------------------------------------------------------------------------
for line in lines: #分割された文章毎に繰り返す
#-----------------------------------------------------------------------------
malist = t.tokenize(line) #形態素のリスト
for w in malist: # リストの各要素を取り出してカウント
word = w.surface # 手順2 手順4
part = w.part_of_speech #品詞
if part.find('名詞') < 0: continue
#-----------------------------------------------------------------------------
if not word in dic:
dic[word] = 0 #数を格納するカウンター用の変数を生成 # 手順3
dic[word] += 1 # カウンターを増やす
#---------------------------------------------------------------------------------------------
dic = sorted(dic.items(),key = lambda x:x[1], reverse=True) # 手順5
#---------------------------------------------------------------------------------------------
for word, cnt in keys[:20]:
print("{0}({1})\n".format(word,cnt), end="")
処理の流れのイメージ
今回はtest.txtの中に書かれた文章の形態素解析をします。
処理の流れは以下の通りです。
test.txt
↓ 1. 改行で分割する。
↓ 2. 上の行から順に辞書(janomeに内包)を元に形態素ごとに分割する(赤字は名詞)。
↓ 3. 出てきた名詞をdicに入れ、それぞれの名詞の数を数える(赤字は名詞)。
dic
↓ 4. 最後の行が終わるまで2, 3を繰り返す。
dic
↓ 5. 名詞の出てきた回数でソート(降順)する。
dic
まとめ
本日はjanomeを使用し、「形態素解析を行い、文章中に使われている名詞の数を名詞ごとに数える」というプログラムの処理の流れを簡単に説明しました。
janomeを使うことで、形態素解析を非常に簡単に行うことができ、自然言語処理の様々な場面に活躍することになると思います!
ただし注意点が1つあります。WindowsとMacでは文字コードの扱いに差異があるため、ソースコードの5,6行目をお使いのOSに合わせて変えてください。Macであればどちらでも問題ありません。
janomeは「くだ」が名詞になっちゃうあたり、ちょっと解析精度が低いんじゃないか、と思うのです。fugashiやsudachipyも、よければ試してみて下さいね。