Nltk: 语言参数未在 nltk.tag.__init__.pos_tag_sents() 中传递

创建于 2018-11-20  ·  5评论  ·  资料来源: nltk/nltk

nltk/tag/__init__.py 中 pos_tag_sents() 的lang参数没有被传递。

再加上提交 69583ceaaaff7e51dd9f07f4f226d3a2b75bea69(nltk/tag/__init__.py 的第 110-116 行)中对异常排序的更改,现在会导致错误“NotImplementedError('目前,仅支持英语和俄语_tag eng' 或 lang='rus')'" 标记句子时。

最有用的评论

最后一次发布是第 17 次发布,之后合并

所有5条评论

拉取请求: https :

Thanks @ezhangsfl

即使我已更新到最新文件,并且还尝试手动添加lang='eng'参数,但我仍然收到此错误,但这也不起作用。 @ezhangsfll @stevenbird

最后一次发布是第 17 次发布,之后合并

即使我已更新到最新文件,并且还尝试手动添加lang='eng'参数,但我仍然收到此错误,但这也不起作用。 @ezhangsfll @stevenbird

将 (__init__.py) 文件的内容替换为以下内容:

- - 编码:utf-8 - -

自然语言工具包:标记器

#

版权所有 (C) 2001-2019 NLTK 项目

作者:Edward Loper [email protected]

Steven Bird [email protected] (少量补充)

网址: http :

有关许可证信息,请参阅 LICENSE.TXT

"""
NLTK 标记器

此包包含用于词性的类和接口
标记,或简称为“标记”。

“标签”是一个区分大小写的字符串,用于指定令牌的某些属性,
比如它的词性。 标记的标记被编码为元组
(tag, token) 。 例如,以下标记的令牌组合
单词'fly'带有名词词性标记( 'NN' ):

>>> tagged_tok = ('fly', 'NN')

有现成的英语标注器。 它使用 Penn Treebank 标记集:

>>> 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')]

这个包定义了几个标记器,它们接受一个令牌列表,
为每个标记分配一个标记,并返回标记标记的结果列表。
大多数标注器是基于训练语料库自动构建的。
例如,unigram 标注器通过检查什么来标记每个单词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 Book 的第 5 章。
"""
从 __future__ 导入 print_function

从 nltk.tag.api 导入 TaggerI
从 nltk.tag.util 导入 str2tuple, tuple2str, untag
从 nltk.tag.sequential 导入(
顺序退避标记器,
上下文标记器,
默认标记器,
NgramTagger,
一元标记器,
BiggramTagger,
TrigramTagger,
附加标签,
正则表达式标记器,
基于分类器的标记器,
基于分类器的POSTagger,
)
从 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 导入 tagset_mapping, map_tag
从 nltk.tag.crf 导入 CRFTagger
从 nltk.tag.perceptron 导入 PerceptronTagger

从 nltk.data 导入加载,找到

RUS_PICKLE = (
'标签/averaged_perceptron_tagger_ru/averaged_perceptron_tagger_ru.pickle'
)

def _get_tagger(lang=None):
如果 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(
“目前,NLTK pos_tag 仅支持英语和俄语”
“(即 lang='eng' 或 lang='rus')”
)
别的:
tagged_tokens = tagger.tag(tokens)
if tagset: # 映射到指定的标签集。
如果 lang == 'eng':
tagged_tokens = [
(令牌,map_tag('en-ptb',标签集,标签))
for (token, tag) in tagged_tokens
]
elif lang == 'rus':
# 请注意,模型中新的 Russion pos 标签包含后缀,
# 见https://github.com/nltk/nltk/issues/2151#issuecomment -430709018
tagged_tokens = [
(token, map_tag('ru-rnc-new', tagset, tag.partition('=')[0]))
for (token, tag) in tagged_tokens
]
返回 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]
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

mwess picture mwess  ·  5评论

zdog234 picture zdog234  ·  3评论

stevenbird picture stevenbird  ·  3评论

BLKSerene picture BLKSerene  ·  4评论

alvations picture alvations  ·  4评论