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

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) 　colab環境で青空文庫のテキストをすぐ扱いたい

##やること

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

##環境
- Colaboratory環境
- ブラウザはChrome推奨


##まとめてドン

```python: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("-------------------------------------------------------【テキスト中に現れる記号について】《》：ルビ（例）邪智暴虐｜：ルビの付く文字列の始まりを特定する記号（例）疲労｜困憊［＃］：入力者注主に外字の説明や、傍点の位置の指定（例）［＃地から１字上げ］-------------------------------------------------------", "", 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
```

##ひとずつつ説明

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

```Shell:Colab
! wget https://www.aozora.gr.jp/cards/000035/files/1567_ruby_4948.zip
! unzip 1567_ruby_4948.zip
```
青空文庫の走れメロスのURLを指定し、ダウンロードしています。
そのまま解凍まで行います。

####走メロを読み込む
```python:python
import re
f = open('hashire_merosu.txt', 'r', encoding='SJIS')
data = f.read()
f.close()
```
テキストファイルを開き、その内容を変数dataに読み込みます。

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


####改行記号を削除する
```python:python
data = re.sub("\u3000", "", data)
data = re.sub("\n", "", data)
```
文字の置き換えは、
`re.sub("置換前の文字列", "置換後の文字列", 対象の変数名)`
という書式になります。
置き換え後の文字を""とすると削除になります。

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

```python:python
data = re.sub("《[^》]+》", "", data)
```
正規表現を使って《 》とその間の文字を削除します。

####文頭の説明を削除する

```python:python
data
```

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

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

####文末の説明を削除する
まず、部末から400文字部分を表示します。

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

```python: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:python
f = open('data.txt', 'w')
f.write(data)
f.close()
```
一旦、strデータをテキストデータとして出力します。

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

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





次回記事：[Colab環境で分散表現処理](https://qiita.com/Ninagawa_Izumi/items/a49085e36e6de53b3eca)


前回記事：[Colab環境でMeCabを使う3行](https://qiita.com/Ninagawa_Izumi/items/c90cccb453e2a6fc4466)
前々回記事：[word2vecをColab環境で使うための5行](https://qiita.com/Ninagawa_Izumi/items/6c38160e041b6c333905)


##参考
- [青空文庫　走れメロス　太宰治](https://www.aozora.gr.jp/cards/000035/card1567.html)
- [【Pythonを使い倒す】複雑な文章に対して非常に柔軟な操作ができる正規表現の力とは？](https://attracter.tokyo/tech/python21/)
- [Let'sプログラミング テキストファイルを読み込む](https://www.javadrive.jp/python/file/index2.html)