Комментарии 59
класс. блеск. восторг.
сорок сороков плюсов.
сорок сороков плюсов.
Что касается последнего раздела, мне всегда было интересно, сколько же это – «дофига»
То есть алгоритм в принципе любую фразу/слово переведет в число, даже нечисловую?
Разумеется. Если в слове «жук» сделать две ошибки, то получится «ежик», и хотя это совершенно разные слова, с точки зрения программы они отличаются лишь наполовину.
Алгоритм помимо значения возвращает величину ошибки в пределах от 0 до 1. По ней можно сделать вывод, считать ли полученное число нужным Вам результатом или нет.
Алгоритм помимо значения возвращает величину ошибки в пределах от 0 до 1. По ней можно сделать вывод, считать ли полученное число нужным Вам результатом или нет.
https://ru.wikipedia.org/wiki/Тьма:
Тьма — число в старинном русском счёте, равное десяти тысячам в малом счёте либо миллиону (тьма великая).
Верно распознал, однако!
Класс!
Что больше интересно вам, читатели, сами алгоритмы или фрагменты кода?Алгоритмы!
Заголовок спойлера
GermanNumber.Parse(«VierUndFünfzigTausendDreiHundertAchtUndZwanzig»);
может быть распознано как «двадпать» или даже как «двапать»
Не знаю как в четверке, но в трешке можно было задать белый список слов
+ какое-нибудь огромное пенальти для слов не из словаря (language_model_penalty_non_dict_word)
+ белый список букв (tessedit_char_whitelist)
Сначала я использовал третью версию tesseract. Белый список символов позволил хорошо распознавать сами числа, но не текст прописью. Для некачественных изображений ситуация была ужасная. Кроме того, пенальти для слов не из словаря, – нерекомендуемое средство, оно не только не улучшает разбор, а напротив, зачастую ухудшает его.
Переход на четвертую версию позволил достаточно хорошо распознавать как числа, так и текст. Но в четвертой версии, по крайней мере пока, не поддерживается белый/черный список. Единственный вариант, как можно повлиять на разбор – переобучить tesseract, а это достаточно сложный процесс.
В целом же четверка дает значительно более качественный разбор, чем тройка при меньшем времени обработки, что для моей задачи критично.
Переход на четвертую версию позволил достаточно хорошо распознавать как числа, так и текст. Но в четвертой версии, по крайней мере пока, не поддерживается белый/черный список. Единственный вариант, как можно повлиять на разбор – переобучить tesseract, а это достаточно сложный процесс.
В целом же четверка дает значительно более качественный разбор, чем тройка при меньшем времени обработки, что для моей задачи критично.
плус стопятсот
Стотыщмильёнов?
— Три тысячи тридцатый!
— Моя фамилия Зозо, товарищ прапорщик.
— Моя фамилия Зозо, товарищ прапорщик.
Спасибо, интересный алгоритм, сразу несколько интересных решений применено.
В моменте, где идёт деление токена на части ввиду возможного слияния и есть проблема «двапать», показалось возможным решением сохранять варианты до последующего парсинга: «два пять» отсеклось бы как некорректный вариант. С другой стороны, давать некоторый штраф разделенным токенам по сравнению с исходными в любом случае нужно, и если на практике этого хватает, то и нет смысла усложнять.
В моменте, где идёт деление токена на части ввиду возможного слияния и есть проблема «двапать», показалось возможным решением сохранять варианты до последующего парсинга: «два пять» отсеклось бы как некорректный вариант. С другой стороны, давать некоторый штраф разделенным токенам по сравнению с исходными в любом случае нужно, и если на практике этого хватает, то и нет смысла усложнять.
Весьма впечатляющее качество распознавания!
Очень интересный код, спасибо! Сразу начал обдумывать возможное портирование на С :)
А что будет на «пять мультов»?
Будет 5.000.000. Хотя токена «мульт» нет существует, слово сопоставляется с токеном «миллион» функцией Вагнера-Фишера лучше, чем с другими токенами.
НЛО прилетело и опубликовало эту надпись здесь
Ну это из разряда фантастики. «вотьлум» сопоставилось с 800 с ошибкой 0.611, а «ьтяп» вообще ни с чем не сопоставилось. Итого 800.
НЛО прилетело и опубликовало эту надпись здесь
На самом деле, «осемнадцать» – интересный пример. Казалось бы, возможно равное сопоставление как с «восемнадцать», так и с «семнадцать», но добавление буквы «в» стоит немного дешевле, чем удаление «о», т.к. длина токена «восемнадцать» больше на 2 символа, получаем 1 / 12 (0.083) против 1 / 10 (0.100). Поэтому однозначный ответ – 18 с величиной ошибки 0.083.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Почему вы не хотите скачать проект и экспериментировать с ним сколько вам угодно? Ссылка на проект есть в статье.
Как мне кажется, для таких случаев стоит использовать какой-то параметр уверености. Например, рассматривать 2 наиболее вероятных варианта. И не парсить слово, если у них ошибки достаточно близки.
Но тут, конечно, от задачи зависит. Где-то может быть нужно распарсить любой ценой, а где-то неправильный или неоднозначный парсинг недопустим.
Надо закоммитить новые токены
1—4 Few (мало)
5—9 Several (несколько)
10—19 Pack (стая)
20—49 Lots (скопище)
50—99 Horde (орда)
100—249 Throng (толпа)
250—499 Swarm (туча)
500—999 Zounds (тьма)
более 1000 Legion (легион)
1—4 Few (мало)
5—9 Several (несколько)
10—19 Pack (стая)
20—49 Lots (скопище)
50—99 Horde (орда)
100—249 Throng (толпа)
250—499 Swarm (туча)
500—999 Zounds (тьма)
более 1000 Legion (легион)
Для этого надо научить выдавать диапазон, а не только число. Кстати, интересная мысль...
Это только когда астрологи объявят неделю токенов — тогда можно увеличить количество токенов и токенов-берсерков вдвое
Ага, и если это драконы, то всегда Few будет 4
А разве few не как "пара" переводилось?
А если привидения, то это вообще лучше описывать сложной функцией
Спасибо, очень доступно написано и интересно
ИМХО — в разделе экспертного мнения не хватает «до… я». Doomer3D можно Вас попросить прогнать через модель? Скриншот не обязателен, но результат очень интересен…
НЛО прилетело и опубликовало эту надпись здесь
А как насчет склонений и вариаций ошибок в них? Вещи вроде «восемьюстами пятьюдесятью пятью дисками», «к семистам тридцати восьми детям». Думаю, что в таких числах многие носители допускают ошибки, типа «к семьсот тридцати восьми детям». Как забарывали?
С иностранными языками как направлением развития мысль прикольная, но тут надо быть _очень_ осторожным: в разных языках сильно разные подходы к формированию чисел. В финском например правильным написанием многозначных чисел является слитное (стодвадцатьтритысячичетырестапятьдесятшесть), вне зависимости от их длины — надо заметно усложнять токенизацию, в немецком — тоже, кажется, слитно, но что важнее, там не очень «прямой» порядок числительных — в каждом классе (сотни-десятки единицы {тысяч, миллионов, <просто>}) там порядок сотни-единицы-десятки, если не говорить о словах, подобных английским eleven, twelve — 11 и 12. А что-то вроде 121 на немецком будет hunderteinundzwanzig — сто-один-и-двадцать, если пытаться воспроизвести это на русском.
Это тема для второй части.
Один из пользователей пообещал расписать правила для немецкого, для английского я и сам сделаю.
Если у кого есть желание, можете прислать мне на почту правила для интересующего вас языка (другими языкам я не владею), а я запилю конвертер для них.
Один из пользователей пообещал расписать правила для немецкого, для английского я и сам сделаю.
Если у кого есть желание, можете прислать мне на почту правила для интересующего вас языка (другими языкам я не владею), а я запилю конвертер для них.
Я в общем и целом описал то, что сам знаю (финский покрывается этим описанием примерно полностью — всё как у нас примерно, но слитно) — практического интереса у меня нет совсем, посмотреть на результат/почитать статью я бы с радостью. Плюсиком бы наградил что за эту, что за грядущую, но кармы нет. :)
НЛО прилетело и опубликовало эту надпись здесь
Базовый алгоритм парсинга числа:
Вход: «двадцать девятнадцать»
Токены: 20, 19
Уровни: 2, 1
Результат: 39?
Вход: «двадцать девятнадцать»
Токены: 20, 19
Уровни: 2, 1
Результат: 39?
Спасиьо, я джва года этого ждал!
Интересно, что я «работаю» с обратной стороны. У меня капча «уродует» числа, чтобы их трудно было распознать.
Кто победит, моя капча или ваш парсер? :)
warcry.ru/api/v1/captcha_test?digits=4
Количество знаков от 1 до 16.
Кто победит, моя капча или ваш парсер? :)
warcry.ru/api/v1/captcha_test?digits=4
Количество знаков от 1 до 16.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Умный парсер числа, записанного прописью