Natural-language-toolkit-looking-up-words-in-wordnet

提供:Dev Guides
移動先:案内検索

Wordnetで単語を検索する

ワードネットとは?

ワードネットは、プリンストンによって作成された英語の大規模な語彙データベースです。 これはNLTKコーパスの一部です。 名詞、動詞、形容詞、副詞はすべて、一連の同義語、つまり認知的同義語にグループ化されます。 ここで、synsetの各セットは異なる意味を表します。 以下はWordnetのいくつかの使用例です-

  • 単語の定義を調べるために使用できます
  • 単語の同義語と反意語を見つけることができます
  • 単語の関係や類似点は、Wordnetを使用して調べることができます
  • 複数の用途と定義を持つ単語の単語感覚の明確化

Wordnetをインポートするには?

Wordnetは次のコマンドの助けを借りてインポートすることができます-

from nltk.corpus import wordnet

よりコンパクトなコマンドについては、次を使用します-

from nltk.corpus import wordnet as wn

Synsetインスタンス

Synsetは、同じ概念を表す同義語のグループです。 Wordnetを使用して単語を検索すると、Synsetインスタンスのリストが表示されます。

wordnet.synsets(ワード)

Synsetのリストを取得するには、* wordnet.synsets(word)*を使用してWordnet内の任意の単語を検索できます。 たとえば、次のPythonレシピでは、「犬」のSynsetと、Synsetのいくつかのプロパティとメソッドを検索します-

まず、次のようにワードネットをインポートします-

from nltk.corpus import wordnet as wn

次に、Synsetを検索する単語を入力します-

syn = wn.synsets('dog')[0]

ここでは、name()メソッドを使用して、Synsetを直接取得するために使用できるSynsetの一意の名前を取得しています-

syn.name()
Output:
'dog.n.01'

次に、単語の定義を提供するdefinition()メソッドを使用しています-

syn.definition()
Output:
'a member of the genus Canis (probably descended from the common wolf) that has
been domesticated by man since prehistoric times; occurs in many breeds'

別のメソッドは、単語に関連する例を提供するexamples()です-

syn.examples()
Output:
['the dog barked all night']

完全な実装例

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.name()
syn.definition()
syn.examples()

Hypernymsの取得

Synsetは、 _ Hypernyms_ がより抽象化された用語を表し、 _ Hyponyms_ がより具体的な用語を表す、構造のような継承ツリーで編成されます。 重要なことの1つは、このツリーがルートの上位まで追跡できることです。 次の例の助けを借りて概念を理解しましょう-

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()

出力

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

ここでは、犬とドメスティックアニマルが「犬」の上位概念であることを確認できます。

今、私たちは次のように「犬」のハイポニームを見つけることができます-

syn.hypernyms()[0].hyponyms()

出力

[
   Synset('bitch.n.04'),
   Synset('dog.n.01'),
   Synset('fox.n.01'),
   Synset('hyena.n.01'),
   Synset('jackal.n.01'),
   Synset('wild_dog.n.01'),
   Synset('wolf.n.01')
]

上記の出力から、「dog」は「domestic_animals」の多くの下位語の1つにすぎないことがわかります。

これらすべてのルートを見つけるには、次のコマンドを使用できます-

syn.root_hypernyms()

出力

[Synset('entity.n.01')]

上記の出力から、ルートが1つだけあることがわかります。

完全な実装例

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
syn.hypernyms()[0].hyponyms()
syn.root_hypernyms()

出力

[Synset('entity.n.01')]

Wordnetの見出し語

言語学では、単語の標準形または形態論形を補題と呼びます。 単語の同義語と反意語を見つけるために、WordNetで見出し語を検索することもできます。 方法を見てみましょう。

同義語の検索

lemma()メソッドを使用すると、Synsetの同義語の数を見つけることができます。 この方法を「犬」のシンセットに適用しましょう-

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
lemmas = syn.lemmas()
len(lemmas)

出力

3

上記の出力は、「dog」に3つの補題があることを示しています。

次のように最初の補題の名前を取得する-

lemmas[0].name()
Output:
'dog'

次のように2番目の補題の名前を取得する-

lemmas[1].name()
Output:
'domestic_dog'

次のように第三の補題の名前を取得する-

lemmas[2].name()
Output:
'Canis_familiaris'

実際、Synsetは、すべて同じような意味を持つ見出し語のグループを表し、見出し語は異なる単語形式を表します。

対義語を見つける

WordNetでは、一部の補題にも反意語があります。 たとえば、「good」という単語には合計27個のsynetがあり、そのうち5個は対義語付きの補題を持っています。 対義語を見つけましょう(「good」という単語が名詞として使用された場合と「good」という単語が形容詞として使用された場合)。

例1

from nltk.corpus import wordnet as wn
   syn1 = wn.synset('good.n.02')
   antonym1 = syn1.lemmas()[0].antonyms()[0]
antonym1.name()

出力

'evil'
antonym1.synset().definition()

出力

'the quality of being morally wrong in principle or practice'

上記の例は、「good」という単語が名詞として使用される場合、最初の反意語「evil」があることを示しています。

例2

from nltk.corpus import wordnet as wn
   syn2 = wn.synset('good.a.01')
   antonym2 = syn2.lemmas()[0].antonyms()[0]
antonym2.name()

出力

'bad'
antonym2.synset().definition()

出力

'having undesirable or negative qualities’

上記の例は、形容詞として使用される場合、「良い」という単語に最初の反意語「悪い」があることを示しています。