見出し画像

【Python】青空文庫から用例辞典を作成する。

 青空文庫の全データがGithubで公開されているということを知ったので、これを使って用例辞典を作ってみようと思い立ちました。
 Githubはこちら

画像1

 ダウンロードしたzipファイルを展開し、中身を見てみると、どうやら、「cards>連番>fils>zipファイル>テキストデータ」という構造をしているようです。

 まずは、テキストファイルの収められたzipファイルをひとところに集めてきましょう。

 cardsフォルダ内にzipfilesというフォルダを作り、以下のbatファイルを作ります。

画像2

 zipcp.batの中身は以下のような簡単なものです。

for /d %%f in (*) do (
	copy .\%%f\files\*.zip .\zipfiles\
)

 これを実行するとzipfilesというフォルダにcards>連番フォルダ>filesにあるzipファイルを集めてくることができます。
 zipfiles内にはこんな感じ集まります。

画像3

 zipファイルをひとところに展開します。7-zipなどの展開ソフトを使用します。今回はtextdataというフォルダを作り、そこにすべてを展開しました。

画像4

 テキストファイル以外のファイル(画像ファイルやpdfなど)は不要ですので削除しておきます。
 ここまでで下準備は完了です。

 次に以下のようなPythonのファイル(findtext.py)を作ります。

from glob import glob

def main():
   print("検索する単語を入力しエンターを押してください。\n終了する場合は×ボタンを押してください。")
   search_word = input()
   text_b = ""

   for txt_file in glob('*.txt'):
       ld = open(txt_file , mode = 'r')
       first_line = ld.readline()[:-1]
       try:
           lines = ld.readlines()
       except:
           lines = ""
       ld.close()

       for line in lines:
           line_find = line.find(search_word)
           
           if line_find >= 0:
               line_find_start = max(line_find - 10 , 0)
               line_find_end = min(line_find +30 , len(line) - 1)
               text_a = line[line_find_start:line_find] + " " + line[line_find:line_find + len(search_word)] + " " + line[line_find + len(search_word) :line_find_end]
               if text_a != text_b:
                   print(text_a + "(" + first_line + " : " + txt_file + ")")
                   text_b = text_a

   print("\n検索結果は以上です。\n")
   main()

main()

 これをテキストファイルと同じフォルダ内に入れます。

画像5

 これを実行すると、

画像6

 例えば「手練手管」と検索すると

 このように青空文庫内で「手練手管」という単語を含む文章の抜き出してくれます。

画像7

 青空文庫内での検索なので、言い回しがいささか時代がかっていますが、そのような小説を書きたいときはとても役に立つのではないでしょうか。
 小説家になろうの人気作をテキストファイルで落としてくれば、なろう版用例集なんかも作れます。

 手慰みに作ったものですが、思いついた単語を入力して眺めるだけでも楽しいです。

 2次配布になってしまいますので、テキストデータはGithubから手に入れてください。
 今回作成したPythonファイルはこちらです。

追記
 「手慰め」と書いていたのですが、「手慰み」だった気がすると思って検索してみると「手慰み」が正しいようです。
 なんて実用的なんだ!

画像8


最後までお読みいただきありがとうございます。「スキ」をしていただけるととても励みになります。