4

WordNetにはドメイン階層があることを知っています:例:sport->football。

1)たとえば、「スポーツ->サッカー」サブドメインに関連するすべての単語を一覧表示することはできますか?

  Response: goalkeeper, forward, penalty, ball, field, stadium, referee and so on.

2)特定の単語のドメイン名を取得します(例:「ゴールキーパー」?)

 Need something like [sport->football; sport->hockey] or [football;hockey] or just 'football'.

文書分類タスク用です。

4

1 に答える 1

7

WordNetには上位概念/下位概念の階層がありますが、ゴールキーパーを検索するとわかるように、これはここで必要なものではありません。

from nltk.corpus import wordnet
s = wordnet.synsets('goalkeeper')[0]
s.hypernym_paths()

結果の1つは次のとおりです。

[Synset('entity.n.01'),
Synset('physical_entity.n.01'),
Synset('causal_agent.n.01'),
Synset('person.n.01'),
Synset('contestant.n.01'),
Synset('athlete.n.01'),
Synset('soccer_player.n.01'),
Synset('goalkeeper.n.01')]

呼び出されるメソッドは2つありますがusage_domains()topic_domains()ほとんどの単語に対して空のリストが返されます。

s = wordnet.synsets('football')[0]
s.topic_domains()
>>> []
s.usage_domains()
>>> []

ただし、WordNetドメインプロジェクトはあなたが探しているものかもしれません。PrincetonWordNet2.0シンセットとそれに対応するドメイン間のマッピングを含むテキストファイルを提供します。データにアクセスするには、メールアドレスを登録する必要があります。次に、WordNetバージョン(2.0および3.2を提供)に対応するファイルを、たとえば次のanydbmモジュールで読み取ることができます。

import anydbm
fh = open('wn-domains-2.0-20050210', 'r')
dbdomains = anydbm.open('dbdomains', 'c')
for line in fh:
    offset, domain = line.split('\t')
    dbdomains[offset[:-2]] = domain
fh.close()

次に、シンセットのオフセット属性を使用して、そのドメインを見つけることができます。たぶん、最初にゼロを追加する必要があります。

dbdomains.get('0' + str(wordnet.synsets('travel_guidebook')[0].offset))
>>> 'linguistics\n'
于 2012-12-17T17:43:20.683 に答える