##やること
自然言語処理の練習として、青空文庫のデータを使うことがよくあると思います。
そこで、ダウンロードからプレーンなテキストに前処理し、さらにファイル出力するまでの一連の作業をまとめてみました。
走れメロス(ルビ付き)を処理する場合を具体例としています。
##環境
- Colaboratory環境
- ブラウザはChrome推奨
##まとめてドン
from google.colab import files
import re
! wget https://www.aozora.gr.jp/cards/000035/files/1567_ruby_4948.zip
! unzip 1567_ruby_4948.zip
f = open('hashire_merosu.txt', 'r', encoding='SJIS')
data = f.read()
f.close()
data = re.sub("\u3000", "", data)
data = re.sub("\n", "", data)
data = re.sub("《[^》]+》", "", data)
data = re.sub("-------------------------------------------------------【テキスト中に現れる記号について】《》:ルビ(例)邪智暴虐|:ルビの付く文字列の始まりを特定する記号(例)疲労|困憊[#]:入力者注主に外字の説明や、傍点の位置の指定(例)[#地から1字上げ]-------------------------------------------------------", "", data)
data = re.sub("底本:「太宰治全集3」ちくま文庫、筑摩書房1988(昭和63)年10月25日初版発行1998(平成10)年6月15日第2刷底本の親本:「筑摩全集類聚版太宰治全集」筑摩書房1975(昭和50)年6月〜1976(昭和51)年6月入力:金川一之校正:高橋美奈子2000年12月4日公開2011年1月17日修正青空文庫作成ファイル:このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。", "", data)
f = open('data.txt', 'w')
f.write(data)
f.close()
files.download("data.txt")
data
##ひとずつつ説明
####青空文庫から走メロのルビありテキストをダウンロードして解凍する
! wget https://www.aozora.gr.jp/cards/000035/files/1567_ruby_4948.zip
! unzip 1567_ruby_4948.zip
青空文庫の走れメロスのURLを指定し、ダウンロードしています。
そのまま解凍まで行います。
####走メロを読み込む
import re
f = open('hashire_merosu.txt', 'r', encoding='SJIS')
data = f.read()
f.close()
テキストファイルを開き、その内容を変数dataに読み込みます。
####読み込んだデータを確認する
data
読み込んだデータの内容の一部が表示されるので内容を確認します。
自然言語処理に使うには、ルビを示す《 》を削除したくなります。また、文頭の説明文も削除するのがよさそうです。文末の削る箇所もこのあとで調べて削除します。
####改行記号を削除する
data = re.sub("\u3000", "", data)
data = re.sub("\n", "", data)
文字の置き換えは、
re.sub("置換前の文字列", "置換後の文字列", 対象の変数名)
という書式になります。
置き換え後の文字を""とすると削除になります。
####《 》で囲まれたルビを削除する
data = re.sub("《[^》]+》", "", data)
正規表現を使って《 》とその間の文字を削除します。
####文頭の説明を削除する
data
で文頭を表示します。
不要部分をコピーし、下記の””の中にペーストします。
data = re.sub("-------------------------------------------------------【テキスト中に現れる記号について】《》:ルビ(例)邪智暴虐|:ルビの付く文字列の始まりを特定する記号(例)疲労|困憊[#]:入力者注主に外字の説明や、傍点の位置の指定(例)[#地から1字上げ]-------------------------------------------------------", "", data)
####文末の説明を削除する
まず、部末から400文字部分を表示します。
data[(len(data)-400):]
スライスを使って、文章全体の長さlen(data)から400文字分を引いた箇所から文末までを表示させています。
文頭と同様に不要部分をコピペして、削除します。
data = re.sub("底本:「太宰治全集3」ちくま文庫、筑摩書房1988(昭和63)年10月25日初版発行1998(平成10)年6月15日第2刷底本の親本:「筑摩全集類聚版太宰治全集」筑摩書房1975(昭和50)年6月〜1976(昭和51)年6月入力:金川一之校正:高橋美奈子2000年12月4日公開2011年1月17日修正青空文庫作成ファイル:このファイルは、インターネットの図書館、青空文庫(http://www.aozora.gr.jp/)で作られました。入力、校正、制作にあたったのは、ボランティアの皆さんです。", "", data)
####文字列をファイルに出力
f = open('data.txt', 'w')
f.write(data)
f.close()
一旦、strデータをテキストデータとして出力します。
####ローカルにダウンロード
from google.colab import files
files.download("data.txt")
colab環境からローカルにダウンロードする場合はこの手順です。
テキストエディタなどで開くと、改行なしの文字びっしりな走メロが出来上がっていると思います。
これで一通りの作業が完了です。
##このあとにやること
たとえばWord2Vecにかけるときには、形態素解析をして単語に分割し、さらにリスト化するなどの作業が必要になります。
また次の記事で行っていきます。
次回記事:Colab環境で分散表現処理
前回記事:Colab環境でMeCabを使う3行
前々回記事:word2vecをColab環境で使うための5行
##参考