10

この質問のように、他の場所でプログラムで使用される品詞 (名詞の長いリスト、形容詞のリスト) ごとの単語の大きなリストを取得することに興味があります。この回答には、WordNet データベース (SQL) 形式を使用したソリューションがあります。

Python NLTK に組み込まれているコーパス/ツールを使用して、そのようなリストを取得する方法はありますか? 大量のテキストを取得して解析し、名詞と形容詞を保存できます。しかし、組み込みの辞書やその他のツールを考えると、NLTK データセットに既に存在し、名詞/形容詞 (何でも) としてエンコードされている単語を単純に抽出するよりスマートな方法はありますか?

ありがとう。

4

3 に答える 3

12

Wordnet は、実際にはデフォルトで NLTK ダウンローダに含まれるコーパスの 1 つであることは注目に値します。したがって、車輪を再発明することなく、すでに見つけたソリューションを使用することができます。

たとえば、次のようにして、すべての名詞 synset を取得できます。

from nltk.corpus import wordnet as wn

for synset in list(wn.all_synsets('n')):
    print synset

# Or, equivalently
for synset in list(wn.all_synsets(wn.NOUN)):
    print synset

この例では、必要なすべての名詞が得られ、それらを synset にグループ化することもできるため、それらが正しいコンテキストで使用されていることを確認できます。

それらをすべてリストに入れたい場合は、次のようにすることができます (ただし、これは、単語と synset をどのように使用するかによってかなり異なります)。

all_nouns = []
for synset in wn.all_synsets('n'):
    all_nouns.extend(synset.lemma_names())

またはワンライナーとして:

all_nouns = [word for synset in wn.all_synsets('n') for word in synset.lemma_names()]
于 2013-07-19T18:43:21.817 に答える
3

Moby 品詞プロジェクトのデータを使用する必要があります。デフォルトで NLTK に直接含まれているものだけを使用することに固執しないでください。このためのファイルをダウンロードするのはほとんど手間がかからず、一度ロードされた NLTK でそれらを解析するのは非常に簡単です。

于 2013-07-19T18:39:36.797 に答える
1

今週初めに同様の質問を見ましたが (リンクが見つかりません)、そのとき言ったように、名詞/形容詞/その他のリストを維持することは良い考えではないと思います。これは主に、同じ単語でも文脈によって品詞が異なる可能性があるためです。

ただし、これらのリストを使用することにまだ固執している場合は、次のようにします (このマシンに NLTK をインストールしていませんが、基本は覚えています)。

nouns = set()
for sentence in my_corpus.sents():
    # each sentence is either a list of words or a list of (word, POS tag) tuples
    for word, pos in nltk.pos_tag(sentence): # remove the call to nltk.pos_tag if `sentence` is a list of tuples as described above

        if pos in ['NN', "NNP"]: # feel free to add any other noun tags
            nouns.add(word)

お役に立てれば

于 2013-07-19T18:45:00.650 に答える