Как стать автором
Обновить
8
0
Давид Курякин @evil_factory

Пользователь

Отправить сообщение
Как поспешно Вы делаете выводы и навешиваете ярлыки…

В вебе предостаточно документов, скачав которые старым добрым урллибом и прогнав через чардет — получишь фигню. Я понимаю что такое кодировки и чем они отличаются от юникода. Рассуждать кто тут напортачил — это не особо полезная тема для обсуждения. И поверьте, в вебе множество случаев когда накосячили уже где-то заранее. Тут вопрос в другом. Не важно, u'йПЮЙНГЪАПШ АКЕЮРЭ' или 'йПЮЙНГЪАПШ АКЕЮРЭ' или ещё как то — чардет не поможет восстановить первоначальный текст.
готова поддержка python3
Пичаль. Хотя оно на python3 не заработает всё равно — код под python2 проточен без поддержки 3 ветки T_T

Поправлю это сегодня, спасибо! Жди версии 0.3.0
Спасибо за наводку, интересная штука. Но то что нужно не делает, насколько я понимаю. Либо я что-то не так сделал. Вот, смотри:

Сначала:
# sudo apt-get install python-pyicu


Далее в питончике:
import icu
print icu.CharsetDetector('ëÒÁËÏÚÑÂÒÙ').detect().getName()  # выведет UTF-8, мою локаль
print icu.CharsetDetector(u'привет'.encode('cp1251').decode('koi8-r').encode('cp1251')).detect().getName()  # выведет GB18030
Верно. Это, кстати, не учтено при написании ридми, но учтено в коде. Там есть удобная тулза для генерации словарей плюс-слов и 3-граммов. Так что, при желании всё это затачивается под нужную кириллицу довольно просто. По факту, чтобы законтрибьютить ещё один язык в библиотеку — нужно просто немного времени, текстовка для генерации словарей и список кодировок. Всё остальное в коде уже есть.

А ридми… Да, может стоит переписать на англ, но это уже как-нибудь потом в свободное время
Честно говоря я исходил из такой логики — разгадывать кириллические кракозябры может понадобиться только человеку который владеет… кириллице й!

В плане того, что говорит об этом политика pypi — не задумался как-то даже. Погуглю, если что ридми перепишу. Ну или ты может законтрибьютишь за спасибо? (:
Ну, фактически это означает что для решения данной задачи enca непригодна. Под «данной задачей» я понимаю получение строки «Кракозябры блеать» из строки «йПЮЙНГЪАПШ АКЕЮРЭ».
Допустим есть у тебя u'йПЮЙНГЪАПШ АКЕЮРЭ'. Как сделать из этого u'Кракозябры блеать' при помощи chardet? У меня не получилось.
Тут я вряд ли подскажу (: Но кажется что можно написать скриптик, который просто будет итерировать по файлам и заменять их метаданные. Наверное нужно посмотреть в сторону чего-то типа eyeD3
Да, я тоже изначально думал попробовать сделать решение на основе картинки из этого поста, но потом всё-таки решил делать на основе 3-граммов — это быстрее для реализации.
$ echo йПЮЙНГЪАПШ АКЕЮРЭ | enca -L russian
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from CP1251


Хотя

$ echo йПЮЙНГЪАПШ АКЕЮРЭ | iconv -f utf8 -t koi8r | iconv -f cp1251 -t utf-8
Кракозябры блеать


Или я неправильно готовлю enca?
По-моему, AlexeyTokar буквально в предыдущем комментарии предложил эту мысль, а я ответил почему это не то что нужно. А про phantomjs — штука хорошая, но не вполне понимаю для чего он тут нужен? Как он поможет в интерактивной разметке веб-страничек? Да и чем фантом удобнее PyQt4?
В целом со всеми замечаниями согласен и почти про все из них и так был в курсе. Тем не менее, в силу ограниченности свободного времени, выбор у меня был из 2-ух вариантов: выложить как есть и постепенно допиливать, или не выкладывать вообще, и не ясно когда ещё руки дойдут. Решил что первый вариант вполне приемлемый. Так что за замечания спасибо — учту. Но уже в следующих версиях.
Про замечание по поводу статьи в начале — полностью согласен. Однако, прошу заметить, что я и не писал что сделал что-то подобное. Упомянул её исключительно в сюжетном контексте (:
Да, так было бы правильно делать, если задача стоит выделять элемент на разных страницах одного ресурса. И то, в последнее время нельзя рассчитывать на фиксированную вёрстку и имена классов/айдишников.

В любом случае, основная мысль всего происходящего — это на основании обучения по страницам из разных ресурсов сделать алгоритм, умеющий распознавать целевой блок на всех ресурсах подобного класса.
По-умолчанию используется градиентный бустинг над деревьями решений. В целом, если глянуть код, становится понятно, что передать можно любой классификатор, т.к. функция которая производит обучение — это параметр в конструкторе. Если конкретнее, то текущая ф-ция обучения такая:

def train(classes, features):
    from sklearn.ensemble import GradientBoostingClassifier
    learner = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)
    clf = learner.fit(features, classes)
    result = clf.score(features, classes)
    return result, clf


И передаётся она в инстанс браузера при создании вот так:
trainer = GuiTrainer(train_function=train)


В целом, статья может и куцая, но смысл её не в освещении математических/алгоритмических аспектов, как я уже писал. Смысл — рассказать что есть вот такая библиотека и приветствуются все желающие принять участие в её допиливании. Если это не ясно из текста — прошу прощения за сумбурность изложения. Буду учиться лучше излагать свои мысли О_о
Кстати, чтобы код нормально работал под qt >= 5.0.1, нужно в myserver.h и myserver.cpp заменить сигнатуру
void incomingConnection(int handle);

на сигнатуру
void incomingConnection(qintptr handle);

Описание проблемы есть вот тут.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность