前回はMeCabを使って分かち書きを行いました。
機械学習で日本語の文章を分かち書きするなら青空文庫を利用したい!という方が多いと思います。
そこで、今回は青空文庫を簡単に分かち書きして、テキストファイルでダウンロードできるスクリプトをGoogleColabで書いてみす。
GoogleColaboで青空文庫を分かち書きしてみる
GoogleColaboを開いてください。
まずはMeCabのインストールを行います。
!apt-get install mecab !apt-get install libmecab-dev !apt-get install mecab-ipadic-utf8 !pip install mecab-python3
インストールができたので試しに形態解析をしてみます。
import sys import MeCab mecab = MeCab.Tagger ("-Owakati") text = mecab.parse ("すもももももももものうち") text
すもも も もも も もも の うち
分かち書きができましたね。ここまでは前回やりました。
続いて、青空文庫から書籍をzip形式でダウンロードしてきます。
URLはダウンロードする書籍のURL(.zip)を選択しています。
OUTPUT_FILE は分かち書きが完了した後のファイルの名前を指定します。
URL = 'https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip' OUTPUT_FILE = 'output.txt'
download( ) は zipファイルをダウンロード、展開、削除、text ファイルを取得します。
import re import zipfile import urllib.request import os.path,glob def download(url): zip_file = re.split(r'/', url)[-1] if not os.path.exists(zip_file): print('Download URL') print('URL:',url) urllib.request.urlretrieve(url, zip_file) else: print('Download File exists') dir, ext = os.path.splitext(zip_file) if not os.path.exists(dir): os.makedirs(dir) # open zip zip_obj = zipfile.ZipFile(zip_file, 'r') zip_obj.extractall(dir) zip_obj.close() # delete zip os.remove(zip_file) # get text file path path = os.path.join(dir,'*.txt') list = glob.glob(path) return list[0]
convert() は 青空文庫にはルビが入っていたり、行末に本文とは関係のない文字が含まれているのでそれらを削除します。
※ 文章初めの全角スペースや、改行も一緒に削除しています。
def convert(download_text): binarydata = open(download_text, 'rb').read() text = binarydata.decode('shift_jis') text = re.split(r'\-{5,}', text)[2] text = re.split(r'底本:', text)[0] text = re.sub(r'《.+?》', '', text) text = re.sub(r'[#.+?]', '', text) text = re.sub(r'\u3000', '', text) text = re.sub(r'\r\n', '', text) text = text.strip() return text
zipファイルをダウンロードして、文章を取り出します。
download_file download_file = download(URL) Download URL URL: https://www.aozora.gr.jp/cards/000148/files/789_ruby_5639.zip
取り出した文章から余計な文字を取り除きます。
text = convert(download_file) text "一吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
最後にMeCabを使って分かち書きを行います。
text = mecab.parse(text) text "一 吾輩 は 猫 で ある 。 名前 は まだ 無い 。 どこ で 生れ た か とんと 見当 が つか ぬ 。 何 でも 薄暗い じめじめ し た 所 で ニャーニャー 泣い て いた事 だけ は 記憶 し て いる 。
これで無事に分かち書きができました!
あとは、先ほど名前をつけた OUTPUT_FILE に保存します。
with open(OUTPUT_FILE,"w") as f: f.write(text)
!ls output.txt
output.txt が保存されていることが確認できたのでダウンロードします。
from google.colab import files
files.download(OUTPUT_FILE)
まとめ
いかがでしたか?前回のファイルに少し変更を加えただけなのでそれほど難しくないですね。
convert() の中で改行を削除したりいらないものを取り除くところが実際に学習をさせる時にすごく重要になってくると思うので適宜変更を加えてご利用ください。
今回作ったいファイルは Aozora_MeCab_001 からコピーできます。
青空文庫を活用して日本語の自然言語処理もどんどん行っていきたいですね!!
そして、いつもGoogleColabさんありがとうございます。
こういうある特定のタスクを実現するColabファイルがどんどん蓄積されていくと
同じコードを他の人が書かなくて良くなると思うんですよね。
これからもどんどん作っていくので皆さんもなにか作ったらぜひブログやツイッターで共有してみてください^^
[…] 【Python】MeCabを使って青空文庫を簡単に分かち書きする方法 […]