Одна из ключевых возможностей Nimbus Note — это сохранение и/или редактирование заметок в виде html-документа. И заметки эти создаются/редактируются в браузере или на мобильных устройствах. После чего — отправляются на сервер. А как подсказывает профессиональная паранойя — информации пришедшей от пользователя доверять нельзя. Т.к. там может быть всё что угодно: XSS, документ, превращающий вёрстку в мечту абстракциониста или вообще ни разу не текст. Следовательно, данные пришедшие от пользователя нуждаются в предварительной обработке. В этой статье я опишу некоторые особенности нашего решения данной проблемы.
Метка «парсеры»
Парсер в Nimbus Note, или как мы решали проблему «чистого» HTML
2014-03-28 в 11:20, admin, рубрики: beautiful soup, lxml, nimbus, python, Блог компании FVD Media, Веб-разработка, парсеры, разработка, метки: beautiful soup, lxml, nimbus, python, Веб-разработка, парсеры, разработкаНаписание парсера с нуля: так ли страшен черт?
2013-11-21 в 15:48, admin, рубрики: .net, Компиляторы, ненормальное программирование, парсеры, самопал, фатальный недостаток, метки: c++, компиляторы, парсеры, самопал, фатальный недостатокВ прошлом топике я рассказывал о том, как мы с другом решили ради развлечения написать свой встраиваемый язык программирования для платформы .NET. У первой версии был серьезный недостаток — парсер был реализован на F# с помощью сторонней библиотеки. Из-за этого требовалась куча зависимостей, парсер работал медленно, а поддержка его была крайне муторным занятием.
Очевидно, что парсер нужно было переписать на C#, но при мысли о написании парсера с нуля вдруг находилась дюжина других срочных дел. Таким образом таск перекидывался и откладывался практически полгода и казался непосильным, а в итоге был сделан за 4 дня. Под катом я расскажу об удобном способе, позволившим реализовать парсер достаточно сложной грамматики без использования сторонних библиотек и не тронуться умом, а также о том, как это позволило улучшить язык LENS.
Но обо всем по порядку.
Читать полностью »
(возможно) Первый в мире генератор читабельных, хоть и чрезвычайно медленных, парсеров на JS
2013-11-07 в 4:14, admin, рубрики: functional programming, javascript, parser, peg, парсеры, функциональное программирование, метки: functional programming, javascript, parser, peg, парсеры, функциональное программированиеЕсли ты меня вообще помнишь, читатель — то, наверняка, помнишь и то, что мои посты в подавляющем количестве случаев разочарующе длинны и довольно-таки часто им предшествует лирическая предыстория. Заверяю тебя, этот пост отнюдь не исключение — я настолько же надёжный графоман, как и ранее, а то ещё и более закалённый.
По сходным обстоятельствам, мало что из описанного в тех постах было доведено до ума и они, преимущественно, содержали лишь общие предпосылки к размышлениям. И по этому пункту я так же не менее верен тебе и сейчас, дорогой читатель.
Как и раньше, в посте будет множество гиперссылок и кода. А ещё больше — кириллических букв.
Всё как в старые добрые времена. Добро пожаловать, друг.
Базы знаний. Часть 1 — введение
2013-10-16 в 9:31, admin, рубрики: api, freebase, Linked data, owl, rdf, semantic web, sparql, онтологии, открытые данные, парсеры, парсинг контента, Семантическая Сеть, метки: api, freebase, Linked data, owl, rdf, semantic web, sparql, онтологии, открытые данные, парсеры, парсинг контента Одной из причин причина слабого использования Linked Data-баз знаний в обычных, ненаучных приложениях является то, что мы не привыкли придумывать юзкейсы, видя перед собой только данные. Трудно спорить с тем, что сейчас в России производится крайне мало взаимосвязанных данных. Однако это не значит, что разработчик, создающий приложение для русскоязычной аудитории совсем уж отрезан от мира семантического веба: кое-что всё-таки у нас есть.
Основными источниками данных для нас являются международные базы знаний, включающие русскоязычный контент: DBpedia, Freebase и Wikidata. В первую очередь это справочные, лингвистические и энциклопедические данные. Каждый раз когда вам в голову приходит мысль распарсить кусочек википедии или викисловаря — ущипните себя как следует и вспомните о том, что всё, что хранится в категориях, инфобоксах или таблицах, уже распарсено и доступно через API с помощью SPARQL или MQL-интерфейса.
Я попробую привести несколько примеров полезных энциклопедических данных, которые вы не найдете нигде, кроме Linked Data.
Эта статья — первая из цикла Базы знаний. Следите за обновлениями.
- Часть 1 — Введение
- Часть 2 — Freebase: делаем запросы к Google Knowledge Graph
- Часть 3 — Dbpedia — ядро мира Linked Data
- Часть 4 — Wikidata — семантическая википедия
Открыта регистрация на конференцию по компьютерной лингвистике «Диалог»
2012-05-22 в 7:26, admin, рубрики: ABBYY, Блог компании ABBYY, диалог, искусственный интеллект, искуственный интеллект, Компьютерная лингвистика, парсеры, метки: ABBYY, диалог, искуственный интеллект, Компьютерная лингвистика, парсеры30 мая – 3 июня в подмосковном пансионате «Бекасово» пройдет крупнейшая российская конференция по компьютерной лингвистике «Диалог». Подробно о том, что такое «Диалог» и почему ABBYY организует эту конференцию, мы подробно писали здесь.
В этом году главными темами станут:
Оценка тональности текста (sentiment analysis). Для решения этой проблемы (как понять отношение автора к тому, что он описывает) используются как методы, основанные на лингвистических правилах, так и методы компьютерного обучения на больших тестовых коллекциях документов (в которых эксперты вручную расставили оценки тональности, а компьютер пытается разобраться, какие именно свойста тестового текста связаны с оценкой, чтобы на их основе оценивать новые тексты). Думаю, многие сталкивались с «правильными» оценками тональности статей в российских системах мониторинга СМИ (не будем называть имён), так что тема очень актуальная. Читать полностью »
Особенности написания и возможные фичи LR-генераторов
2012-03-21 в 12:48, admin, рубрики: ECMAScript, javascript, lalr, Алгоритмы, Компиляторы, парсеры, синтаксический анализ, метки: ECMAScript, javascript, lalr, компиляторы, парсеры, синтаксический анализВведение
Добрый день.
В заключительной части про написание собственного генератора LALR-парсеров я бы хотел описать возможные особенности и фичи. Кроме того я опишу чего мне не хватало в существующих решениях и ради чего я начал писать свой велосипед.
Дабы задать контекст, сообщу, что грамматика для анализа — это ECMAScript, так же известный как JavaScript. Конкретная спецификация — ECMA-262, редакция 5.1 от июня 2011 года.
Читать полностью »
Написание компилятора LALR(1)-парсеров. Часть 2
2012-03-20 в 12:41, admin, рубрики: lalr, Алгоритмы, Компиляторы, парсеры, синтаксический анализ, метки: lalr, компиляторы, парсеры, синтаксический анализПредисловие
Добрый день.
Это вторая часть статьи про написание своего генератора LALR-анализаторов. В этой части я расскажу про эволюции от примитивных восходящих синтаксических анализаторов до наиболее актуальных, хотя и не шибко новых, LALR-парсеров. Тем, кто не читал первую статью (ссылки — снизу), советую прочесть хотя бы первую половину последнего раздела. О том небольшом фрагменте кода я буду упоминать несколько раз.
В комментариях к прошлой статье несколько человек интересовались моими мотивами в написании своего компилятора компиляторов. К сожалению, они в этой статье не найдут ответов на этот вопрос. Не скрою, изначально я планировал написать статью без особой теории, но с оправданием задач и целей, ради которых я начал писать генератор, да и хотел поделиться нюансами и особенностями реализации. То есть по объему это довольно прилично: несколько экранов. Но затем я решил всё же описать базовую теорию популистским языком, поэтому статья разрослась до трех частей. Таким образом, дабы не ломать логику изложения, я сначала расскажу про LR/SLR/LALR-анализаторы, а завтра опубликую заключительную, и, думаю, самую интересную часть.
Читать полностью »
Написание компилятора LALR(1)-парсеров. Часть 1
2012-03-15 в 15:27, admin, рубрики: c++, lalr, Алгоритмы, Компиляторы, парсеры, синтаксический анализ, метки: lalr, компиляторы, парсеры, синтаксический анализВведение, или зачем нужны синтаксические анализаторы
Добрый день.
Не так давно появилась у меня задача синтаксического анализа одной грамматики. Существующие решения мне увы не подходили, поэтому встала проблема написания собственного генератора парсеров. Несмотря на то, что тема довольно популярная и существует не так уж и мало статей и книг по данному сабжу, я всё-таки решил еще раз описать данный процесс, причём начать с самых базовых понятий.
Эта часть посвящена базису, общей теории computer science. Возможно, что это даже преподаётся в школах/вузах России. Самая мякота пойдет со второй части.
Итак, зачем же кому-то может понадобиться писать парсер и что вообще это такое? Парсер — это код, который наделяет входящий набор символов семантическим смыслом. То есть, происходит анализ этих символов, и на основе этого анализа программа понимает как интерпретировать эти буквы и цифры. Простой пример — «1+2», после или во время процесса парсинга знак "+" это не просто символ плюса, но обозначение бинарноого оператора сложения, а в "+3" это унарный оператор знака числа. Большинству людей это очевидно, машине — нет.
Парсеры используются всюду — в Word'e для анализа приложений, словоформ, формул, etc; практически на любом сайте при валидации входных данных: email'а, телефонного номера, номера кредитки; конфигурационные файлы; сериализованные данные (например, в xml); во многих играх — скриптовые ролики, скрипты ИИ, консоль. В общем, это неотъемлемая часть computer science.