Baiduブログ・掲示板時間軸コーパス
Copyright 2010 Baidu Japan Inc.
All Rights Reserved
* 概要
「Baiduブログ・掲示板時間軸コーパス」は、バイドゥ株式会社(以下、バイドゥという)のクロールしたウェブデータから、掲示板の書き込みおよびブログの本文を、書き込まれた正確な時間とともに抽出して時系列に並べたデータを元にして作成したコーパスです。具体的には、2000年1月~2010年7月の期間に対して、各1ヶ月ごとにスライスし、Nグラム(ユニグラム~トライグラム)の統計を計算しています。
* 特徴
大規模:
バイドゥのウェブデータから抽出した掲示板・ブログのデータ(1千万文以上)を対象にしています
時間軸:
時間表現・タイムスタンプを元に文の抽出を行っているので、言語現象の内容とその発生した時間の対応が正確に把握できます(ある時点のウェブのスナップショットではありません)
長期間:
日本で電子掲示板が普及した 2000年~現在の期間を対象としています。
高精度:
高精度な文フィルタリング(以下参照)によって、ノイズやアスキーアートなどの混入を最小限に抑えています。
* 利用条件
別途利用条件 (Baidu_Terms_and_condition_Corpus.pdf) を参照ください。
なお、本コーパスを使用して得られた知見に関する研究発表あるいは成果発表を行う場合、以下の出典情報を明記してください。
日本語: バイドゥ株式会社「Baidu ブログ・掲示板時間軸コーパス」
英 語: "Baidu Blog and Forum Timed Corpus", by Baidu Japan Inc.
* ブログ・掲示板データの収集
バイドゥウェブ検索向けに2010年7月末までにクロールした Web ページからランダムサンプリングしたもののうち、以下の条件にあてはまるページを用いています。
** ブログデータの収集
ブログデータの収集には、RSS/RDF/ATOM のメタデータを用いています。ページ内埋め込みのRDFも含め、これらのメタデータを収集し、
- RDF: item 要素内の description が本文, dc:date が時間
- RSS: item 要素内の description が本文, pubDate が時間
- ATOM: entry 要素内の summary (存在しなければ content を使用) が本文, issued (存在しなければ、modified, created, updated を順に使用) が時間
を抽出し、本文と時間を結びつけています。該当する要素が無い場合は、そのメタデータを解析に用いません。なお、はてなダイアリーについては、個別記事の URL から時間を、 および に挟まれた部分を本文として抽出しています。HTML からのテキスト抽出については、以下の「テキスト抽出」を参照下さい。コーパスには、抽出された本文の先頭5行のみを用いています。また、重複文(直前の文と全く同一の文)および以下の「文フィルタリング」の条件に当てはまるものは除いています。
URL に 'blog' 'article' 'diary' 'plaza.rakuten' 'd.hatena.ne.jp' のいずれかが含まれるページのみを対象としています。また、 URL に 'auction' が含まれるページは除外しています。
** 掲示板データの収集
まず、'YYYY/MM/DD(DoW) HH:mm:SS' 等の日付表現を手がかりにして、掲示板の投稿と思われる部分を収集しています。YYYY(西暦)の部分は 92 (1992) から 10 (2010) までです。また、DoWは曜日 (月~日) です。日付表現の後続3行を、その投稿の本文として抽出しています。また、重複文(直前の文と全く同一の文)および以下の「文フィルタリング」の条件に当てはまるものは除いています。
なお、URL に 'blog' 'article' 'diary' 'auction' の含まれるページは除外しています。また、偏りを避けるために、単一のページから抽出する投稿の数は最大 100 に制限しています。
* データの詳細
** テキスト抽出
テキスト抽出には、BeautifulSoup 3.0.8
http://www.crummy.com/software/BeautifulSoup/
を利用しています。具体的には、以下のコード (Python):
soup = BeautifulSoup(html)
によって html をパースした後、
def strip_tags(soup):
return ''.join(s.string if s.string else strip_tags(s) for s in soup)
によって HTML タグを取り除いた結果を使用しています。また、HTML 中の JavaScript やコメントは削除しています。ここでパースに失敗した mal-formed な HTML は n-gram のカウントからページごと除外しています。
** 正規化
文字コードは全て UTF8 に変換してあります。
英数字・記号は半角に正規化しています。具体的には、日本語code point (UCS2) の UFF00-UFF5F を U0020-U007Fにシフトしています。また、カタカナは全角に正規化しています。
その他の文字については、正規化を行っていません。
** 文フィルタリング
以下の条件に1つでも該当する文は抽出対象から除外しています。
1. 5文字以下もしくは1024文字以上 (Byte数ではなく、Unicode文字数)
2. ひらがなが全体の5%未満
3. 日本語のcode point(下記参照)の割合が70%未満
U3040 .. U30FF
U31F0 .. U31FF
U3400 .. U34BF
U4E00 .. U9FFF
UF900 .. UFAFF
** 形態素解析
抽出された文を、mecab-0.98 および mecab-ipadic-2.7.0-20070801 を用いて形態素に分割しています。文頭、文末は , トークンによって表示しています。
** 頻度のカットオフ
a. 基本形態素カットオフ
基本形態素とは、コーパス中(全期間通じて) 10 回以上出現した形態素のことです。頻度が 10 未満の形態素は未知語トークン に置換されています。
b. n-gram カットオフ
最終的に、出現頻度が n 回以上の n-gram のみを出力しています。ここで、頻度の閾値 n は、各期間に応じて以下のように決定しています:
2000年1月 - 2005年12月 n = 2
2006年1月 - 2007年12月 n = 3
2008年1月 - 2008年12月 n = 4
2009年1月 - 2010年7月 n = 5
* データ形式
コーパスは、"YYYY-MM.Ngm" の形式のファイル名から構成されています。ここで、YYYY, MM, N はそれぞれ
YYYY: 年 (2000 - 2010)
MM : 月 (00 - 12)
N : グラム数 (1 - 3)
を表しています。11年×12ヶ月×3-gram(ただし2010年は7月までなのでマイナス5ヶ月×3-gram)で、合計 381個のファイルが含まれています。
各ファイルはテキストファイルで、1行に1つのn-gramが以下のフォーマットで保存されています。
WORD_1 WORD_2 ... WORD_N COUNT
なお、各期間の総文数(=トークンの出現数)は以下の通りです。
2000-01 882
2000-02 1526
2000-03 1515
2000-04 1012
2000-05 1948
2000-06 3235
2000-07 4347
2000-08 4047
2000-09 4632
2000-10 5996
2000-11 6246
2000-12 7382
2001-01 8708
2001-02 6197
2001-03 8742
2001-04 9784
2001-05 11660
2001-06 13213
2001-07 12658
2001-08 13299
2001-09 10649
2001-10 15771
2001-11 16213
2001-12 17226
2002-01 22791
2002-02 23192
2002-03 23561
2002-04 22440
2002-05 24338
2002-06 25882
2002-07 25275
2002-08 29830
2002-09 26383
2002-10 26636
2002-11 22302
2002-12 26106
2003-01 24960
2003-02 24574
2003-03 24344
2003-04 21488
2003-05 28691
2003-06 29726
2003-07 40971
2003-08 33700
2003-09 31258
2003-10 25112
2003-11 26627
2003-12 29243
2004-01 44115
2004-02 34495
2004-03 35199
2004-04 27674
2004-05 36636
2004-06 33155
2004-07 33955
2004-08 41930
2004-09 31756
2004-10 33111
2004-11 29818
2004-12 30835
2005-01 41734
2005-02 42974
2005-03 49567
2005-04 46772
2005-05 54137
2005-06 54357
2005-07 59425
2005-08 58962
2005-09 61051
2005-10 71576
2005-11 64681
2005-12 68259
2006-01 89185
2006-02 75507
2006-03 81530
2006-04 70522
2006-05 76088
2006-06 88833
2006-07 93372
2006-08 94306
2006-09 92990
2006-10 96752
2006-11 88077
2006-12 89798
2007-01 95391
2007-02 88630
2007-03 101216
2007-04 100058
2007-05 105455
2007-06 109761
2007-07 117943
2007-08 133837
2007-09 137861
2007-10 149631
2007-11 130292
2007-12 129787
2008-01 129347
2008-02 134472
2008-03 138617
2008-04 133460
2008-05 143780
2008-06 147548
2008-07 146893
2008-08 146080
2008-09 166552
2008-10 176779
2008-11 151224
2008-12 153791
2009-01 165300
2009-02 158106
2009-03 170377
2009-04 165189
2009-05 182212
2009-06 176960
2009-07 203245
2009-08 212950
2009-09 205635
2009-10 238328
2009-11 238945
2009-12 293403
2010-01 252338
2010-02 239220
2010-03 297539
2010-04 272103
2010-05 335034
2010-06 331260
2010-07 301275
合計 10557276
* 利用サンプルスクリプト
本コーパスでは、コーパス利用のサンプルスクリプト (Python) bbftc_sample.py を配布しています。使用方法は、
python bbftc_sample.py ...
で、 にある本コーパスのデータを基にして、Nグラム ... の出現率の時系列変化をグラフで表示します。 と ... は両方とも省略でき、省略した場合 はカレントディレクトリ、 は "藁" になります。