お知らせ

ただいま、シンタックスハイライターの設定を見直しております。
プログラムが見にくくなっているページがありますが、ご容赦ください。

TF-IDFを求めてWordCloudをつくるプログラム(2)

テキストマイニング

自然光の中でコーディング

こんにちは。今回は前回紹介したプログラムについて、もう少し詳細を書いていきたいと思います。プログラムが170行程度あったので、何回かに分けて整理していきます。

テキストファイル読み込み部

1~26行目は対象となる文章が書かれたテキストファイルを読み込む部分です。

# --------------- 【ファイルを読み込む】 ---------------

# files は 'カテゴリー' : 'ファイル名' の組合せによる辞書
files = { 'いちご' : 'ichigo.txt' , 'りんご' : 'ringo.txt' , 'キウイ' : 'kiwi.txt' }

# documents は空の辞書。 ファイルを開き、'カテゴリー' : '文書'の組合せでの辞書を作る
documents = { }

# 辞書 files からファイル名を取り出し、ファイルを読み込んで documents に蓄積する
for category in files:

    # filename に辞書からファイル名(ichigo.txtなど)を取り出す
    filename = files[category]

    # READモードでファイルを開く
    file = open( filename , 'r' )
    # ファイルから文章を読み込んで、辞書として documents に追加する
    text = file.read()
    documents[category] = text
    # ファイルを閉じる
    file.close()

# 画面表示 : documents から一つずつカテゴリーを読み込んで、出力する
for category in documents:
    print('【' + category + '】')
    print( documents[category] )

 

4行目では、文章ファイルのファイル名を辞書として与えています。

プログラム中にデータを書いてしまうと見通しが悪くなるだけでなく、データが変わるたびにプログラムの修正が必要になるので、別のファイルとして用意します。「いちご」のカテゴリーについて書かれた文章のファイルは「ichigo.txt」というように、辞書を用いてカテゴリーのキーとファイル名のバリューの組として値を持たせています。データ形式が辞書なので、カテゴリーの増減があった場合はキーとバリューの組を増減させるだけで対応できます。

結局、変数名にファイル名を書いてしまうのではプログラムの修正が必要になります。しかし、このように変数に直接ファイル名を代入した意図として、自分が手を入れたプログラムが動作することを経験してもらうことがありました。プログラミングを学習した先の何ができるようになるかの一例を生徒に経験してもらい、プログラミングの有用性や仕組みからわかることについて考えてもらうことが重要だと思いました。できることの一例として扱ったのは、自然言語を分析できることと、言葉を入力するとそれに見合った回答をする人工知能のようなものが作れることの経験です。もうすでに人工知能の活用しようとしている時代であり、その仕組みを知った上での活用法を考える機会は、大切な経験になると考えました。ただ、人工知能と言い切る度胸がなかったので、アルゴリズム等身大の言葉である機械学習と説明しました。そのようなことから、生のプログラムを生徒が見てその一部を書き換える必要性を残しました。

プログラムの説明から話が大きく逸れましたが、その結果としてファイル名の与え方をこのようにしました。

7行目で、文章を記憶するための変数documentsを、辞書形式として初期化しています。文章が書かれたテキストファイルを読み込んだ後には、

{ 'カテゴリー名1’ : '記述された文章1’ , 'カテゴリー名2’ : '記述された文章2’ , ・・・ ,
  ’カテゴリー名n’ : '記述された文章n’ }

となります。

10~21行目は、文章が書かれているテキストファイルを読み込み、変数documentsに代入して、先ほど示したような形式を作成する部分です。

10行目で変数filesからひとつずつカテゴリー名を示すキーを変数categoryで受け取り、21行目までの命令を繰り返し実行します。

13行目のfiles[category]で変数filesのバリューであるファイル名を受け取り、変数filenameに代入します。

そして、16行目で変数filenameのテキストファイルを読み取り専用で開き、18行目でテキストファイルから読み取った文章を変数textに代入します。

19行目で、変数categoryを’カテゴリー名n’ にあたるキーとし、変数textを’記述された文章n’にあたるバリューとして、変数documentに辞書形式で代入します。21行目で、16行目で開いたテキストファイルを閉じています。

24~26行目では、辞書の変数documentの内容を出力しています。デバッグ時に入れたのですが、Pythonの動作によってメモ帳で編集したテキストファイルがちゃんと読めていることがわかるように残しました。

次回予告

次の部分が形態素解析をしたりTF-IDFの値を求めたりという重要な部分ですが、ループを分けずにまとめて処理してしまったため、なんと31~90行目がひとかたまりになってしまいました。この続きを書き進めるのは長文になることが明らかなので、今回はこれでおしまいにします。

次回は形態素解析をしながら、形態素解析の数を数える部分について書きます。ということは、今回は「看板に偽りあり」となってしまいました。今度こそがんばります!それではまた。

この記事を書いた人
春日井 優

高校で情報科という教科を担当しています。以前は数学科も担当していました。(今でも数学科の教員免許状は有効です。)プログラムを覚えたのは、「ゲームセンターあらし」という漫画のキャラクターがBASICを解説する「こんにちはマイコン」を読んだことがきっかけでした。

Posted by kasugai