Nltk: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ языка Π½Π΅ пСрСдаСтся Π² nltk.tag .__ init __. Pos_tag_sents ()

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 20 нояб. 2018  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: nltk/nltk

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lang Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pos_tag_sents () Π² nltk / tag / __ init__.py Π½Π΅ пСрСдаСтся.

Π’ сочСтании с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ порядка ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π² фиксации 69583ceaaaff7e51dd9f07f4f226d3a2b75bea69 (строки 110-116 Π² nltk / tag / __ init__.py) это Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС NotImplementedError ('Π’ настоящСС врСмя NLTK pos_tag ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ английский ΠΈ русский языки (Ρ‚. eng 'ΠΈΠ»ΠΈ lang =' rus ')' "ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠ΅ прСдлоТСния.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ПослСдний выпуск - 17-ΠΉ, послС этого ΠΎΠ½ Π±Ρ‹Π» объСдинСн.

ВсС 5 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Запрос Π½Π° вытягиваниС: https://github.com/nltk/nltk/pull/2186

Бпасибо @ezhangsfl

Π― всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, хотя я ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎ послСднСй вСрсии ΠΈ попытался Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lang='eng' , Π½ΠΎ это Ρ‚ΠΎΠΆΠ΅ Π½Π΅ сработало. @ezhangsfll @stevenbird

ПослСдний выпуск - 17-ΠΉ, послС этого ΠΎΠ½ Π±Ρ‹Π» объСдинСн.

Π― всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, хотя я ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎ послСднСй вСрсии ΠΈ попытался Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ lang='eng' , Π½ΠΎ это Ρ‚ΠΎΠΆΠ΅ Π½Π΅ сработало. @ezhangsfll @stevenbird

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ содСрТимоС Ρ„Π°ΠΉΠ»Π° (__init__.py) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

- - ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°: utf-8 - -

Набор инструмСнтов для СстСствСнного языка: Ρ‚Π΅Π³Π΅Ρ€Ρ‹

#

Copyright (C) 2001-2019 ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΠ›Π’Πš

Автор: Π­Π΄Π²Π°Ρ€Π΄ Π›ΠΎΠΏΠ΅Ρ€ [email protected]

Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π΅Ρ€Π΄ [email protected] (Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дополнСния)

URL: http://nltk.org/

Для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ см. LICENSE.TXT.

"" "
ΠΠ›Π’Πš ВэггСры

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ содСрТит классы ΠΈ интСрфСйсы для части Ρ€Π΅Ρ‡ΠΈ
Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ»ΠΈ просто "Ρ‚Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅".

Β«Π’Π΅Π³Β» - это Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΊ рСгистру строка, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ свойство Ρ‚ΠΎΠΊΠ΅Π½Π°,
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Ρ‡ΠΈ. ΠœΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ
(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...

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π³Π»Π°Π²Π΅ 5 Книги ΠΠ›Π’Πš.
"" "
ΠΈΠ· __future__ import print_function

ΠΈΠ· nltk.tag.api ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ TaggerI
ΠΈΠ· nltk.tag.util import str2tuple, tuple2str, untag
ΠΈΠ· nltk.tag.sequential import (
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 import StanfordTagger, StanfordPOSTagger, StanfordNERTagger
ΠΈΠ· nltk.tag.hmm ΠΈΠΌΠΏΠΎΡ€Ρ‚ HiddenMarkovModelTagger, HiddenMarkovModelTrainer
ΠΈΠ· nltk.tag.senna import SennaTagger, SennaChunkTagger, SennaNERTagger
ΠΈΠ· nltk.tag.mapping import tagset_mapping, map_tag
ΠΈΠ· nltk.tag.crf ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ CRFTagger
ΠΈΠ· nltk.tag.perceptron import PerceptronTagger

ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° nltk.data, Π½Π°ΠΉΡ‚ΠΈ

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

def _get_tagger (lang = None):
Ссли lang == 'rus':
tagger = PerceptronTagger (Π›ΠΎΠΆΡŒ)
ap_russian_model_loc = 'file:' + str (Π½Π°ΠΉΡ‚ΠΈ (RUS_PICKLE))
tagger.load (ap_russian_model_loc)
Π΅Ρ‰Π΅:
tagger = PerceptronTagger ()
Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚Π΅Π³Π³Π΅Ρ€

def _pos_tag (Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, tagset = None, tagger = None, lang = None):
# Π’ настоящСС врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ английский ΠΈ русский языки.
Ссли lang нС в ['eng', 'rus']:
ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ NotImplementedError (
"Π’ настоящСС врСмя NLTK pos_tag ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ английский ΠΈ русский языки"
"(Ρ‚.Π΅. lang = 'eng' ΠΈΠ»ΠΈ lang = 'rus')"
)
Π΅Ρ‰Π΅:
tagged_tokens = tagger.tag (Ρ‚ΠΎΠΊΠ΅Π½Ρ‹)
if tagset: # БоотвСтствуСт ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Ρ‚Π΅Π³ΠΎΠ².
Ссли lang == 'eng':
tagged_tokens = [
(Ρ‚ΠΎΠΊΠ΅Π½, map_tag ('en-ptb', Π½Π°Π±ΠΎΡ€ Ρ‚Π΅Π³ΠΎΠ², Ρ‚Π΅Π³))
для (Ρ‚ΠΎΠΊΠ΅Π½Π°, Ρ‚Π΅Π³Π°) Π² tagged_tokens
]
elif lang == 'рус':
# ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ Russion pos ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ содСрТат суффиксы,
# см. https://github.com/nltk/nltk/issues/2151#issuecomment -430709018
tagged_tokens = [
(Ρ‚ΠΎΠΊΠ΅Π½, map_tag ('ru-rnc-new', tagset, tag.partition ('=') [0]))
для (Ρ‚ΠΎΠΊΠ΅Π½Π°, Ρ‚Π΅Π³Π°) Π² tagged_tokens
]
Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ tagged_tokens

def pos_tag (Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, 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 (прСдлоТСния, 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 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ