kyoto-reader: A processor for KWDLC, KyotoCorpus, and AnnotatedFKCCorpus

About

京都大学が公開している述語項構造や共参照関係が付与されたコーパスをパースし、Python から扱うためのインターフェースを提供します。 このツールは pyknp のラッパーであるため、形態素情報や係り受け関係なども扱うことが可能です。

利用可能なコーパス一覧
Name Domain Size
京都大学ウェブ文書リードコーパス (KWDLC) ウェブテキスト 16,038 文
京都大学テキストコーパス (KyotoCorpus) 新聞記事・社説 15,872 文
不満調査データセットタグ付きコーパス (AnnotatedFKCCorpus) 不満に関する投稿 1,282 文

Requirements

Install kyoto-reader

$ pip install kyoto-reader

or

$ git clone https://github.com/ku-nlp/kyoto-reader
$ cd kyoto-reader
$ python setup.py install [--prefix=path]

A Brief Explanation of KWDLC and other corpora

KWDLC, KyotoCorpus, AnnotatedFKCCorpus はいずれも日本語の文書に対して形態素や構文情報の他、述語項構造や共参照関係が人手で付与されたコーパス。
KWDLC はウェブから抽出した 3 文を 1 文書として約 5,000 文書に対してアノテーションされている。
KyotoCorpus は毎日新聞の記事を対象に、形態素・構文情報については 40,000 文に、述語項構造・共参照関係についてはそのうちの約 10,000 文にアノテーションされている。
AnnotatedFKCCorpus は一般の人々から集められた不満テキスト約 1,300 文に対してアノテーションを行ったコーパスである。
なお、述語項構造・共参照関係のアノテーションは <rel> タグによって行われている。

KWDLC の例:

# S-ID:w201106-0000060050-1 JUMAN:6.1-20101108 KNP:3.1-20101107 DATE:2011/06/21 SCORE:-44.94406 MOD:2017/10/15 MEMO:
* 2D
+ 1D
コイン こいん コイン 名詞 6 普通名詞 1 * 0 * 0
+ 3D <rel type="ガ" target="不特定:人"/><rel type="ヲ" target="コイン" sid="w201106-0000060050-1" id="0"/>
トス とす トス 名詞 6 サ変名詞 2 * 0 * 0
を を を 助詞 9 格助詞 1 * 0 * 0
* 2D
+ 3D
3 さん 3 名詞 6 数詞 7 * 0 * 0
回 かい 回 接尾辞 14 名詞性名詞助数辞 3 * 0 * 0
* -1D
+ -1D <rel type="ガ" target="不特定:人"/><rel type="ガ" mode="?" target="読者"/><rel type="ガ" mode="?" target="著者"/><rel type="ヲ" target="トス" sid="w201106-0000060050-1" id="1"/>
行う おこなう 行う 動詞 2 * 0 子音動詞ワ行 12 基本形 2
。 。 。 特殊 1 句点 1 * 0 * 0
EOS

Usage

上記の例のデータが入ったファイル w201106-0000060050.knp を読み込む場合

from kyoto_reader import KyotoReader, Document

# 文書集合を扱うオブジェクト
reader = KyotoReader('w201106-0000060050.knp',  # ファイルまたはディレクトリのパスを指定する
                     target_cases=['ガ', 'ヲ', 'ニ'],  # ガ,ヲ,ニ格のみを対象とする
                     target_corefs=['=', '=構', '=≒', '=構≒'],  # 共参照として扱う関係を列挙
                     extract_nes=True  # 固有表現もコーパスから抽出する
                     )
print('読み込んだ文書:')
for doc_id in reader.doc_ids:
    print(f'  文書 ID: {doc_id}')

print('\n--- 述語項構造 ---')
document: Document = reader.process_document('w201106-0000060050')
for predicate in document.get_predicates():
    print(f'述語: {predicate.core}')
    for case, arguments in document.get_arguments(predicate).items():
        print(f'  {case}格: ', end='')
        print(', '.join(str(argument) for argument in arguments))

print('\n--- ツリー形式 ---')
document.draw_tree(sid='w201106-0000060050-1', coreference=False)

プログラムの出力結果

読み込んだ文書:
  文書 ID: w201106-0000060050

--- 述語項構造 ---
述語: トス
  ガ格: 不特定:人
  ヲ格: コイン
  ニ格:
述語: 行う
  ガ格: 不特定:人, 読者, 著者
  ヲ格: トス
  ニ格:

--- ツリー形式 ---
コイン┐
  トスを─┐  ガ:不特定:人 ヲ:コイン
      3回┤
      行う。  ガ:読者,不特定:人,著者 ヲ:トス

CLI Interfaces

kyoto コマンドを使用することで、コーパスの内容を表示したりコーパスを加工したりできる。

Browsing files

  • kyoto show: KNP ファイルの内容をツリー形式で表示 (ディレクトリを指定した場合、含まれる全てのファイルを表示)
$ kyoto show /path/to/knp/file.knp
  • kyoto list: 指定されたディレクトリに含まれる文書 ID を列挙
$ kyoto list /path/to/knp/directory

Processing Corpus

コーパスを解析し、追加の素性を付与 (KNP と JumanDIC が必要)

  • kyoto configure: コーパスのディレクトリに素性付与のための Makefile を生成
    • make を実行することで、コーパスが 1 文書 1 ファイルに分割され、 knp/ ディレクトリに素性の付与されたファイルが出力される。
$ kyoto configure --corpus-dir /path/to/downloaded/knp/directory --data-dir /path/to/output/directory --juman-dic-dir /path/to/JumanDIC/directory
created Makefile at /path/to/output/directory
$ cd /path/to/output/directory
$ make -j <num-parallel>
  • kyoto idsplit: コーパスを train/dev/test ファイルに分割
$ kyoto idsplit --corpus-dir /path/to/knp/dir --output-dir /path/to/output/dir --train /path/to/train/id/file --dev /path/to/dev/id/file --test /path/to/test/id/file

Zsh Completions

<virtualenv-path>/share/zsh/site-functionsFPATH に追加することで kyoto コマンドの補完が可能 (zsh 限定)

$ echo 'export FPATH=<virtualenv-path>/share/zsh/site-functions:$FPATH' >> ~/.zshrc

Author/Contact

京都大学 黒橋・褚・村脇研究室 (contact at nlp.ist.i.kyoto-u.ac.jp)

  • Nobuhiro Ueda

Indices and Tables