はじめに
今回よりPythonでしりとりAPIを作っていきます。
この記事は第1回目です。
第2回は【Python+Flask】しりとりAPIを作ろう #2 ~しりとりプログラム作成です
今回はしりとりのデータを作成していきます。
環境
今回はデータ収集(ほぼテキストマイニング)を行うので google colab を用います。
こちらからGoogle colabを開いてください
テキストコーパス
京都大学のテキストコーパスを使います。
ここに保存されているテキスト達をPythonで読み込んで前処理していきます。
実際にやってみよう
手順1つ1つでgoogle colabのセル1つです。
手順1 git clone する
google colabなので先頭に!をつけることを忘れずに!
# git cloneする
!git clone https://github.com/ku-nlp/KyotoCorpus
手順2 ファイルのパスを取得する
KyotoCorpus/dat/num/ に保存されている numファイルのパスを取得します。
# 先のKyotoCorpusにある numファイルを取得する
import os
import glob
files = glob.glob("KyotoCorpus/dat/num/*")
print(files)
手順3 テキストマイニングする
全体として以下のコードになっており実行することでoutput.txt
が出力されています
import re
# 念のために初期化
rep = ""
rep_list = []
# ひらがなを抽出する設定。このとき ["はな", "ああ"] みたいなリスト形式になる時がある. 大体は["はな"]の様になる
noun_regrex = re.compile(r'''(
[\u3040-\u309F]+
)''', re.VERBOSE)
for filename in files:
with open(filename, "r") as f:
for line in f:
if "名詞" and "普通名詞" in line:
# 実際にひらがなを抽出する
rep = noun_regrex.findall(line)
# リストがから [] でない時にrep_listに要素を追加する
if rep:
rep_list.append(rep[0])
# 重複文字を取り除く (list型 -> set型 -> list型)
rep_list = list(set(rep_list))
# あいうえお順にソートする
rep_list.sort()
# output.txtに書き込む withを使うと暗黙的にcloseしてくれる
with open("output.txt", "w", encoding='UTF-8') as output:
for rep in rep_list:
output.write(rep+"\n")
テキストマイニングについて深掘りしていきます
深掘り1 - 初期化+正規表現の設定
import re
# 念のために初期化
rep = ""
rep_list = []
# ひらがなを抽出する設定。このとき ["はな", "ああ"] みたいなリスト形式になる時がある. 大体は["はな"]の様になる
noun_regrex = re.compile(r'''(
[\u3040-\u309F]+
)''', re.VERBOSE)
[\u3040-\u309F]+ で1文字以上のひらがなを表現しています。
re.VERBOSE を入れることによって空白やコメントを正規表現パターンから除外しています。
深掘り2 - 正規表現されたひらがなをリストに追加する
for filename in files:
with open(filename, "r") as f:
for line in f:
if "名詞" and "普通名詞" in line:
# 実際にひらがなを抽出する
rep = noun_regrex.findall(line)
# リストがから [] でない時にrep_listに要素を追加する
if rep:
rep_list.append(rep[0])
各numファイルを開いて1行1行読み込み、正規表現を行なった、ひらがなをリストに追加します。
ここでnumファイルを見てみましょう。
※google colab上で catコマンドで見てみます。
!cat /content/KyotoCorpus/dat/num/950101.num
...省略
50-5 いきごんで 意気込む 動詞 2 * 0 子音動詞マ行 9 タ系連用テ形 14
55-2 いる いる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2
...省略
幸いなことに形態素解析されています。そのため、
if "名詞" and "普通名詞" in line:
とすることで、名詞かつ普通名詞
要するに、人名や助詞などのしりとりに向かない語句を選別しています。
if rep:
rep_list.append(rep[0])
rep には正規表現されたテキストが入りますが、repに代入されるのはリスト型です。
rep[0]とすることで目的の名詞をリストに追加しています。
if リスト型の変数: として、リストが空かどうかを確認しています。
深掘り3 - 並び替えとファイルに出力
# 重複文字を取り除く (list型 -> set型 -> list型)
rep_list = list(set(rep_list))
# あいうえお順にソートする
rep_list.sort()
# output.txtに書き込む withを使うと暗黙的にcloseしてくれる
with open("output.txt", "w", encoding='UTF-8') as output:
for rep in rep_list:
output.write(rep+"\n")
rep+"\n"の様にしないと、改行されないので気をつけましょう。
データ完成
無事にしりとりさせるために必要なデータを得ることができました。
ぁんて
あ
あい
あいえいち
あいかぎ
あいかん
あいがかり
あいきょう
あいくち
あいけん
あいこく
あいことば
あいしゃ
...省略
これまでのコードを実行してみると、google colab上にoutput.txtが生成されているので、ダウンロードしておきましょう。
最後に
今回はしりとりさせるために必要なテキストデータを収集しました。
次回ではこのテキストデータを用いてしりとりをさせていきます。
2回目
3回目