これを持っている:
text = Word_tokenize("The quick brown fox jumps over the lazy dog")
実行中:
nltk.pos_tag(text)
私は得る:
[('The', 'DT'), ('quick', 'NN'), ('brown', 'NN'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'NN'), ('dog', 'NN')]
これは間違っています。文のquick brown lazy
のタグは次のようになります。
('quick', 'JJ'), ('brown', 'JJ') , ('lazy', 'JJ')
オンラインツール でこれをテストすると、同じ結果が得られます。 quick
、brown
、およびfox
は、名詞ではなく形容詞にする必要があります。
要するに:
NLTKは完璧ではありません。実際、完璧なモデルはありません。
注:
NLTKバージョン3.1以降、デフォルトのpos_tag
関数は、もはや 古いMaxEnt英語のピクルス ではありません。
@ Honnibalの実装 のperceptron taggerになりました。 nltk.tag.pos_tag
>>> import inspect
>>> print inspect.getsource(pos_tag)
def pos_tag(tokens, tagset=None):
tagger = PerceptronTagger()
return _pos_tag(tokens, tagset, tagger)
それでもそれは良いですが、完璧ではありません:
>>> from nltk import pos_tag
>>> pos_tag("The quick brown fox jumps over the lazy dog".split())
[('The', 'DT'), ('quick', 'JJ'), ('brown', 'NN'), ('fox', 'NN'), ('jumps', 'VBZ'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]
ある時点で、誰かがTL;DR
ソリューション、 https://github.com/alvations/nltk_cli を参照
長い場合:
他のタガーを使用してみてください( https://github.com/nltk/nltk/tree/develop/nltk/tag を参照)、例えば:
NLTKのデフォルトのMaxEnt POSタガーを使用、つまりnltk.pos_tag
:
>>> from nltk import Word_tokenize, pos_tag
>>> text = "The quick brown fox jumps over the lazy dog"
>>> pos_tag(Word_tokenize(text))
[('The', 'DT'), ('quick', 'NN'), ('brown', 'NN'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'NN'), ('dog', 'NN')]
スタンフォードPOSタガーの使用:
$ cd ~
$ wget http://nlp.stanford.edu/software/stanford-postagger-2015-04-20.Zip
$ unzip stanford-postagger-2015-04-20.Zip
$ mv stanford-postagger-2015-04-20 stanford-postagger
$ python
>>> from os.path import expanduser
>>> home = expanduser("~")
>>> from nltk.tag.stanford import POSTagger
>>> _path_to_model = home + '/stanford-postagger/models/english-bidirectional-distsim.tagger'
>>> _path_to_jar = home + '/stanford-postagger/stanford-postagger.jar'
>>> st = POSTagger(path_to_model=_path_to_model, path_to_jar=_path_to_jar)
>>> text = "The quick brown fox jumps over the lazy dog"
>>> st.tag(text.split())
[(u'The', u'DT'), (u'quick', u'JJ'), (u'brown', u'JJ'), (u'fox', u'NN'), (u'jumps', u'VBZ'), (u'over', u'IN'), (u'the', u'DT'), (u'lazy', u'JJ'), (u'dog', u'NN')]
HunPOSの使用(注:デフォルトのエンコードはUTF-8ではなくISO-8859-1です):
$ cd ~
$ wget https://hunpos.googlecode.com/files/hunpos-1.0-linux.tgz
$ tar zxvf hunpos-1.0-linux.tgz
$ wget https://hunpos.googlecode.com/files/en_wsj.model.gz
$ gzip -d en_wsj.model.gz
$ mv en_wsj.model hunpos-1.0-linux/
$ python
>>> from os.path import expanduser
>>> home = expanduser("~")
>>> from nltk.tag.hunpos import HunposTagger
>>> _path_to_bin = home + '/hunpos-1.0-linux/hunpos-tag'
>>> _path_to_model = home + '/hunpos-1.0-linux/en_wsj.model'
>>> ht = HunposTagger(path_to_model=_path_to_model, path_to_bin=_path_to_bin)
>>> text = "The quick brown fox jumps over the lazy dog"
>>> ht.tag(text.split())
[('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]
Sennaを使用する(最新バージョンのNLTKを使用していることを確認し、APIにいくつかの変更を加えました):
$ cd ~
$ wget http://ronan.collobert.com/senna/senna-v3.0.tgz
$ tar zxvf senna-v3.0.tgz
$ python
>>> from os.path import expanduser
>>> home = expanduser("~")
>>> from nltk.tag.senna import SennaTagger
>>> st = SennaTagger(home+'/senna')
>>> text = "The quick brown fox jumps over the lazy dog"
>>> st.tag(text.split())
[('The', u'DT'), ('quick', u'JJ'), ('brown', u'JJ'), ('fox', u'NN'), ('jumps', u'VBZ'), ('over', u'IN'), ('the', u'DT'), ('lazy', u'JJ'), ('dog', u'NN')]
またはより良いPOSタガーを構築してみてください:
pos_tag
stackoverflowの精度は次を含みます:
NLTK HunPosに関する問題には、以下が含まれます:
NLTKおよびスタンフォードPOSタガーの問題には以下が含まれます: