Адаптация главы 1 + некоторые мысли

238 views
Skip to first unread message

Mikhail Korobov

unread,
Apr 3, 2012, 9:10:07 PM4/3/12
to nltk-r...@googlegroups.com

Что предлагаю адаптировать:

Getting Started with Python

версия питона - там предлагается 2.4 и 2.5. Под 2.4 nltk не работает, 2.5 устарела (и части nltk под 2.5 тоже уже не работают), предлагаю писать 2.6 и 2.7. 

Кроме того, там советуют IDLE - предлагаю это выкинуть, т.к. IDLE глючно работает с не-ascii строками и юникодом, да и python-сообщество на него более-менее забило уже. Мне кажется, лучше советовать обычная консоль питонью (python) или продвинутую (ipython) - в консоли с юникодом проблем не будет. В ipython были проблемы с юникодом в 0.10.x, но в последних версиях все работает отлично. IDLE обернется кучей проблем.

Getting Started with NLTK
В этом разделе есть примеры работы с текстами. Тут есть 2 вопроса-тонкости.

1. Все тексты - на английском. Будем предоставлять русский текст?

2. Просматривать значения тут (и дальше почти везде) предлагается обычно вот так:

>>> text1 

<Text: Moby Dick by Herman Melville 1851>

 



При этом у объекта text1 вызывается метод __repr__. Этот метод должен возвращать байтовую строку, а не юникод; если он вернет не-ascii-символы, то нельзя гарантировать, что все не упадет с UnicodeEncodeError (т.к. кодировка консоли везде разная). Поэтому мы должны как-то придумать, как печатать русские строки и тд. в консоли и поправить примеры. 

Для unicode-строк должен везде работать print (просто ввод строки и нажатие "Enter" в python 2 работать не будет - точнее, будет, но напечатана будет непонятная последовательность \uxxxx символов). Для более сложных объектов решение (довольно хакерское) есть тут: 



text3.count("smote")
Для русских строк нужно использовать юникодные строки: russian_text.count(u'поразил') - с буквой 'u' спереди. Это может быть неочевидно для новичков в питоне и мне кажется, что на это стоит заострить внимание. 

Spoken Dialog Systems


Для этого раздела хорошо бы адаптировать одного из чат-ботов.

==============================================

Итоговый TODO-максимум по адаптации 1 главы:

1. Предложить более удобный для работы инструментарий (тот, который предлагается в книге, создаст проблемы при работе с русским языком).
2. Сделать небольшой раздел, где бы объяснялась работа с unicode во 2м питоне, т.к. с русским языком предвижу очень много UnicodeDecodeError и UnicodeEncodeError у новичков. Готов его написать. Раздел должен быть понятен для новичков, не быть слишком техническим, но давать правильное понимание - я надеюсь, тут есть новички в питоне, но гуру лингвистики, которые смогут сказать, получилось или нет, что понятно, а что не понятно?
3. Адаптировать какой-либо текст для примеров (предоставить к нему интерфейс). Наверное, лучше всего известный из классической литературы, т.к. там нет проблем с лицензиями (но и любой другой подойдет, в принципе). В следующих главах, вроде бы, еще несколько текстов могут понадобиться.
4. Исправить все примеры, чтоб они по максимально корректно работали с русским языком. 
5. Сделать чат-бота на русском языке.

Предложения, замечания, мысли?

Alisa_IPN

unread,
Apr 4, 2012, 12:07:15 AM4/4/12
to nltk-russian
по п3 я могу тебе выслать много книг в формате txt на русском. Все -
классическая литература. Это и были бесплатные корпуса, там даже к
ним параллельная часть есть (оригинальный текст, т.к. книги в основном
переводные), если понадобится.

Хм, т.к. много книг, наверное, и не надо, то вышлю парочку, только до
инста доберусь.

> решение (довольно хакерское) есть тут:http://stackoverflow.com/questions/3557095/printing-objects-and-unico...


> - оно может потребовать патчей в nltk или просто использоваться в наших
> адаптированных ресурсах.
>
> Вот этот пример:
>

> >>> sorted(set(text3)) [image: [1]] <http://nltk.googlecode.com/svn/trunk/doc/book/ch01.html#ref-sorted-set>['!', "'", '(', ')', ',', ',)', '.', '.)', ':', ';', ';)', '?', '?)','A', 'Abel', 'Abelmizraim', 'Abidah', 'Abide', 'Abimael', 'Abimelech','Abr', 'Abrah', 'Abraham', 'Abram', 'Accad', 'Achbor', 'Adah', ...]

Alisa_IPN

unread,
Apr 4, 2012, 12:30:28 AM4/4/12
to nltk-russian
По п.2
А 100% примеров будут давать проблемы с кодировкой или только те, что
используют print?
Не знаю, насколько разумно, можно было бы оставить что-то простое,
где разбираются послед-ти букв и т.п., с латинсикми буквами... А
прмеры, где не предвидится проблем с кодировкой (статистика,
например), на русском корпусе. Хотя, наверное, там все потом по
нарастающей базируется на простых примерах?

Mikhail Korobov

unread,
Apr 4, 2012, 12:57:51 AM4/4/12
to nltk-r...@googlegroups.com
по п.2 - во все примеры, где печатается русская текстовая строка, нужно будет добавить print. Например, если в оригинале такой пример:

>>> word
Hello!

то нам его нужно будет заменить на

>>> print word
Привет! 

Но если печатается не просто отдельная текстовая, а какой-то более сложный объект (например, массив строк, или объект из nltk), то каждый раз нужно будет придумывать что-то. Вот простой пример, который показывает проблему (и как ее можно решить для списка строк):

>>> lst = [u'Вася', u'Петя']
>>> lst
[u'\u0412\u0430\u0441\u044f', u'\u041f\u0435\u0442\u044f']
>>> print lst
[u'\u0412\u0430\u0441\u044f', u'\u041f\u0435\u0442\u044f']
>>> lst[0]
u'\u0412\u0430\u0441\u044f'
>>> print lst[0]
Вася

Для более сложных объектов могут потребоваться патчи в nltk, не всегда хорошие. В третьем питоне проблемы нет (и буквы u не нужны):

>>> lst = ['Вася', 'Петя']
>>> lst
['Вася', 'Петя']

Проблема не то чтобы очень серьезная, но для новичков неприятная, третий питон для обучения подходит лучше, т.к. там таких непонятных вещей меньше.

среда, 4 апреля 2012 г. 10:30:28 UTC+6 пользователь Alisa_IPN написал:

Egor Kazachkov

unread,
Apr 4, 2012, 5:21:50 AM4/4/12
to nltk-russian
По поводу третьего питона (цитата с ntlk.org):

Download Mar 9, 2012 4:02 AM by Steven Bird
Although Python 3.0 is now available, NLTK has not yet been ported.

Так что пока третий Питон отпадает. Мне кажется, что небольшого
раздела, описывающего работу с Юникодом в Python 2.6 - 2.7, будет
вполне достаточно.

Reply all
Reply to author
Forward
0 new messages