SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

自然言語の学習に必要なテキストデータ(コーパス)を集める方法あれこれ。

f:id:arakan_no_boku:20190404222009j:plain

目次

はじめに

2018年2月の記事のリライトです。

目次を追加しました。

内容が一部古い可能性がありますが、ご容赦ください。

 

テキストデータ(コーパス)を集める

自然言語の学習・推論の勉強に必要なテキストデータ(コーパス)を集める方法について書いてみようと思います。

 

WEBスクレイピング

データを取得する方法として、WEBスクレイピングを紹介する本や記事があります。 

スクレイピング用のツールとかもあります。

便利なのはわかりますが、やりすぎはダメです。

大量一括処理すると、相手方のリソースを不当に消費するので、負荷がかかりすぎないように配慮しながら行わないといけません。

例として、僕がたまに利用しているpythonプログラムを紹介します。

相手サイトに負荷がかからないように、ベタに一つずつURLを指定してます。

ブラウザで表示するかわりに、テキストデータで抜き取るだけの処理です。

# -*- coding: utf-8 -*-
import requests as web
import bs4
import re
import codecs

spaces = r'[\s\t ]'
output_file = "output.txt"
resp = web.get('http://arakan-pgm-ai.hatenablog.com/entry/2017/02/03/190828')
resp.raise_for_status()

# 取得したHTMLをパースする
soup = bs4.BeautifulSoup(resp.text, "html.parser")
# 検索結果のタイトルとリンクを取得
link_elem = soup.select('p')
fout = codecs.open(output_file, 'w', 'utf8') 
for i in range(len(link_elem)):
    s = re.sub(spaces,"",link_elem[i].get_text())
    if(re.sub(r'[\r\n]',"",s)): #改行のみ以外
        fout.write(s + "\r\n")
fout.close()

 

やってることは指定したURLにアクセスして、<p></p>に囲まれている部分のテキストだけ抜き出し、余分な空白や改行だけの空行とか以外をファイルに書き出しています。

はてなブログを想定しています。

 

フリーのライセンスのテキストデータ

テキストデータをフリーのライセンスで公開されてるものがあります。

自分が知っている有名所は、この3つです。

 これらには、それぞれに特徴があります。

 

フリーテキスト:青空文庫

青空文庫著作権切れの小説とかが中心です。

www.aozora.gr.jp

 

テキストを分類するとかの用途には、作家別に取得できるのですごく使いやすいです。 

例えば、芥川龍之介太宰治を学習させて、新たに入力した文章がどちら風かを判定させるとか(思いつきで書いてますけど・・)やってみるとかですね。 

でも、どうしても古典的な作品が多くなります。 

だから、現代文よりの文章を期待すると、ちょっと厳しいです。

 

フリーテキスト:Wikipediaダンプ

wikipediaは、意味のある文章の宝庫です。

ja.wikipedia.org

だから、日本語の自然言語処理の対象データとしては、素晴らしいな・・と常々思います。 

でも、当たり前ですが・・サイズがでかいです。 

ここにアクセスすると、インデックスが表示されます。

f:id:arakan_no_boku:20180211214332j:plain

ここで、latest以外の最新の日付を選択します。 

latestを選んでも良いですが・・生のダンプデータなので、どれを使って良いかわからないと思います。 

日付のリンクを選ぶと、こんな感じのページが表示されます。

f:id:arakan_no_boku:20180211215511j:plain

このページから、「pages-meta-current.xml.bz2 : 全ページの最新版のダンプ」をダウンロードすれば良いです。 

ですが、1ファイルが数百MB~1GB近くあり、それが数ファイルにわかれてます。 

ダウンロードサイズ(圧縮ファイル)で400MB未満だったファイルを解凍すると、約1.5GBのサイズのテキストデータになりました。

 

フリーテキスト:livedoor ニュースコーパス

一番、使いやすいのは、これです。 

www.rondhuit.com

HTMLタグとかを取り去ったテキストデータですし。 

1ファイルが数KB程度と非常にコンパクトです。 

内容はスポーツやトピックなど様々なジャンルのニュースです。 

例えば。

http://news.livedoor.com/article/detail/5907376/
2011-10-03T11:59:00+0900
紳助とたけしの明暗を分けたものとは
今年で20回目を迎えたTBSのオールスター感謝祭に、1回目から総合司会を務めていた島田紳助さんの姿は無かった。

司会者不在という異例の事態に、その場にいたタレントの持ち回りで司会が進められる中、思わぬ芸能人の登場に会場が盛り上がる。自身も暴力団との関わりを指摘されていたビートたけしだ。

たけしらしいユーモアがあり、かつ無理難題な出題に会場が沸いた。ひな壇の芸能人たちは紳助不在でのびのびとしているようにも見える。

のような文章ですから、とても使いやすいので重宝してます。 

以上です。 

今回はこんなところで。

ではでは。