5

次のコードで、なぜ nltk は「fish」が名詞ではなく形容詞であると考えるのですか?

>>> import nltk
>>> s = "a woman needs a man like a fish needs a bicycle"
>>> nltk.pos_tag(s.split())
[('a', 'DT'), ('woman', 'NN'), ('needs', 'VBZ'), ('a', 'DT'), ('man', 'NN'), ('like', 'IN'), ('a', 'DT'), ('fish', 'JJ'), ('needs', 'NNS'), ('a', 'DT'), ('bicycle', 'NN')]
4

5 に答える 5

4

NLTKブックの第5章(たとえば、ルックアップ参照としてWordNetを使用)で説明されているようにルックアップタガーを最初に使用した場合、タガーはが形容詞になり得ないことをすでに「知っています」 。いくつかの可能なPOSタグを持つすべての単語について、統計タガーをバックオフタガーとして使用できます。

于 2013-01-23T17:43:14.640 に答える
4

回避策はわかりませんが、 https://nltk.googlecode.com/svn/trunk/nltk/nltk/tag/でソースを確認できます。

その間、私は少し違うアプローチであなたの文章を試しました。

>>> s = "a woman needs a man. A fish needs a bicycle"
>>> nltk.pos_tag(s.split())
[('a', 'DT'), ('woman', 'NN'), ('needs', 'VBZ'), ('a', 'DT'), ('man.', NP'), ('A','NNP'),   ('fish', 'NN'), ('needs', 'VBZ'), ('a', 'DT'), ('bicycle', 'NN')]

その結果、魚は「NN」になりました。

于 2012-12-12T09:27:04.403 に答える
3

それは、POS タガーに入力がどのように与えられるかによって異なります。たとえば、「魚が自転車を必要とするように、女性は男性を必要とする」

デフォルトの nltk 単語トークナイザーと正規表現トークナイザーを使用すると、値が異なります。

import nltk 
from nltk.tokenize import RegexpTokenizer

TOKENIZER = RegexpTokenizer('(?u)\W+|\$[\d\.]+|\S+')

s = "a woman needs a man like a fish needs a bicycle"

regex_tokenize = TOKENIZER.tokenize(s)
default_tokenize = nltk.word_tokenize(s)

regex_tag = nltk.pos_tag(regex_tokenize)
default_tag = nltk.pos_tag(default_tokenize)

print regex_tag
print "\n"
print default_tag

出力は次のとおりです。

  Regex Tokenizer: 

[('a', 'DT'), (' ', 'NN'), ('woman', 'NN'), (' ', ':'), ('needs', 'NNS'), (' ', 'VBP'), ('a', 'DT'), (' ', 'NN'), ('man', 'NN'), (' ', ':'), ('like', 'IN'), (' ', 'NN'), ('a', 'DT'), (' ', 'NN'), ('fish', 'NN'), (' ', ':'), ('needs', 'VBZ'), (' ', ':'), ('a', 'DT'), (' ', 'NN'), ('bicycle', 'NN')]

 Default Tokenizer: 

[('a', 'DT'), ('woman', 'NN'), ('needs', 'VBZ'), ('a', 'DT'), ('man', 'NN'), ('like', 'IN'), ('a', 'DT'), ('fish', 'JJ'), ('needs', 'NNS'), ('a', 'DT'), ('bicycle', 'NN')]

Regex Tokenizer では fish は名詞ですが、デフォルトのトークナイザーでは fish は形容詞です。使用するトークナイザーに応じて、解析が異なり、異なる解析ツリー構造になります。

于 2014-04-17T08:59:05.260 に答える
3

a woman needs a man like a fish needs a bicycleこれは、そのような「解析」用の POS タグを取得したいためです。

[ [[a woman] needs [a man]] like [[a fish] needs [a bicycle]] ]

しかし代わりに、NLTK のデフォルトの pos tagger は十分にスマートではなく、そのような解析のための POS タグを与えました:

[ [[a woman] needs [a man]] like [a fish needs] [a bicycle] ]

于 2013-01-17T10:28:50.823 に答える
2

Stanford POS tagger (3.5.1)を使用すると、フレーズは正しくタグ付けされます。

from nltk.tag.stanford import POSTagger
st = POSTagger("/.../stanford-postagger-full-2015-01-30/models/english-left3words-distsim.tagger",
               "/.../stanford-postagger-full-2015-01-30/stanford-postagger.jar")
st.tag("a woman needs a man like a fish needs a bicycle".split())

収量:

[('a', 'DT'),
 ('woman', 'NN'),
 ('needs', 'VBZ'),
 ('a', 'DT'),
 ('man', 'NN'),
 ('like', 'IN'),
 ('a', 'DT'),
 ('fish', 'NN'),
 ('needs', 'VBZ'),
 ('a', 'DT'),
 ('bicycle', 'NN')]
于 2015-03-16T23:37:46.713 に答える