Nltk: Paramètre de langue non transmis dans nltk.tag.__init__.pos_tag_sents()

Créé le 20 nov. 2018  ·  5Commentaires  ·  Source: nltk/nltk

Le paramètre lang de pos_tag_sents() dans nltk/tag/__init__.py n'est pas transmis.

Couplé à la modification de l'ordre des exceptions dans le commit 69583ceaaaff7e51dd9f07f4f226d3a2b75bea69 (lignes 110-116 de nltk/tag/__init__.py), cela entraîne désormais une erreur de "NotImplementedError ('Actuellement, NLTK pos_tag ne prend en charge que l'anglais et le russe (c'est-à-dire lang=') eng' ou lang='rus')'" lors du marquage d'une phrase.

Commentaire le plus utile

La dernière version est la 17 alors qu'elle a été fusionnée par la suite

Tous les 5 commentaires

Merci @ezhangsfl

Je reçois toujours cette erreur même si j'ai mis à jour les derniers fichiers et essayé d'ajouter manuellement le paramètre lang='eng' , mais cela n'a pas non plus fonctionné. @ezhangsfll @stevenbird

La dernière version est la 17 alors qu'elle a été fusionnée par la suite

Je reçois toujours cette erreur même si j'ai mis à jour les derniers fichiers et essayé d'ajouter manuellement le paramètre lang='eng' , mais cela n'a pas non plus fonctionné. @ezhangsfll @stevenbird

Remplacez le contenu du fichier (__init__.py) par ce qui suit :

- - codage : utf-8 - -

Boîte à outils du langage naturel : tagueurs

#

Copyright (C) 2001-2019 Projet NLTK

Auteur : Edward Loper [email protected]

Steven Bird [email protected] (ajouts mineurs)

URL : http://nltk.org/

Pour plus d'informations sur la licence, voir LICENSE.TXT

"""
Marqueurs NLTK

Ce paquet contient des classes et des interfaces pour la partie du discours
marquage, ou simplement "marquage".

Un "tag" est une chaîne sensible à la casse qui spécifie une propriété d'un jeton,
comme sa partie du discours. Les jetons marqués sont encodés sous forme de tuples
(tag, token) . Par exemple, le jeton balisé suivant combine
le mot 'fly' avec une partie nominale de la balise vocale ( 'NN' ):

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

Un étiqueteur standard est disponible pour l'anglais. Il utilise le jeu de balises 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'), ('.', '.')]

Un tagueur russe est également disponible si vous spécifiez lang="rus". Il utilise
le jeu de balises Corpus national russe :

>>> pos_tag(word_tokenize("Илья оторопел и дважды перечитал бумажку."), lang='rus')    # doctest: +SKIP
[('Илья', 'S'), ('оторопел', 'V'), ('и', 'CONJ'), ('дважды', 'ADV'), ('перечитал', 'V'),
('бумажку', 'S'), ('.', 'NONLEX')]

Ce package définit plusieurs tagueurs, qui prennent une liste de jetons,
attribuer une balise à chacun et renvoyer la liste résultante des jetons balisés.
La plupart des tagueurs sont construits automatiquement sur la base d'un corpus d'apprentissage.
Par exemple, le tagueur unigram balise chaque mot w en vérifiant ce que
la balise la plus fréquente pour w était dans un corpus d'apprentissage :

>>> 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

Notez que les mots que le tagueur n'a pas vu pendant l'entraînement reçoivent un tag
de None .

Nous évaluons un tagueur sur des données qui n'ont pas été vues pendant l'entraînement :

>>> tagger.evaluate(brown.tagged_sents(categories='news')[500:600])
0.73...

Pour plus d'informations, veuillez consulter le chapitre 5 du livre NLTK.
"""
de __future__ import print_function

de nltk.tag.api importer TaggerI
de nltk.tag.util importer str2tuple, tuple2str, untag
à partir de nltk.tag.sequential import (
SequentialBackoffTagger,
ContextTagger,
DefaultTagger,
NgramTagger,
UnigramTagger,
BigramTagger,
TrigramTagger,
AffixTagger,
RegexpTagger,
ClassificateurBaséTagger,
ClassificateurBaséPOSTagger,
)
de nltk.tag.brill importer BrillTagger
de nltk.tag.brill_trainer importer BrillTaggerTrainer
de nltk.tag.tnt importer TnT
de nltk.tag.hunpos importer HunposTagger
de nltk.tag.stanford importer StanfordTagger, StanfordPOSTagger, StanfordNERTagger
de nltk.tag.hmm importer HiddenMarkovModelTagger, HiddenMarkovModelTrainer
de nltk.tag.senna importer SennaTagger, SennaChunkTagger, SennaNERTagger
de nltk.tag.mapping importer tagset_mapping, map_tag
de nltk.tag.crf importer CRFTagger
de nltk.tag.perceptron importer PerceptronTagger

à partir de la charge d'importation nltk.data, recherchez

RUS_PICKLE = (
'taggers/averaged_perceptron_tagger_ru/averaged_perceptron_tagger_ru.pickle'
)

def _get_tagger(lang=Aucun) :
si lang == 'rus' :
tagger = PerceptronTagger (faux)
ap_russian_model_loc = 'fichier :' + str(trouver(RUS_PICKLE))
tagger.load(ap_russian_model_loc)
autre:
tagueur = PerceptronTagger()
étiqueteur de retour

def _pos_tag(tokens, tagset=Aucun, tagger=Aucun, lang=Aucun) :
# Actuellement, ne supporte que l'anglais et le russe.
si lang n'est pas dans ['eng', 'rus'] :
augmenter NotImplementedError(
"Actuellement, NLTK pos_tag ne prend en charge que l'anglais et le russe "
"(c'est-à-dire lang='eng' ou lang='rus')"
)
autre:
tagged_tokens = tagger.tag(jetons)
if tagset : # Correspond au jeu de balises spécifié.
si lang == 'fra' :
tagged_tokens = [
(jeton, map_tag('en-ptb', jeu de balises, balise))
pour (jeton, balise) dans tagged_tokens
]
elif lang == 'rus' :
# Notez que les nouvelles balises Russion pos du modèle contiennent des suffixes,
# voir https://github.com/nltk/nltk/issues/2151#issuecomment -430709018
tagged_tokens = [
(jeton, map_tag('ru-rnc-new', jeu de balises, balise.partition('=')[0]))
pour (jeton, balise) dans tagged_tokens
]
retourner tagged_tokens

def pos_tag(tokens, tagset=None, lang='eng'):
"""
Utilisez la partie actuellement recommandée par NLTK du marqueur vocal pour
tag la liste de jetons donnée.

    >>> 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(phrases, tagset=Aucun, lang='eng'):
"""
Utilisez la partie actuellement recommandée par NLTK du marqueur vocal pour marquer le
liste donnée de phrases, chacune consistant en une liste de jetons.

: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]
Cette page vous a été utile?
0 / 5 - 0 notes