Pythonはじめに機械学習の勉強をするにあたって、日本語Wikipedia全文を学習データにできるとよさそう、ということでデータのダウンロードから、分かち書きされた文章をPythonのfor文で回す段階にもっていく方法をまとめました。3.5.2コード今回使用したコードはこちらにおいてあります。github.comWikipedia全記事のダウンロードWikipediaの全記事は、定期的にダンプして保存されているようです。この記事を書いている時点では、以下の2017/11/03のダンプが最新のものでした。大きさのファイルが全記事のデータなので、このファイルをダウンロードします。Extractorダウンロードしてきたダンプデータには、Wiki記法の記号なども含まれており、そのまま自然言語処理をするには向きません。Extractorというツールです。dumpsこのようなコマンドを走らせて記事本文を抽出しました。いう要素が1つのファイルにいくつか並んだXMLが得られました。「...と...」を意味する記号である。合字であることが容易にわかる。至るまでの変遷がわかる。続くラテン文字アルファベットの27字目とされた時期もある。</doc>中の1行ごとにイテレーションを回すSentenceIteratorを書きました。テキストが大きくなっても全ファイルをメモリに載せないようにしたのですが、今回は2.4GB程度なのでメモリに載せてしまう実装でもよかったかもしれません。なるジェネレータも用意しました。print(text)とかしてあげると、全行を順番に処理できます。センテンスと言っていますが、実際にはセンテンスではなく、Wikipediaで改行なしで書かれている文字列のまとまりを順次取得できるイテレーターです。文書や段落を1文ごとに分割してあげる処理を入れてあげればよいのですが、面倒なので今回はこのままでいきます。今後の処理に支障が出るようであれば、後々実装するかもしれません。後々の処理で使う際に分かち書きした1文が1行に入っているファイルがあると都合がよいので用意します。文章の単語への分割にはみんな大好きMeCabを使用しました。結果から分かち書きの文章を用意しました。Wikipediaの全文に対して分かち書きし、その結果をファイルに保存するクラスがWakatiCorpusクラスになります。このクラスは結局面倒くさくなって全文章をメモリに載せているので、実行時には注意してください。実行してみるではさっそく実行してみます。WakatiCorpus()wakati.run()wakati.save('wakati_corpus.txt')生成されたファイルを一部確認してみると、1行ごとに分かち書きされた文章(実際には段落)が入っているファイルが用意できていることが確認できます。