Ubuntu14.04環境で、Python3と日本語構文・格・照応解析システムKNPを用いて係る語と受ける語のペアを抽出する方法をご紹介する。

係り受け構造を抽出するPython3のソースコードは次である。


from pyknp import KNP

def select_normalization_representative_notation(fstring):
    """ 正規化代表表記を抽出します
    """
    begin = fstring.find('正規化代表表記:')
    end = fstring.find('/', begin + 1)
    return fstring[begin + len('正規化代表表記:') : end]

def select_dependency_structure(line):
    """係り受け構造を抽出します
    """

    # KNP
    knp = KNP(option = '-tab -anaphora')

    # 解析
    result = knp.parse(line)

    # 文節リスト
    bnst_list = result.bnst_list()

    # 文節リストをidによるディクショナリ化する
    bnst_dic = dict((x.bnst_id, x) for x in bnst_list)

    tuples = []
    for bnst in bnst_list:
        if bnst.parent_id != -1:
            # (from, to)
            tuples.append((select_normalization_representative_notation(bnst.fstring), select_normalization_representative_notation(bnst_dic[bnst.parent_id].fstring)))

    return tuples


if __name__ == '__main__' :
    line = '太郎は花子が読んでいる本を次郎に渡した'
    tuples = select_dependency_structure(line)
    for t in tuples:
        print(t[0] + ' => ' + t[1])

これを実行すると、次のように出力される。


太郎 => 渡す
花子 => 読む
読む => 本
本 => 渡す
次郎 => 渡す

コマンドラインからKNPを実行すると、次のように表示される。


$ echo "太郎は花子が読んでいる本を次郎に渡した" | juman | knp
# S-ID:1 KNP:4.14-CF1.1 DATE:2015/09/22 SCORE:-35.27575
                太郎は──┐ 
花子が──┐         │ 
    読んでいる──┐     │ 
                  本を──┤ 
                次郎に──┤ 
                        渡した
EOS

関連する記事

  • R言語 CRAN Task View:臨床試験デザイン、監視、および分析R言語 CRAN Task View:臨床試験デザイン、監視、および分析 CRAN Task View:Clinical Trial Design, Monitoring, and Analysisの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: H.G. Zhang, Ed Zhang Contact: ClinicalTrials.TaskView […]
  • これだけは抑えておきたい成長性分析の基本これだけは抑えておきたい成長性分析の基本 成長性分析とは、様々な観点から成長性・拡大性・発展性を測定する分析である。 規模拡大などの経営戦略がいつも経営者の思い描く通りに進むとは限らないため、様々な観点から自社および自社を取り巻く環境の状況を把握する必要がある。 ここでは、成長性分析の代表的な指標をいくつか紹介する。 売上高伸び率 売上高伸び率とは、前期売上高より当期売上高がどの程度上昇または下降したかを […]
  • Ubuntu20.04にRをインストールする方法Ubuntu20.04にRをインストールする方法 Ubuntu 20.04 LTSにRをインストールする方法についてお伝えします。 作業は端末上で行うため、端末を起動しておきます(ショートカットキー:Ctrl+Alt+t)。 Ubuntuのバージョンを確認 Ubuntuのバージョンを確認するために、以下のコマンドを実行します。 Ubuntu 20.04と表記されていることを確認します。 $ cat […]
  • RStudioのGlobal Optionsの各種設定RStudioのGlobal Optionsの各種設定 RStudioのGlobal Optionsにどのような内容が記載されているかをお伝えいたします。 RStudioのGlobal Optionsは、メニューバーからToolsを選択して、表示されたポップアップ内にあります。 目次 General: 一般 Code: コード Editing: 編集 Display: 表示 […]
  • 経営戦略に使えるABC分析の基礎知識と活用法経営戦略に使えるABC分析の基礎知識と活用法 ABC分析は売上に関する経営戦略を立てるうえで、最も基本となる分析手法である。ABC分析とは、販売管理、顧客管理で使われる分析の一つで、ある期間で対象を重要度によって分類することにより現状を把握し易くする分析手法だ。 それでは早速解説していく。 ABC分析の手順 期間を過去一年間、対象を商品、重要度を売上とした場合を例に取り、ABC分析を行う手順を説明していく。 […]
Python KNPを用いて係り受け構造を抽出する方法