• OCR для PDF в среде .NET — как извлечь текст из недоступных для поиска PDF документов

    • Translation
    • Tutorial

    Извлечение текста — одна из популярных задач обработки PDF документов. Вам потребуется извлечь текст из PDF, чтобы:


    • проиндексировать документ для полнотекстового поиска
    • распарсить некоторые данные (например, названия и цены товаров в прайс-листе)
    • выделить, удалить или заменить некоторое слово или фразу

    Извлечь текст вручную можно так: откройте документ в любом PDF просмотрщике, выделите и скопируйте текст. В большинстве документов это сработает. Такие документы называются "доступные для поиска PDF" или "searchable PDF". Текст в них выводится с помощью специальных PDF операторов, а связанные объекты шрифтов содержат правильную информация о соответствии глифов значениям Unicode.


    Многие PDF библиотеки умеют извлекать текст из доступных для поиска PDF.


    Однако, часто встречаются и недоступные для поиска PDF ("non-searchable PDF") документы. В них текст обычно выводится как растровое изображение. Типичный пример — сканированный PDF документ. Также текст в недоступных для поиска PDF может выводиться векторными путями без использования шрифтов и специальных PDF операторов.


    Для извлечения текста из недоступных для поиска PDF выполняйте оптическое распознавание текста (OCR). Оптическое распознавание не гарантирует правильного извлечения текста в 100% случаев. Результат зависит от качества документа и алгоритма распознавания. Также OCR существенно медленней, чем извлечение текста из доступных для поиска PDF.


    Посмотрим, как выполнить оптическое распознавание и извлечь текст из PDF документов в программе для платформы .NET.

    Читать дальше →
  • Что нового в C# 8?

      «Восьмерка» еще даже не вышла RTM а я уже пишу про нее пост. Зачем? Ну, основная идея что тот, кто предупрежден — вооружен. Так что в этом посте будет про то что известно на текущий момент, а если это все подстава, ну, поделом.


      Читать дальше →
    • Асинхронный рассинхрон: антипаттерны в работе с async/await в .NET

      Кто из нас не косячит? Я регулярно встречаюсь с ошибками в асинхронном коде и делаю их сам. Чтобы прекратить это колесо Сансары делюсь с вами самыми типичными косяками из тех, которые иногда довольно сложно отловить и починить.



      Читать дальше →
    • Mask R-CNN: архитектура современной нейронной сети для сегментации объектов на изображениях



        Времена, когда одной из самых актуальных задач компьютерного зрения была способность отличать фотографии собак от фотографий кошек, уже остались в прошлом. На данный момент нейронные сети способны выполнять куда более сложные и интересные задания по обработке изображений. В частности, сеть с архитектурой Mask R-CNN позволяет выделять на фотографиях контуры («маски») экземпляров разных объектов, даже если таких экземпляров несколько, они имеют различный размер и частично перекрываются. Сеть так же способна к распознаванию поз людей на изображении.
        Читать дальше →
        • +19
        • 43.9k
        • 9
      • Автоэнкодеры и сильный искусственный интеллект

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

          В статье предложен оригинальный математический аппарат «набор автоэнкодеров с общим латентным пространством», который позволяет выделять абстрактные понятия из входных данных и демонстрирует способность к «one-shot learning». Кроме того, с его помощью можно преодолеть многие фундаментальные проблемы современных алгоритмов машинного обучения, основанных на многослойных сетях и подходе «Deep learning».
          Читать дальше →
        • Создание «искусственной жизни» на компьютере

          • Tutorial
          Всем привет. В статье хочу описать свой эксперимент по созданию «искусственной жизни» на компьютере.

          Как это выглядит?

          картинка кликабельна

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

          Ну а дальше за работу принимается эволюция и естественный отбор.

          А мне остаётся только наблюдать за развитием мира.

          Чем неожиданнее для создателя и многообразней будут варианты развития мира, тем более удачным можно считать эксперимент.

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

          Именно код и является геномом, который отвечает за поведение бота и который будет изменяться в процессе эволюции.

          Внутреннее устройство кода — это самое интересное в проекте.

          Код должен быть простым и выдерживать различные модификации (случайное изменение любого элемента в коде) над собой без синтаксических ошибок.
          Читать дальше →
        • 10 причин использовать айтрекинг или отказаться от него навсегда



            Айтрекинг для UX-аналитиков — как пицца с ананасами. Одни считают эту технологию сомнительной, а другие от нее в восторге. Мы собрали аргументы «за» и «против».
            Читать дальше →
            • +21
            • 3.6k
            • 1
          • Ещё одна погоня за мечтой. RTS + eyetracker руками студента

            Привет.

            Сегодня я расскажу вам об очередной фанатичной домашней разработке, о том, насколько далеко может завести интерес и упорство, и о том, обо что они ломаются. В целом все довольно стандартно для таких историй.

            Под катом вы увидите: подробную историю создания RTS своими руками (концепция, код, интерфейс, баланс, карта, модели) и эксперимент по привязыванию к ней айтрекера как средства ввода.


            Читать дальше →
          • Расширение процесса сборки с помощью MSBuild

            Цель статьи — рассказать немного о MSBuild, показать что такое таргеты и таски в MSBuild, научить работать с файлом .csproj, дать полезные ссылки. Если у вас будет более подходящее название для статьи, то буду рад обсудить в комментариях.

            Меню


            Читать дальше →
          • Про рынок ИТ в России по-честному

              В последние несколько лет мои переживания по поводу российского рынка ИТ только усиливались. Все началось с кризиса рубля 2014 года (а может, и раньше), и с тех пор меня не покидает ощущение, что многие российские компании, особенно провинциальные, завязали себе глаза, заткнули ватой уши и все еще пытаются сделать вид, что ничего не происходит. Я много общался с разными компаниями, с HR, с разработчиками, и составил список неутешительных тезисов о том, что представляет собой как программистский рынок, так и культура разработки в целом, ведь это вещи взаимосвязанные. По моим субъективным оценкам, эти тезисы справедливы для ~60% российских компаний, хотя, казалось бы, те другие 40% компаний, которые мы знаем и любим, должны были заставить задуматься. Но я очень подозреваю, что это эти 60% просто надеются на русский “авось”, и подвергаются так называемой willful blindness, а иногда и намеренно мутят воду. Итак, по-честному, что же происходит?

              Дисклеймер 1. Ни ссылок, ни имен, ни пруфов не будет. Как известно, в Интернете можно найти подтверждение или опровержение любому тезису, поэтому не вижу большого в том смысла, покуда это не диссертация, а мнение. Моя цель — предоставить другую точку зрения, основанную на личностном опыте веры на личном опыте.

              Дисклеймер 2. В статье приводится собирательный образ. Вряд ли стоит ожидать, что есть стопроцентное совпадение хотя бы с одной компанией. Те или иные черты могут встречаться там или здесь; важно не то, что есть какие-то конкретные компании с этими проблемами. Важно то, что сами по себе проблемы существуют, и о них надо говорить.
              Читать дальше →
            • Компактный сериализатор для кэша c использованием System.Reflection.Emit



              В современных сервисах без кэша никуда: доступ к данным в персистентной базе – дело долгое и затратное, поэтому добавление промежуточного хранилища для наиболее часто используемых данных значительно его ускоряет. Держать в кэше информацию можно самую разную и в разной форме: и строки, и списки, и состояние сессии, и многое другое. В данной статье речь пойдёт об одном из способов хранении в кэше «плоских» объектов, не имеющих вложенных классов и циклических ссылок.
              Читать дальше →
            • Нейросетевой синтез речи своими руками

              Синтез речи на сегодняшний день применяется в самых разных областях. Это и голосовые ассистенты, и IVR-системы, и умные дома, и еще много чего. Сама по себе задача, на мой вкус, очень наглядная и понятная: написанный текст должен произноситься так, как это бы сделал человек.

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



              Я решил попробовать сделать полностью нейросетевой синтез своими руками, а заодно и поделиться с сообществом своим опытом. Что из этого получилось, можно узнать, заглянув под кат.
              Читать дальше →
            • Blazor: Техническое введение

              • Translation
              Сегодня команда ASP.NET анонсировала, что проект Blazor был перемещён в репозиторий организации ASP.NET. Мы начинаем стадию эксперимента, чтобы понять сможем ли мы развить Blazor в поддерживаемый продукт. Это большой шаг вперёд!

              image

              Что такое Blazor? Это фреймворк для браузерных приложений, написанный на .NET и запускающийся с помощью WebAssembly. Он даёт вам все преимущества богатых современных одностраничных приложений (SPA), позволяя при этом использовать .NET от начала и до конца, вплоть до общего кода на сервере и клиенте. В посте с анонсом подробно описаны основные случаи применения, сроки и так далее.

              В этом посте я хочу поглубже поговорить о технических деталях для тех, кому интересно как же это работает.
              Читать дальше →
            • Боты на .Net Core для Telegram, Slack и Facebook

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



                Практически все, кто пользуется современными средствами обмена сообщениями, сталкивались с ботами. Одно из определений бота – это программа, выполняющая автоматически и/или по заданному расписанию какие-либо действия через интерфейсы, предназначенные для людей.

                Боты могут использоваться для информирования, для автоматизации процессов (например, автоматической генерации задачи в TFS на основе письма пользователя) и для многих других целей, но т.к. одной статьи не хватит, чтобы рассмотреть все варианты, далее пойдёт рассказ лишь о том, как создать бота для обработки команд.
                Читать дальше →
              • Системы ИИ научились создавать умные модели для ML: дайджест для начинающих

                  В ноябре участники исследовательского проекта Google Brain опубликовали результаты эксперимента AutoML. Им удалось создать систему, которая порождает новые ИИ-модели, используя метод обучения с подкреплением. Реализованный таким образом алгоритм уже справляется с задачей лучше решений, полностью написанных человеком.

                  В этой статье мы расскажем об особенностях работы системы AutoML, а также приведем подборку книг и курсов по машинному обучению, которые помогут поближе познакомиться с технологиями искусственного интеллекта.

                  Читать дальше →
                  • +15
                  • 13.3k
                  • 7
                • Капсульные сети от Хинтона



                    27 октября 2017 года появилась статья доктора Джофри Хинтона с соавторами из Google Brain. Хинтон — более чем известный ученый в области машинного обучения. Он в свое время разработал математику обратного распространения ошибок, был научным руководителем Яна Лекуна — автора архитектуры сверточных сетей.

                    Хоть презентация была достаточно скромная, корректно говорить о революционном изменении подхода к искусственным нейронным сетям (ИНС). Назвали новый подход «капсульные сети». Пока в российском сегменте интернета мало информации о них, поэтому восполню этот пробел.
                    Читать дальше →
                  • Регрессионные тесты на утечки памяти, или как написать memory profiler для .NET приложений

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


                      Автоматизированное регрессионное тестирование ошибок уже давно стало мейнстримом индустрии разработки качественного ПО. Такие тесты помогают не допустить попадание ошибки к пользователю, а также по горячим следам разобраться, какое изменение в коде привело к ошибке, тем самым минимизировав время ее исправления.


                      Почему бы нам не применить такой же подход к утечкам памяти?


                      Читать дальше →
                    • Учим компьютер писать как Толстой, том I

                      — Eh bien, mon prince. Gênes et Lucques ne sont plus que des apanages, des поместья, de la famille Buonaparte. Non, je vous préviens que si vous ne me dites pas que nous avons la guerre, si vous vous permettez encore de pallier toutes les infamies, toutes les atrocités de cet Antichrist (ma parole, j'y crois) — je ne vous connais plus, vous n'êtes plus mon ami, vous n'êtes plus мой верный раб, comme vous dites 1. Ну, здравствуйте, здравствуйте. Je vois que je vous fais peur 2, садитесь и рассказывайте.

                      ТОМ ПЕРВЫЙ


                      ЧАСТЬ ПЕРВАЯ. Анна Каренина


                      Недавно на хабре наткнулся на эту статью https://habrahabr.ru/post/342738/. И захотелось написать про word embeddings, python, gensim и word2vec. В этой части я постараюсь рассказать о обучении базовой модели w2v.


                      Итак, приступаем.


                      • Качаем anaconda. Устанавливаем.
                      • Еще нам пригодится C/C++ tools от visual studio.
                      • Теперь устанавливаем gensim. Именно для него нам и нужен c++.
                      • Устанавливаем nltk.
                      • При установке не забудьте качать библиотеки для Anaconda, а не для стандартного интерпретатора. Иначе все кончится крахом.
                      • Качаем Анну Каренину в TXT.
                      • Советую открыть файл и вырезать оттуда рекламу и заголовки. Потом сохранить в формате utf-8.
                      • Можно приступать к работе.

                      Читать дальше →
                    • Ошибки в разговорном английском, которые можно (и нужно) допускать

                      Беглая и живая речь отличается от литературной фонетическими, лексическими и грамматическими нюансами. В то же время, она остается лучшим средством неформального общения наряду с вычурным языком Шекспира.

                      Сегодня расскажем, какие слова и фразы допустимо упрощать и какие правила можно нарушать в разговорном английском без потери смысла.
                      Читать дальше →
                    • Использование R для «промышленной» разработки

                        Является продолжением предыдущих публикаций. Не секрет, что при упоминании R в числе используемых инструментов вторым по популярности является вопрос о возможности его применения в «промышленной разработке». Пальму первенства в России неизменно держит вопрос «А что такое R?»


                        Попробуем разобраться в аспектах и возможности применения R в «промышленной» разработке.


                        Читать дальше →