Как стать автором
Обновить

Комментарии 29

«if re.match('\w-\w', args.letters):»
неправильно же! вы проверяете что есть минус в строке, а если там будет, например, abcd-efgh?
вы будете делать только a-c!
а по опросу — хотелось бы осмотр главных плюсов, ради которых надо с пы2 на пы3 переходить. вот не вижу пока, даже под лупой.
скорость? разницы нет.
стабильность? разницы нет.
да вообще — разница? разницы ж нет…
По-моему, он местами чуточку логичнее.
Простой пример:
в py2 print — это что? По идее функция, но вызывается без ()
в py3 логично делается вызов print()
Да и не только это. Но не могу я с вами на эту тему спорить, ибо python2 я не знаю. Я просто начал изучать python, а зачем вникать в суть устаревающего языка, если всё равно идёт медленная миграция на python3.
Да и с точки зрения финансовой, будет повальный переход на py3, потребуются спецы, а большинство будет только py2 хорошо знать, ведь зачем учить новое, если есть старое?
Ну отчего же сразу удалять? Я с вами согласен.
А вообще приятно, что через 5 лет эта статья стала многим релевантна.
В конце треда тоже свежий коммент. И тоже сегодня…
Хм… Заговор? Не думаю…
Да, я это заметил, когда проводил финальную вёрстку, но исправлять не стал. Я знаю, как вызывать правильно, а неправильно — это домашняя работа для хабрачитателей.
В принципе, я это даже в самой статье подчеркнул.
Правильно будет так:
if re.match('^\w-\w$', args.letters):
то есть можно попросить при этом "_-w"? ;) и каков эффект будет? ;)
Хм. Думал, что \w — это любая буква, а \W — любая не-буква. Но ваш вариант даёт True.
Буду копать. Видимо есть различие в регулярных выражениях для перла и питона.
Регулярные я в перле учил когда-то.
Вот документация на модуль re. Там действительно написано \w = [A-Za-z0-9_]
Всё равно — вот так вот точно правильно:
if re.match('^([a-z]-[a-z])|([A-Z]-[A-Z])$', args.letters):
вот это — самый правильный вариант :)
Т.е. a-A не должно матчиться?

дык выше, в хелпе: print(«Error using letters. Only A-Z or a-z available, not A-z.»)
Нет. Об этом даже в статье написано. Правда, в коде:
print("Error using letters. Only A-Z or a-z available, not A-z.")

Хотя программа и способна отрисовать не только буквы, но и цифры, спец-символы и т.д., но тогда требуется её доработка.
Ну давно это было. Подзабылось.
Защиты от дурака в программе особо-то и не реализовано…
По поводу опроса.

Народ, вы молодцы, что голосуете, но хоть какие-нибудь пожелания-то оставляйте!
Картинок не хватает.
Можете считать меня дитём необразованным, но мне в статьях катострофически не хватает картинок, за которые можно зацепиться взглядом.
Дело в том, что в наш век информации в интернете очень много и становится ещё больше. И при наличии хорошей, годной статьи, бывает взглянешь на обилие буков и грустно становится. Я всеми фибрами ощущаю нехватку правильного способа переварить всю нужную мне информацию. Наличие картинок, скриншотов, диаграм, схем — в-общем каких-либо графических изображений ключевых моментов статьи, как мне думается, может поправить положение.
Таково моё мнение.
Понятно. Только в контексте данной статьи картинками могут быть разве что отрендеренные буквы.
А так — на будущее, буду иметь в виду. Спасибо.
Ну почему, как минимум график уменьшения ошибки, кросс-валидация. Структура сети (пусть и упрощенно).
Причем я уверен, что гуру питона наверняка найдут ещё кучу возможностей для оптимизации. Но зачем? Всё работает, код достаточно прост и лаконичен. Прям глаз радуется.

Это молодость, это пройдет. :)

def saveWrap(dir='.', letter='A', font=«Arial», size=40, align=Qt.AlignCenter):
png_file = dir + "/" + font + "_" + letter + "_" + str(size) + ".png"
save(png_file, letter, font, size, align)


имя в нестандартной нотации. www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables
Складывание кучи строк некрасиво. docs.python.org/3.3/library/string.html?highlight=string#format-examples
Функция совсем не нужна. Можно всю логику перенести в save

# net = buildNetwork(64 * 64, 8 * 8, 5, hiddenclass=TanhLayer)
# net = buildNetwork(64 * 64, 32 * 32, 8 * 8, 5)
net = buildNetwork(64 * 64, 5, hiddenclass=LinearLayer)

Перед публикацией вычитывайте код. Коментированные строки излишни.

print («img.load({0}) failed!».format(png_file))

Вначале подумал что атавизм из второго питона. Потому что данная строка будет там работать точно так же. Если ставите пробел между принтом и вызовом то ставьте его везде.

learn_path = os.path.abspath(args.learn_data_dir) + "/"

Попробуйте без слэша.

list_dir = os.listdir(dir_name)

Гляньте глоб docs.python.org/3.3/library/glob.html?highlight=glob.glob#glob.glob

Спасибо за библиотеку работы с картинками, а то PIL у меня под 7-64 заводится с бубнами.
1) про стандартные нотации был не в курсе, я же изучаю. Но про PEP8 слышал, код писал в sublime-text с модулем PEP8 autoformat. Редактор мне много всего подчеркивал и исправлял. А такая нотация именования у меня сохранилась из Qt.
Кстати, если обратите внимание, то в самой библиотеке PyBrain народ не придерживается этого правила.
2) сложение строк некрасиво, согласен
3) внедрение функционала генерации имени в саму функцию save() считаю неправильным архитектурно, ибо функция отвечает за сохранение. А вот saveWrap() надо было назвать generate_filename_and_save_it().
4)
Перед публикацией вычитывайте код. Коментированные строки излишни.

Строки оставлены специально. Если прочитать текст статьи, то там есть
Те, кому интересно, могут выбрать другие варианты, исправив/раскомментировав вызов функции buildNetwork() в файле brain.py.

5) про print: рефлекторная опечатка, если посмотрите код, то там где как — где с пробелом, где без.
6)
Попробуйте без слэша.
Пробовал. Программа будет работать некорректно. Надо тогда и функцию loadData() в нескольких местах править. Здесь уже лень сработала. Зачем править несколько мест, если можно поправить в одном.
7) гляну, спасибо. В книге по питону мне такого пока не попадалось.

И в заключение хочу добавить — большую часть замечаний можно было устранить просто написав в личку.
Но с другой стороны, кто-то ещё научится на моём примере.

Спасибо за развёрнутый, а главное — конструктивный комментарий.
Pillow is the «friendly» PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors.

Pillow >= 2.0.0 supports Python versions: 2.6, 2.7, 3.2, 3.3;

pypi.python.org/pypi/Pillow/2.0.0
Спасибо. Изучим.
Что вам интереснее больше? На чём сконцентрироваться при написании следующей статьи?

Было бы интересно почитать статью про использование SpeechRecognition, а конкретно Snowboy hotword detection.
Товарищ, почти 5 лет прошло. На 3 дня опоздали. А то вместе отпраздновали бы! ;)
Да знаю я, ошибся, думал новый пост. Послезавтра можно будет отпраздновать 5 лет 5 дней;)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории