Nltk: Parameter bahasa tidak diteruskan di nltk.tag.__init__.pos_tag_sents()

Dibuat pada 20 Nov 2018  ·  5Komentar  ·  Sumber: nltk/nltk

Parameter lang dari pos_tag_sents() di nltk/tag/__init__.py tidak diteruskan.

Ditambah dengan perubahan ke pengecualian pemesanan di commit 69583ceaaaff7e51dd9f07f4f226d3a2b75bea69 (baris 110-116 dari nltk/tag/__init__.py), ini sekarang menghasilkan kesalahan "NotImplementedError('Saat ini, NLTK pos_tag hanya mendukung bahasa Inggris dan Rusia (yaitu lang=' eng' atau lang='rus')'" saat menandai kalimat.

Komentar yang paling membantu

Rilis terakhir adalah tanggal 17 sedangkan ini digabung setelahnya

Semua 5 komentar

Terima kasih @ezhangsfl

Saya masih menerima kesalahan ini meskipun saya telah memperbarui ke file terbaru dan juga mencoba menambahkan parameter lang='eng' secara manual, tetapi ini juga tidak berhasil. @ezhangsfll @stevenbird

Rilis terakhir adalah tanggal 17 sedangkan ini digabung setelahnya

Saya masih menerima kesalahan ini meskipun saya telah memperbarui ke file terbaru dan juga mencoba menambahkan parameter lang='eng' secara manual, tetapi ini juga tidak berhasil. @ezhangsfll @stevenbird

Ganti konten file (__init__.py) dengan yang berikut:

- - pengkodean: utf-8 - -

Perangkat Bahasa Alami: Penanda

#

Hak Cipta (C) Proyek NLTK 2001-2019

Penulis: Edward Loper [email protected]

Steven Bird [email protected] (tambahan kecil)

URL: http://nltk.org/

Untuk informasi lisensi, lihat LICENSE.TXT

"""
Penanda NLTK

Paket ini berisi kelas dan antarmuka untuk part-of-speech
penandaan, atau hanya "penandaan".

"Tag" adalah string peka huruf besar/kecil yang menentukan beberapa properti token,
seperti bagian dari pidatonya. Token yang ditandai dikodekan sebagai tupel
(tag, token) . Misalnya, token yang ditandai berikut menggabungkan
kata 'fly' dengan kata benda tag part of speech ( 'NN' ):

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

Sebuah tagger off-the-shelf tersedia untuk bahasa Inggris. Ini menggunakan taget 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'), ('.', '.')]

Tagger Rusia juga tersedia jika Anda menentukan lang="rus". Ini menggunakan
taget Korpus Nasional Rusia:

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

Paket ini mendefinisikan beberapa penanda, yang mengambil daftar token,
tetapkan tag untuk masing-masing, dan kembalikan daftar token yang diberi tag.
Sebagian besar penanda dibuat secara otomatis berdasarkan korpus pelatihan.
Misalnya, penanda unigram menandai setiap kata w dengan mencentang apa
tag yang paling sering untuk w ada di korpus pelatihan:

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

Perhatikan bahwa kata-kata yang belum terlihat oleh tagger selama pelatihan menerima tag
dari None .

Kami mengevaluasi penanda pada data yang tidak terlihat selama pelatihan:

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

Untuk informasi lebih lanjut, silakan baca bab 5 Buku NLTK.
"""
dari __future__ impor print_function

dari nltk.tag.api impor TaggerI
dari nltk.tag.util import str2tuple, tuple2str, untag
dari nltk.tag.sequential impor (
Penanda Backoff berurutan,
Penanda Konteks,
Tag Default,
NgramTagger,
UnigramTagger,
BigramTagger,
penanda trigram,
Penanda Afiks,
RegexpTagger,
PengklasifikasiBerbasisTagger,
PengklasifikasiBerbasisPOSTagger,
)
dari nltk.tag.brill impor BrillTagger
dari nltk.tag.brill_trainer impor BrillTaggerTrainer
dari nltk.tag.tnt impor TnT
dari nltk.tag.hunpos impor HunposTagger
dari nltk.tag.stanford impor StanfordTagger, StanfordPOSTagger, StanfordNERTagger
dari nltk.tag.hmm impor HiddenMarkovModelTagger, HiddenMarkovModelTrainer
dari nltk.tag.senna impor SennaTagger, SennaChunkTagger, SennaNERTagger
dari nltk.tag.mapping impor tagset_mapping, map_tag
dari nltk.tag.crf impor CRFTagger
dari nltk.tag.perceptron impor PerceptronTagger

dari beban impor nltk.data, temukan

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

def _get_tagger(lang=Tidak ada):
if lang == 'rus':
penanda = PerceptronTagger(Salah)
ap_russian_model_loc = 'file:' + str(temukan(RUS_PICKLE))
tagger.load(ap_russian_model_loc)
lain:
penanda = PerceptronTagger()
penanda kembali

def _pos_tag(token, tagset=Tidak ada, tagger=Tidak ada, lang=Tidak ada):
# Saat ini hanya mendukung bahasa Inggris dan Rusia.
jika lang tidak di ['eng', 'rus']:
naikkan NotImplementedError (
"Saat ini, NLTK pos_tag hanya mendukung bahasa Inggris dan Rusia "
"(yaitu lang='eng' atau lang='rus')"
)
lain:
tagged_token = tagger.tag(token)
if tagset: # Memetakan ke tagset yang ditentukan.
if lang == 'eng':
tag_token = [
(token, map_tag('en-ptb', tagset, tag))
untuk (token, tag) di tagged_tokens
]
elif lang == 'rus':
# Perhatikan bahwa tag pos Russion baru dari model berisi sufiks,
# lihat https://github.com/nltk/nltk/issues/2151#issuecomment -430709018
tag_token = [
(token, map_tag('ru-rnc-new', tagset, tag.partition('=')[0]))
untuk (token, tag) di tagged_tokens
]
kembalikan tag_token

def pos_tag(token, tagset=Tidak ada, lang='eng'):
"""
Gunakan penanda bagian ucapan yang saat ini direkomendasikan NLTK untuk
menandai daftar token yang diberikan.

    >>> 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(kalimat, tagset=Tidak ada, lang='eng'):
"""
Gunakan penanda bagian ucapan yang saat ini direkomendasikan NLTK untuk menandai
diberikan daftar kalimat, masing-masing terdiri dari daftar token.

: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]
Apakah halaman ini membantu?
0 / 5 - 0 peringkat