Proudly Powered by Wikipedia.

Wikipediaの記事データからコーパスを作成する方法(Windows版)

作るもの

Wikipediaの日本語記事データからコーパスを作ります。

具体的には、テキストファイルの中に、1行に1つの文を並べたものです。

コーパスの例

表示例3

コーパス作成の流れ

  1. Wikipediaの記事圧縮データをダウンロード
  2. 圧縮データの解凍
  3. テキストファイルに1行1文にまとめる
  4. (おまけ)形態素解析

1. Wikipediaの記事圧縮データをダウンロード

Wikipedia:データベースダウンロードにデータのライセンスや種類、形式等について書かれています。一通り目を通しておきましょう。

データのダウンロードは、ダウンロードページから行います。ここには直近にクロールされたデータが保管されています。

記事のデータは「jawiki-latest-pages-articles.xml.bz2」。クリックして保存します。

2. Wikipediaの記事圧縮データの解凍

WP2TXTをダウンロードし、インストールします。

(補足) 2015年7月1日現在、Windowsの.exeインストール・GUI版がダウンロードできるページが見つからないので、Windowsを使っている方用にzipファイル(5.2MB)を置いておきます。zipファイルを解凍し、WP2TXT-install-0.3.0.exeを実行してください(Windows7 32ビットのみ動作確認)。インストール先はどこでも結構です。そして、インストールしたフォルダの直下に、同梱のzlib1.dllを置いてください。

WP2TXT(Windows・GUI版)

WP2TXT

WP2TXT(Windows・GUI版)の使い方

  1. 「Input File」から先ほどWikipediaからダウンロードした圧縮ファイルを選択します。
  2. 「Output Dir」にデータの保存先を指定します。ファイルは分割して保存されるため、新しくフォルダを作っておくと分かりやすいです。
  3. 「Data Conversion」で「To Text Format」を選択します。(XMLが欲しいなら「Keep XML Format」を選択。)
  4. 「Elements Extracted」から抽出して欲しいデータを選択します。文章を集めたコーパスを作るなら、「Paragraph」のみでいいと思います。
  5. 「Output File Spec」の「Output Encodeing」は「UTF-8」を選択。「Size of Each Output File (MB)」はデフォルトの値でいいと思います。
  6. 「Text Type Remoced」で「[ref] ... [/ref]」にチェックを入れます。「( ... )」については、括弧とその中身が要らないという人はチェック。
  7. 「START」ボタンを押して、処理を開始します。処理には時間が掛かるので、気長に待ちましょう。

3. テキストファイルに1行1文にまとめる

1行1文にまとめる際に、文の切れ目となるのが句点(。)です。句点を目安に改行を入れていき、空行は削除する処理を行います。

1行1文にする手順

  1. WP2TXTで出力したファイルを一つずつ読み込む
  2. 1.で読み込んだファイルから1行ずつ取り出し、変数($line)に入れる。
  3. $lineが空、または$lineが句点(。)を含んでいない場合は、次の1行の処理(2.)に飛ぶ。
  4. ($lineの値に対しての処理) 句点(。)の後ろに改行を入れる。
  5. ($lineの値に対しての処理) 。(改行)」 となっている部分の改行を取り除く。(。(改行)」 → 。」)
  6. ($lineの値に対しての処理) 連続した改行を1つにする。
  7. $lineをファイルに出力する。

なお、この処理はかなり大雑把なものなので、正確でない可能性があります。

Perlによるプログラムの例

適当なフォルダの中に、以下のプログラム(line.pl)とWP2TXTで出力したファイルを入れてください。

コマンドプロンプトを開き、そのフォルダまで移動。

line.plを実行してください。sentencesというファイルが作成されます。

#----------------------------------
# line.pl
#----------------------------------
use strict;
use warnings;
use utf8;
use open IN    => ":encoding(utf8)";
use open OUT   => ":encoding(utf8)";
binmode STDIN  => ":encoding(utf8)";
binmode STDOUT => ":encoding(utf8)";
binmode STDERR => ":encoding(utf8)";
use Encode 'encode';

main();
sub main {
	#出力ファイル。ファイル名に.txtは付けない。(次のwhileで読み込んでしまうため。)
	open my $out, ">", encode("utf8", "sentences") or die "Can't open sentences.txt : $!";

	#フォルダ内のテキストファイルを1つずつ読み込む
	while (<*.txt>) {

		#どのファイルを処理しているかの確認
		print "$_ started...\n";

		#テキストファイルを開く
		open my $in, "<", encode("utf8", "$_") or die "Can't open $_ : $!";

		#テキストファイルから1行ずつ読み込む
		while(my $line = readline $in){

			#行末の改行コードを削除
			chomp $line;

			#読み込んだ行が空、または句点を含まない場合は、次の行の処理に飛ぶ
			if (!$line || $line !~ /。/) {
				next;
			}

			#句点の後ろに改行コードを挿入
			$line =~ s/。/。\n/g;

			#句点と鍵括弧の間の改行を削除
			$line =~ s/。\n」/。」/sg;

			#連続した改行コードの削除
			$line =~ s/\n\n/\n/g;

			#書き出し
			print $out $line;

		}
		close($in);
	}
	close($out);
}

これでコーパスが作成できました。

4. (おまけ)形態素解析

形態素解析器にはMecabやChasen等があり、品詞や読み等を得ることができます。

ここではMecabを例に、先ほど作ったコーパスの形態素解析を行います。

Mecabのダウンロード

MeCab: Yet Another Part-of-Speech and Morphological Analyzerからダウンロードします。「ダウンロード」から「Binary package for MS-Windows」をダウンロードしてください。

ダウンロードした.exeファイルを実行し、Mecabをインストールします。インストールする際、文字コードはutf8を選択。インストールしたら、フォルダ内にbinフォルダがあるのを確認します。

形態素解析

Mecabのbinフォルダに、コーパス(先ほど作ったsentences)をコピーします。

コマンドプロンプトを開き、binフォルダに移動してください。そこで、「mecab.exe < sentences > results.txt」を実行します。時間がかかるので、処理が終わるまでしばらく待って下さい。

出力の例

アンパサンド	名詞,一般,*,*,*,*,*
(	名詞,サ変接続,*,*,*,*,*
ampersand	名詞,一般,*,*,*,*,*
,	名詞,サ変接続,*,*,*,*,*
&)	名詞,サ変接続,*,*,*,*,*
と	助詞,格助詞,引用,*,*,*,と,ト,ト
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
「	記号,括弧開,*,*,*,*,「,「,「
…	記号,一般,*,*,*,*,…,…,…
と	助詞,格助詞,引用,*,*,*,と,ト,ト
…	記号,一般,*,*,*,*,…,…,…
」	記号,括弧閉,*,*,*,*,」,」,」
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
意味	名詞,サ変接続,*,*,*,*,意味,イミ,イミ
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
記号	名詞,一般,*,*,*,*,記号,キゴウ,キゴー
で	助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある	助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。	記号,句点,*,*,*,*,。,。,。
EOS