【Python】MeCabを使って青空文庫を簡単に分かち書きする方法

Python MeCab青空文庫を分かち書きする方法

前回はMeCabを使って分かち書きを行いました。

[Python]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ファイルがどんどん蓄積されていくと

同じコードを他の人が書かなくて良くなると思うんですよね。

これからもどんどん作っていくので皆さんもなにか作ったらぜひブログやツイッターで共有してみてください^^

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.