Nltk: Sprachparameter wird in nltk.tag.__init__.pos_tag_sents() nicht übergeben

Erstellt am 20. Nov. 2018  ·  5Kommentare  ·  Quelle: nltk/nltk

Der Parameter lang von pos_tag_sents() in nltk/tag/__init__.py wird nicht übergeben.

In Verbindung mit der Änderung der Ausnahmereihenfolge in Commit 69583ceaaaff7e51dd9f07f4f226d3a2b75bea69 (Zeilen 110-116 von nltk/tag/__init__.py) führt dies nun zu einem Fehler von "NotImplementedError('Currently, NLTK pos_tag supports=' and Russian ( langie eng' or lang='rus')'" beim Markieren eines Satzes.

Hilfreichster Kommentar

Letzte Veröffentlichung ist die 17., während diese nachträglich zusammengeführt wurde

Alle 5 Kommentare

Danke @ezhangsfl

Ich erhalte diese Fehlermeldung immer noch, obwohl ich auf die neuesten Dateien aktualisiert und auch versucht habe, den Parameter lang='eng' manuell hinzuzufügen, aber auch dies hat nicht funktioniert. @ezhangsfll @stevenbird

Letzte Veröffentlichung ist die 17., während diese nachträglich zusammengeführt wurde

Ich erhalte diese Fehlermeldung immer noch, obwohl ich auf die neuesten Dateien aktualisiert und auch versucht habe, den Parameter lang='eng' manuell hinzuzufügen, aber auch dies hat nicht funktioniert. @ezhangsfll @stevenbird

Ersetzen Sie den Inhalt der Datei (__init__.py) durch Folgendes:

- - Codierung: utf-8 - -

Toolkit für natürliche Sprache: Tagger

#

Copyright (C) 2001-2019 NLTK-Projekt

Autor: Edward Loper [email protected]

Steven Bird [email protected] (geringfügige Ergänzungen)

URL: http://nltk.org/

Lizenzinformationen finden Sie unter LICENSE.TXT

"""
NLTK-Tagger

Dieses Paket enthält Klassen und Schnittstellen für Wortart
Tagging oder einfach "Tagging".

Ein "Tag" ist eine Zeichenfolge, bei der die Groß-/Kleinschreibung beachtet wird, die eine Eigenschaft eines Tokens angibt.
wie seine Wortart. Markierte Token werden als Tupel codiert
(tag, token) . Zum Beispiel kombiniert das folgende getaggte Token
das Wort 'fly' mit einem Substantiv Wortart-Tag ( 'NN' ):

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

Ein Standard-Tagger ist für Englisch verfügbar. Es verwendet das Penn Treebank-Tagset:

>>> 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'), ('.', '.')]

Ein russischer Tagger ist auch verfügbar, wenn Sie lang="rus" angeben. Es verwendet
das Tagset des Russischen Nationalkorpus:

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

Dieses Paket definiert mehrere Tagger, die eine Liste von Token annehmen,
Weisen Sie jedem ein Tag zu und geben Sie die resultierende Liste der mit Tags versehenen Token zurück.
Die meisten Tagger werden automatisch basierend auf einem Trainingskorpus erstellt.
Zum Beispiel markiert der Unigram-Tagger jedes Wort w, indem er prüft, was
das häufigste Tag für w war in einem Trainingskorpus:

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

Beachten Sie, dass Wörter, die der Tagger während des Trainings nicht gesehen hat, ein Tag erhalten
von None .

Wir werten einen Tagger auf Daten aus, die während des Trainings nicht gesehen wurden:

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

Weitere Informationen finden Sie in Kapitel 5 des NLTK-Buches.
"""
aus __Zukunft__ Druckfunktion importieren

von nltk.tag.api importieren TaggerI
aus nltk.tag.util importieren str2tuple, tuple2str, untag
aus nltk.tag.sequential import (
SequentialBackoffTagger,
KontextTagger,
StandardTagger,
NgramTagger,
UnigramTagger,
BigramTagger,
TrigramTagger,
Tagger anbringen,
RegexpTagger,
ClassifierBasedTagger,
ClassifierBasedPOSTagger,
)
von nltk.tag.brill importieren BrillTagger
von nltk.tag.brill_trainer importieren BrillTaggerTrainer
von nltk.tag.tnt importieren TnT
von nltk.tag.hunpos importieren HunposTagger
von nltk.tag.stanford importieren StanfordTagger, StanfordPOSTagger, StanfordNERTagger
from nltk.tag.hmm import HiddenMarkovModelTagger, HiddenMarkovModelTrainer
von nltk.tag.senna importieren SennaTagger, SennaChunkTagger, SennaNERTagger
aus nltk.tag.mapping import tagsset_mapping, map_tag
von nltk.tag.crf importieren CRFTagger
von nltk.tag.perceptron importieren PerceptronTagger

aus nltk.data import laden, finden

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

def _get_tagger(lang=None):
if lang == 'rus':
tagger = PerceptronTagger(Falsch)
ap_russian_model_loc = 'Datei:' + str(find(RUS_PICKLE))
tagger.load(ap_russian_model_loc)
anders:
tagger = PerceptronTagger()
Rücksende-Tagger

def _pos_tag(tokens, tagset=Keine, tagger=Keine, lang=Keine):
# Derzeit werden nur Englisch und Russisch unterstützt.
if lang nicht in ['eng', 'rus']:
raise NotImplementedError(
"Derzeit unterstützt NLTK pos_tag nur Englisch und Russisch"
"(dh lang='eng' oder lang='rus')"
)
anders:
tagged_tokens = tagger.tag(token)
if tagset: # Wird dem angegebenen Tagset zugeordnet.
if lang == 'eng':
tagged_tokens = [
(token, map_tag('en-ptb', tagset, tag))
für (token, tag) in tagged_tokens
]
elif lang == 'rus':
# Beachten Sie, dass die neuen Russion-Pos-Tags des Modells Suffixe enthalten,
# siehe https://github.com/nltk/nltk/issues/2151#issuecomment -430709018
tagged_tokens = [
(token, map_tag('ru-rnc-new', tagset, tag.partition('=')[0]))
für (token, tag) in tagged_tokens
]
Tagged_tokens zurückgeben

def pos_tag(tokens, tagset=None, lang='eng'):
"""
Verwenden Sie den derzeit empfohlenen Wortarten-Tagger von NLTK, um
Markieren Sie die angegebene Liste von Token.

    >>> 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'):
"""
Verwenden Sie den derzeit empfohlenen Wortarten-Tagger von NLTK, um die
gegebene Liste von Sätzen, die jeweils aus einer Liste von Token bestehen.

: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]
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen