{NLP}O’REILLY2.8_5名詞のメロニム/ホロニムを調べる

O’reilly NLP with Python演習問題2.8_5

TODO

  • 任意の名詞のホロニムとメロニムの関係を調べる

  • メロニム/ホロニムとは

    意味により整列された英語辞書WordNet(シソーラスのようなもの)の、関係の表し方には同義語集合と、語彙関係という階層構造があります。
    後者の語彙関係における要素同士の関係にメロニムとホロニム含まれます。

  • メロニム(meronyms)
  • ある要素からそれを含む構成要素への関係
    「幹(trunk)」「枝(limb)」が「木(tree)」の一部分である場合、”木の(部分的/part)メロニム”は、すなわち「幹」「枝」を意味します。
    「心材(heartwood)」、「辺材(sapwood)」もまた別の観点から「木」の一部分です。”木の(材質的/substance)メロニム”は、すなわち「心材」「辺材」を意味します。

  • ホロニム(holonyms)
  • 構成要素とそれを含む要素との関係
    「木」が集まると「森(forest)」になる場合、”木のホロニム”は、すなわち「森」を意味します。



    なお、上記にも一部見られるが、メロニムとホロニムの関係にはそれぞれの性質的区分によってpart、substance、memberという種類が存在します。
    つまり、あるふたつの語の関係をメロニムとホロニムの概念で表すとき、6種類の関係が想定されうるということです。
    これは、NLTKではそれぞれ

  • member_meronyms()
  • part_meronyms()
  • substance_meronyms()
  • member_holonyms()
  • part_holonyms()
  • substance_holonyms()
  • という関数で求めることができます。


    メロニムとホロニムを調べる

    では、from nltk.corpus import wordnetでWordNetをインポートした上で、実際に「木(tree)」のメロニムとホロニムを見てみます。
    ここでは「tree」のことを便宜的に「基準語」と呼ぶことにします。

    基準語の意味を明確にする

    メロニムとホロニムを調べる前に、基準語の意味を明確にしなければなりません。なぜなら、多くの場合、単語には多義性があり、WordNetにおいても、一つの語は、複数の同義語集合に所属していることが多いからです。
    同義語集合の調査については、また別のエントリで詳しく書く必要があると思いますが、今は必要なものだけ書いていきます。

  • 基準語の持つ同義語集合を調べる
  • wordnet.synsets('tree')
    出力結果:

    [Synset('tree.n.01'), Synset('tree.n.02'), Synset('tree.n.03'), Synset('corner.v.02'), Synset('tree.v.02'), Synset('tree.v.03'), Synset('tree.v.04')]

    treeという語は7つの同義語集合に所属しており、そのうち3つが名詞の集合です。
    このうち、基準語として描いている語はどの同義語集合に属するtreeであるか(どの意味のtreeであるか)確認するため、各々の同義語集合に含まれる要素と定義を見てみます。

  • 同義語集合の要素を調べる
  • wn.synset('tree.n.01').lemma_names()
    wn.synset('tree.n.02').lemma_names()
    wn.synset('tree.n.03').lemma_names()

    ※O’REILLYのNLP入門には、同義語集合の要素を求めるsynset(及びlemma_names)は、NLTKオブジェクトプロパティとして説明がありますが、現在は関数に変更されているため、上記のように最後に()を付ける必要があるようです。
    (参考:Not getting the required output using Wordnet Synset’s definition method│stackoverflow
    出力結果:

    [u'tree']
    [u'tree', u'tree_diagram']
    [u'Tree', u'Sir_Herbert_Beerbohm_Tree']


  • 同義語集合の定義を調べる
  • wn.synset('tree.n.01').definition()
    wn.synset('tree.n.02').definition()
    wn.synset('tree.n.03').definition()

    出力結果:

    u'a tall perennial woody plant having a main trunk and branches forming a distinct elevated crown; includes both gymnosperms and angiosperms'
    u'a figure that branches from a single root'
    u'English actor and theatrical producer noted for his lavish productions of Shakespeare (1853-1917)'

    Synset(‘tree.n.01’)に含まれるtree(tree.n.01.tree)が今回の基準語です。WordNetでは語義の曖昧性を避けるため、同義語集合と併せて単語を識別します。


    メロニムとホロニムを調べる


    出力結果:

    member_meronyms:  []
    part_meronyms:  [Synset('burl.n.02'), Synset('crown.n.07'), Synset('limb.n.02'), Synset('stump.n.01'), Synset('trunk.n.01')]
    substance_meronyms:  [Synset('heartwood.n.01'), Synset('sapwood.n.01')]
    member_holonyms:  [Synset('forest.n.01')]
    part_holonyms:  []
    substance_holonyms:  []

    それぞれの関係にどの同義語集合が含まれているか表示することができました。指定した関係で結ばれる同義語集合が存在しないものおあり、その場合は空配列が返されます。

    Leave a Reply

    Your email address will not be published. Required fields are marked *