nltk / tag / __ init__。pyのpos_tag_sents()のlang
パラメーターが渡されていません。
コミット69583ceaaaff7e51dd9f07f4f226d3a2b75bea69(nltk / tag / __ init__。pyの110〜116行目)での例外順序の変更と相まって、「NotImplementedError( '現在、NLTK pos_tagは英語とロシア語のみをサポートしています(つまり、lang =」)というエラーが発生します。文にタグを付ける場合は、eng 'またはlang =' rus ')' "。
プルリクエスト: https :
ありがとう@ezhangsfl
最新のファイルに更新し、 lang='eng'
パラメーターを手動で追加しようとしても、このエラーが発生しますが、これも機能しませんでした。 @ezhangsfll @stevenbird
前回のリリースは17回目ですが、これは後でマージされました
最新のファイルに更新し、
lang='eng'
パラメーターを手動で追加しようとしても、このエラーが発生しますが、これも機能しませんでした。 @ezhangsfll @stevenbird
(__init__。py)ファイルの内容を次のように置き換えます。
#
"" "
NLTKタガー
このパッケージには、品詞のクラスとインターフェイスが含まれています
タグ付け、または単に「タグ付け」。
「タグ」は、トークンのプロパティを指定する大文字と小文字を区別する文字列です。
品詞など。 タグ付きトークンはタプルとしてエンコードされます
(tag, token)
。 たとえば、次のタグ付きトークンは結合します
単語'fly'
と名詞の品詞タグ( 'NN'
):
>>> tagged_tok = ('fly', 'NN')
既製のタガーは英語で利用できます。 PennTreebankタグセットを使用します。
>>> from nltk import pos_tag, word_tokenize
>>> pos_tag(word_tokenize("John's big idea isn't all that bad."))
[('John', 'NNP'), ("'s", 'POS'), ('big', 'JJ'), ('idea', 'NN'), ('is', 'VBZ'),
("n't", 'RB'), ('all', 'PDT'), ('that', 'DT'), ('bad', 'JJ'), ('.', '.')]
lang = "rus"を指定すると、ロシア語のタガーも使用できます。 それは使用しています
ロシア国立コーパスタグセット:
>>> pos_tag(word_tokenize("Илья оторопел и дважды перечитал бумажку."), lang='rus') # doctest: +SKIP
[('Илья', 'S'), ('оторопел', 'V'), ('и', 'CONJ'), ('дважды', 'ADV'), ('перечитал', 'V'),
('бумажку', 'S'), ('.', 'NONLEX')]
このパッケージは、トークンのリストを取得するいくつかのタガーを定義します。
それぞれにタグを割り当て、タグ付きトークンの結果リストを返します。
ほとんどのタガーは、トレーニングコーパスに基づいて自動的に作成されます。
たとえば、ユニグラムタガーは、何をチェックすることによって各単語wにタグを付けます
wの最も頻繁なタグは、トレーニングコーパスにありました。
>>> from nltk.corpus import brown
>>> from nltk.tag import UnigramTagger
>>> tagger = UnigramTagger(brown.tagged_sents(categories='news')[:500])
>>> sent = ['Mitchell', 'decried', 'the', 'high', 'rate', 'of', 'unemployment']
>>> for word, tag in tagger.tag(sent):
... print(word, '->', tag)
Mitchell -> NP
decried -> None
the -> AT
high -> JJ
rate -> NN
of -> IN
unemployment -> None
タガーがトレーニング中に見なかった単語はタグを受け取ることに注意してください
None
。
トレーニング中に見られなかったデータでタガーを評価します。
>>> tagger.evaluate(brown.tagged_sents(categories='news')[500:600])
0.73...
詳細については、NLTKブックの第5章を参照してください。
"" "
from __future__ import print_function
nltk.tag.apiからインポートTaggerI
nltk.tag.utilからimportstr2tuple、tuple2str、untag
nltk.tag.sequentialインポートから(
SequentialBackoffTagger、
ContextTagger、
DefaultTagger、
NgramTagger、
UnigramTagger、
BigramTagger、
TrigramTagger、
AffixTagger、
RegexpTagger、
ClassifierBasedTagger、
ClassifierBasedPOSTagger、
)
nltk.tag.brillからインポートBrillTagger
nltk.tag.brill_trainerからインポートBrillTaggerTrainer
nltk.tag.tntからインポートTnT
nltk.tag.hunposからインポートHunposTagger
nltk.tag.stanfordからインポートStanfordTagger、StanfordPOSTagger、StanfordNERTagger
nltk.tag.hmmからインポートHiddenMarkovModelTagger、HiddenMarkovModelTrainer
nltk.tag.sennaからインポートSennaTagger、SennaChunkTagger、SennaNERTagger
nltk.tag.mappingからimporttagset_mapping、map_tag
nltk.tag.crfからインポートCRFTagger
nltk.tag.perceptronからインポートPerceptronTagger
nltk.data import loadから、検索
RUS_PICKLE =(
「taggers / averaged_perceptron_tagger_ru /averaged_perceptron_tagger_ru.pickle」
)
def _get_tagger(lang = None):
if lang == 'rus':
タガー= PerceptronTagger(False)
ap_russian_model_loc = 'ファイル:' + str(find(RUS_PICKLE))
tagger.load(ap_russian_model_loc)
そうしないと:
タガー= PerceptronTagger()
タガーを返す
def _pos_tag(tokens、tagset = None、tagger = None、lang = None):
#現在、英語とロシア語のみをサポートしています。
langが['eng'、 'rus']にない場合:
NotImplementedError(を発生させます
「現在、NLTKpos_tagは英語とロシア語のみをサポートしています」
"(つまり、lang = 'eng'またはlang = 'rus')"
)
そうしないと:
tags_tokens = tagger.tag(tokens)
タグセットの場合:#指定されたタグセットにマップします。
if lang == 'eng':
タグ付きトークン= [
(トークン、map_tag( 'en-ptb'、tagset、tag))
tags_tokensのfor(token、tag)
]
elif lang == 'rus':
#モデルの新しいRussionposタグには接尾辞が含まれていることに注意してください。
#https : //github.com/nltk/nltk/issues/2151#issuecomment-430709018を参照
タグ付きトークン= [
(トークン、map_tag( 'ru-rnc-new'、tagset、tag.partition( '=')[0]))
tags_tokensのfor(token、tag)
]
tagged_tokensを返す
def pos_tag(tokens、tagset = None、lang = 'eng'):
"" "
NLTKの現在推奨されている品詞タガーを使用して
指定されたトークンのリストにタグを付けます。
>>> from nltk.tag import pos_tag
>>> from nltk.tokenize import word_tokenize
>>> pos_tag(word_tokenize("John's big idea isn't all that bad."))
[('John', 'NNP'), ("'s", 'POS'), ('big', 'JJ'), ('idea', 'NN'), ('is', 'VBZ'),
("n't", 'RB'), ('all', 'PDT'), ('that', 'DT'), ('bad', 'JJ'), ('.', '.')]
>>> pos_tag(word_tokenize("John's big idea isn't all that bad."), tagset='universal')
[('John', 'NOUN'), ("'s", 'PRT'), ('big', 'ADJ'), ('idea', 'NOUN'), ('is', 'VERB'),
("n't", 'ADV'), ('all', 'DET'), ('that', 'DET'), ('bad', 'ADJ'), ('.', '.')]
NB. Use `pos_tag_sents()` for efficient tagging of more than one sentence.
:param tokens: Sequence of tokens to be tagged
:type tokens: list(str)
:param tagset: the tagset to be used, e.g. universal, wsj, brown
:type tagset: str
:param lang: the ISO 639 code of the language, e.g. 'eng' for English, 'rus' for Russian
:type lang: str
:return: The tagged tokens
:rtype: list(tuple(str, str))
"""
tagger = _get_tagger(lang)
return _pos_tag(tokens, tagset, tagger, lang)
def pos_tag_sents(sentences、tagset = None、lang = 'eng'):
"" "
NLTKの現在推奨されている品詞タガーを使用して、
与えられた文のリスト。それぞれがトークンのリストで構成されています。
:param tokens: List of sentences to be tagged
:type tokens: list(list(str))
:param tagset: the tagset to be used, e.g. universal, wsj, brown
:type tagset: str
:param lang: the ISO 639 code of the language, e.g. 'eng' for English, 'rus' for Russian
:type lang: str
:return: The list of tagged sentences
:rtype: list(list(tuple(str, str)))
"""
tagger = _get_tagger(lang)
return [_pos_tag(sent, tagset, tagger, lang) for sent in sentences]
最も参考になるコメント
前回のリリースは17回目ですが、これは後でマージされました