LoginSignup
6
9

More than 1 year has passed since last update.

青空文庫からテキストをダウンロードしてプレーンにする

Last updated at Posted at 2021-04-21

SS 192.png  colab環境で青空文庫のテキストをすぐ扱いたい

やること

自然言語処理の練習として、青空文庫のデータを使うことがよくあると思います。
そこで、ダウンロードからプレーンなテキストに前処理し、さらにファイル出力するまでの一連の作業をまとめてみました。
走れメロス(ルビ付き)を処理する場合を具体例としています。

環境

  • Colaboratory環境
  • ブラウザはChrome推奨

まとめてドン

colab
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

ひとずつつ説明

青空文庫から走メロのルビありテキストをダウンロードして解凍する

Colab
! wget https://www.aozora.gr.jp/cards/000035/files/1567_ruby_4948.zip
! unzip 1567_ruby_4948.zip

青空文庫の走れメロスのURLを指定し、ダウンロードしています。
そのまま解凍まで行います。

走メロを読み込む

python
import re
f = open('hashire_merosu.txt', 'r', encoding='SJIS')
data = f.read()
f.close()

テキストファイルを開き、その内容を変数dataに読み込みます。

読み込んだデータを確認する

python
data

読み込んだデータの内容の一部が表示されるので内容を確認します。
自然言語処理に使うには、ルビを示す《 》を削除したくなります。また、文頭の説明文も削除するのがよさそうです。文末の削る箇所もこのあとで調べて削除します。

改行記号を削除する

python
data = re.sub("\u3000", "", data)
data = re.sub("\n", "", data)

文字の置き換えは、
re.sub("置換前の文字列", "置換後の文字列", 対象の変数名)
という書式になります。
置き換え後の文字を""とすると削除になります。

《 》で囲まれたルビを削除する

python
data = re.sub("《[^》]+》", "", data)

正規表現を使って《 》とその間の文字を削除します。

文頭の説明を削除する

python
data

で文頭を表示します。
不要部分をコピーし、下記の””の中にペーストします。

python
data = re.sub("-------------------------------------------------------【テキスト中に現れる記号について】《》:ルビ(例)邪智暴虐|:ルビの付く文字列の始まりを特定する記号(例)疲労|困憊[#]:入力者注主に外字の説明や、傍点の位置の指定(例)[#地から1字上げ]-------------------------------------------------------", "", data)

文末の説明を削除する

まず、部末から400文字部分を表示します。

python
data[(len(data)-400):]

スライスを使って、文章全体の長さlen(data)から400文字分を引いた箇所から文末までを表示させています。
文頭と同様に不要部分をコピペして、削除します。

python
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)

文字列をファイルに出力

python
f = open('data.txt', 'w')
f.write(data)
f.close()

一旦、strデータをテキストデータとして出力します。

ローカルにダウンロード

python
from google.colab import files
files.download("data.txt")

colab環境からローカルにダウンロードする場合はこの手順です。
テキストエディタなどで開くと、改行なしの文字びっしりな走メロが出来上がっていると思います。
これで一通りの作業が完了です。

このあとにやること

たとえばWord2Vecにかけるときには、形態素解析をして単語に分割し、さらにリスト化するなどの作業が必要になります。
また次の記事で行っていきます。

次回記事:Colab環境で分散表現処理

前回記事:Colab環境でMeCabを使う3行
前々回記事:word2vecをColab環境で使うための5行

参考

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9