2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【マメ知識】青空文庫からテキスト解析用のプレーンテキストを入手

Last updated at Posted at 2017-10-14

2017-10-16追記 スクリプトをPhthonに直した上、後工程を含めて別の記事
青空文庫テキストから名詞のリストを作成するに統合しましたので、こちらを参照されて下さい。

テキストマイニングのテストをしようと思って、なかなか手頃なサンプルテキストがなく、入手に一手間必要だったので、その手順のメモ。

いい品質のプレーンテキストは、なかなかネットでも入手できないものです。
いろいろ調べて青空文庫にたどり着いたのですが、問題はテキスト型で提供されているデータにはルビの情報も含まれていた点。
たいしたことではないのですが、下記のようなPerlのスクリプトでルビのないきれいなデータを入手できるようになりました。
パターンマッチでルビなど余分な部分を落としているだけなので、もちろん他の言語でも簡単に実装できると思います。

(2017-10-15 追記)
最初のバージョンは、

  • 入力ファイル名、出力ファイル名が決め打ち
  • 青空文庫でダウンロードしたテキストはJSISなのに、Unicodeを前提にしていた
  • 頭の部分に本文と関係ない情報が含まれていた
    など、修正すべき点がいくつかあったので、これに対応しました。
    最新版は、ソースをコピペして "del-rubi.pl" をして保存した後、
$ chmod 755 del-rubi.pl
$ ./del-rubi.pl kokoro.txt kokoro-refine.txt

のように、第一引数入力ファイル名、第二引数出力ファイル名を指定して利用できます。

#!/usr/bin/perl

use utf8;
use Encode qw/encode decode/;

my $org_file = $ARGV[0] || 'org.txt';
my $new_file = $ARGV[1] || 'new.txt';

my $new = '';

my $header_count = 0;

if (open(FH, $org_file)) {
while ($data = <FH>) {
    $data = decode('SJIS', $data);
    $data =~ s/《[^》]+》//g;
    $data =~ s/|//g;
    $data =~ s/[.+?]//g;
    $data =~ s/(\r|\n)//g;
    $data = encode('UTF-8', $data);
    if ( $header_count >= 2 ) {
        $new .= $data . "\n";
    }
    if ($data =~ /----------/) {
        $header_count = $header_count + 1;
    }
  }
  close(FH);
}

if (open(FH, '>' . $new_file)) {
  print FH $new;
  close(FH);
}

exit;

ちなみに、私は夏目漱石の「こころ」のテキストを落としてみました。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?