<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Иван Бегтин &#187; алгоритмы</title>
	<atom:link href="http://ivan.begtin.name/category/algoritmyi/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivan.begtin.name</link>
	<description>Открытые данные, открытое государство</description>
	<lastBuildDate>Mon, 06 Feb 2012 14:32:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Про метаданные документов. Без примеров</title>
		<link>http://ivan.begtin.name/2010/12/08/metadata/</link>
		<comments>http://ivan.begtin.name/2010/12/08/metadata/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 07:45:27 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[аналитика]]></category>
		<category><![CDATA[информация]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3701</guid>
		<description><![CDATA[<p>Последний раз про метаданные в офисных документах я писал более года назад в этой заметке &#171;<a href="http://ivan.begtin.name/2009/06/18/%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D1%85-%D0%BC%D0%B5%D1%82%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B8%D0%B7-%D0%B4%D0%BE%D0%BA/">Извлечение скрытых метаданных из документов MS Office</a>&#171;.</p> <p>Я какое-то время назад очень активно интересовался этой темой, в последнее время появилось много другого любопытного и метаданные документов отошли на второй план, однако в практических целях иногда знание того что и [...]]]></description>
			<content:encoded><![CDATA[<p>Последний раз про метаданные в офисных документах я писал более года назад в этой заметке &#171;<a href="http://ivan.begtin.name/2009/06/18/%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D1%85-%D0%BC%D0%B5%D1%82%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B8%D0%B7-%D0%B4%D0%BE%D0%BA/">Извлечение скрытых метаданных из документов MS Office</a>&#171;.</p>
<p>Я какое-то время назад очень активно интересовался этой темой, в последнее время появилось много другого любопытного и метаданные документов отошли на второй план, однако в практических целях иногда знание того что и как искать помогает.</p>
<p>Всех нюансов, конечно, не расскажешь, но кое что в дополнение и повторение к ранее написанному у меня есть. Единственно &#8212; примеров не будет. Те примеры что у меня сейчас на руках, могут оказаться не самые приятными для тех кто документы готовил. Так что примеры как-нибудь в другой раз.</p>
<p>Итак метаданные.</p>
<p>Если ранее я писал что есть два типа метаданных &#8212; метаданные документа и метаданные связанных объектов, то теперь вынужден признать что, на самом деле, метаданных куда больше.  Вернее даже не метаданных, а информации идентифицирующей автора и окружение.</p>
<p>Фактически я бы разделил эту идентификационную информацию на 4 типа:</p>
<p>- <strong>метаданные документа</strong> – свойства (properties)  документа которые обычно забывают удалить при сохранении и пересылке.</p>
<p>- <strong>метаданные вложенных объектов</strong> &#8212; свойства вложенных OLE объектов и изображений.</p>
<p>- <strong>маркеры</strong> &#8212; данные в гипертексте документа идентифицирующие его владельца.</p>
<p>- <strong>скрытые данные -</strong><strong> </strong>информация в участках документа недоступных для визуального просмотра.</p>
<p>Для каждого из типов идентификационной информации имеются свои ограничения доступности и характера содержимого.</p>
<p><strong>1. Метаданные документа</strong></p>
<p>Это свойства документа которые видны если открыть его &#171;Свойства&#187; в Эксплорере Windows или открыв в соответствующей программе MS Office. Про эти свойства, казалось бы, должны знать все и последние версии MS Office включают возможности удаления этих метаданных. Однако на практике это далеко не так. Часто метаданные забывают почистить и удалить и там можно увидеть &#171;чувствительную информацию&#187; о том кто был на самом деле автором документа,</p>
<p><strong>2. Метаданные вложенных объектов</strong></p>
<p>Об этом я писал в прошлой заметке и повторю сейчас. Вложенные объекты &#8212; это так называемые OLE объекты или контейнеры StructuredStorage содержащие другие документы/объекты с которыми умеет работать MS Office. Ещё вернее что объекты с которыми вообще умеет работать MS Windows, но в данном случае чуть упростим.</p>
<p>Если описать это ещё проще, то когда Вы готовите таблицу в Excel, а потом вставляете её в презентацию &#8212; это вставка OLE объекта. Точно также если вы делаете диаграмму в Visio и потом вставляете её в презентацию или документ &#8212; это вставка OLE объекта, если только вы не преобразовали вначале диаграмму в изображение.</p>
<p>Особенность этих вложенных объектов в том что каждый из них несёт свой собственный набор свойств заданных в той программе в которой данный объект создавался. Если Вы вложили таблицу Excel &#8212; значит у документа будут свойства которые указаны в Excel. Если объект Visio, то свойства заданные в Visio.</p>
<p>Коварство этой ситуации в том в что, что если Вы создаёте объект не в родной его программе, а через меню другой офисной программы через &#171;Вставить объект&#187;, то у Вас не будет возможности отредактировать свойства документа. А также если Вы работаете над документом вместе с кем-то и этот кто-то вставил объект, то в свойствах этого объекта будут метаданные с компьютера того пользователя и они там останутся.</p>
<p>Вложенные объекты можно извлечь несколькими способами, но большая часть из них весьма техническая и требует знаний того как устроены документы MS Office внутри, поэтому самый практичный способ &#8212; сохранить документ в одном из форматов OpenXML и распаковать его любимым ZIP распаковщиком. В результате, OLE объекты будут в папке embeddings. Впрочем  я ранее уже это описывал и заметке на которую я сослался вначале этого поста есть подробное описание процесса.</p>
<p>Однако, вложенными объектами могут быть не только OLE объекты. К этой же категории носителей информации можно отнести изображения. В изображениях может сохранятся информация EXIF (в JPEG файлах) и XMP. Подобное встречается гораздо реже, в основном если кто-то необдуманно вставляет в документы необработанные фотографии. Извлечь изображения можно по тому же рецепту &#8212; преобразовать в OpenXML, распаковать и заглянуть в папку media.</p>
<p><strong>3. &#171;Маркёры&#187;</strong></p>
<p>Это очень условное название для той информации которая может присутствовать в тексте документа и позволяет узнать более о его авторе. К подобной информации можно отнести:</p>
<p>- <strong>обсуждения и комментарии в режим правки</strong>. Иногда (в последнее время всё реже) авторы документов забывают про режим правки и публикуют документ со всей историей обсужения, заметками и так далее.</p>
<p>- <strong>ссылки</strong>. В некоторых случаях, сознательно или по ошибке в документах остаются ссылки на локальные документы того же пользователя или документы в его локальной сети. Чаще всего эти ссылки указывают на файлы на <strong>Desktop</strong> или же в папке &#171;<strong>Мои документы</strong>&#171;. Главное что такие ссылки позволяют узнать &#8212; локальное имя пользователя извлекаемой из пути к данному документу.</p>
<p><strong>4. Скрытые данные</strong></p>
<p>Кроме вполне очевидных данных (маркёров) в тексте есть некое количество данных которые скрыты в блоках бинарных файлов о предназначении которых можно знать или догадываться. Например, в Excel файлах есть специальный блок PLS содержащий информацию о принтерах.  Он содержит точно название модели принтера и его название и, скорее всего некую дополнительную информацию.</p>
<p>В некоторых случаях в скрытых данных присутствуют адреса файлов и пути которые могут быть интерпретированы так же как данные в ссылках, а то есть позволят извлечь информацию о локальном аккаунте пользователя.</p>
<p>А как собственно получить все эти данные?</p>
<p><strong> Инструменты</strong></p>
<p>Существует довольно большое число инструментов по работе с метаданными, но чего-то универсального не нет. Каждый из инструментов имеет свои плюсы и минусы и многие из них (но не все) описаны в статье <strong>Document Metadata Extraction </strong>в Forensics Wiki -<a href="http://www.forensicswiki.org/wiki/Document_Metadata_Extraction">http://www.forensicswiki.org/wiki/Document_Metadata_Extraction</a> здесь много ссылок на инструменты и библиотеки.</p>
<p>Набор инструментов:</p>
<p>- <strong>MS Office 2007-2010</strong> для преобразования из бинарных форматов MS Office в OpenXML. В данном случае OpenOffice не подойдёт поскольку он не сохраняет OLE объекты</p>
<p>- <strong>Strings -</strong><strong> </strong>утилитка из пакета Sysinternals позволяющая извлечь строковые переменные.</p>
<p>- <strong>OffVis</strong> &#8212; это такая специальная утилита от Microsoft позволяющая копатся в глубинах офисных документов. При глубоком анализе документов и выковыриванию PLS блоков из файлов Excel &#8212; незаменима. Скачать можно здесь <a href="http://download.techworld.com/3214034/microsoft-offvis-11/">http://download.techworld.com/3214034/microsoft-offvis-11/</a></p>
<p>- <strong>Metadata Extraction Tool</strong> &#8212; бесплатная утилитка по извлечению метаданных из офисных документов, PDF, изображений и так далее. заглядывает неглубоко и находит не всё  <a href="http://meta-extractor.sourceforge.net/">http://meta-extractor.sourceforge.net/</a></p>
<p>- <strong>Catalogue</strong> &#8212; собирает метаданные из разного типа файлов <a href="http://peccatte.karefil.com/software/Catalogue/CatalogueENG.htm">http://peccatte.karefil.com/software/Catalogue/CatalogueENG.htm</a></p>
<p><strong>- Metadata Analyzer &#8212; </strong>извлекает метаданные (только базовые)<strong> </strong><a href="http://smartpctools.com/metadata/">http://smartpctools.com/metadata/</a></p>
<p>- <strong>Document Trace Remover</strong> &#8212; убирает метаданные <a href="http://smartpctools.com/trace_remover/">http://smartpctools.com/trace_remover/</a></p>
<p>- <strong>Oracle Outside In </strong>- инструмент для разработчиков, поддерживает около 500 форматов файлов <a href="http://www.oracle.com/us/technologies/embedded/025613.htm">http://www.oracle.com/us/technologies/embedded/025613.htm</a></p>
<p>Это, конечно, совсем не предел тем вокруг извлечения информации. Есть также метаданные и способы их выковыривания из документов PDF и OpenOffice, электронных писем и так далее.</p>
<p>Кроме того есть масса нераскрытых возможностей связанных с неполным описанием бинарных проприетарных форматов.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/12/08/metadata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Техническое: про регулярные выражения и Яндекс PIRE</title>
		<link>http://ivan.begtin.name/2010/11/11/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d1%80%d0%be-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8/</link>
		<comments>http://ivan.begtin.name/2010/11/11/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d1%80%d0%be-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 08:37:39 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3583</guid>
		<description><![CDATA[<p>Что-то давно я не писал про технологии и алгоритмы.</p> <p>А тем временем, на днях, представители Яндекса выложили в открытый доступ ряд open source проектов &#8212; <a href="http://clubs.ya.ru/company/replies.xml?item_no=30753">http://clubs.ya.ru/company/replies.xml?item_no=30753</a></p> <p>Самый интересный из которых, на мой взгляд &#8212; это PIRE, <a href="https://github.com/dprokoptsev/pire">https://github.com/dprokoptsev/pire</a> Perl Incompatible Regular Expressions Library.</p> <p>Весьма интересная штука для тех кто когда либо прогонял через шаблоны [...]]]></description>
			<content:encoded><![CDATA[<p>Что-то давно я не писал про технологии и алгоритмы.</p>
<p>А тем временем, на днях, представители Яндекса выложили в открытый доступ ряд open source проектов &#8212; <a href="http://clubs.ya.ru/company/replies.xml?item_no=30753">http://clubs.ya.ru/company/replies.xml?item_no=30753</a></p>
<p>Самый интересный из которых, на мой взгляд &#8212; это PIRE, <a href="https://github.com/dprokoptsev/pire">https://github.com/dprokoptsev/pire</a> Perl Incompatible Regular Expressions Library.</p>
<p>Весьма интересная штука для тех кто когда либо прогонял через шаблоны большие объёмы текста/файлов/сетевого трафика и прочего файлового счастья.</p>
<p>Как я понимаю авторы обещают производительность до 400MB в секунду на &#171;common hardware&#187;, конечно, с кучей ограничений по тому что в регулярных выражениях может быть, но тем не менее &#8212; это быстро. Жаль там нет враппера для Питона, я бы попробовал на своих данных, благо их у меня накопилось много и есть с чем сравнивать. Пока поверю авторам на слово и исхожу из того что это так и есть, благо подход описанный у них в документации вполне понятен и должен работать.</p>
<p>Однако, жаль что подобных открытых разработок небыло хотя бы пары лет назад. Когда я разрабатывал Скиур &#8212; <a href="http://www.skyur.ru">http://www.skyur.ru</a> (это такой сервис по преобразованию веб-страниц в RSS), то решал задачи для которых как раз были необходимы такие инструменты  поскольку частью алгоритма является большое число тогда ещё регулярных выражений. В совокупности чуть менее 200, точно не скажу поскольку происходит их сборка из некого базового набора.</p>
<p>Но не имея таких инструментов я пошёл другим путём с решением &#171;в лоб&#187;, также оказавшего эффективным.</p>
<p>1. Все регулярные выражения были заменены на конечные автоматы</p>
<p>2. Собственно автоматы проанализированы и разбиты на повторяющиеся блоки.</p>
<p>3. Окончательная сборка шаблонов производится из группы базовых автоматов с добавлением к ним дополнительных блоков по набору правил.</p>
<p>4. На основе базовых шаблонов вручную формируется набор базовых правил заменяющих индекс. Фактически это замена для того же esmre для регулярных выражений. Которую, конечно, можно в дальнейшем автоматизировать.</p>
<p>То есть, фактически, это путь эффективен только в случае:</p>
<p>a.  Управляемости входного потока выражений.</p>
<p>б. Возможности разделения регулярные выражения на простые блоки и высокой повторяемости этих блоков.</p>
<p>Лично я нашёл что PyParsing - <a href="http://pyparsing.wikispaces.com/">http://pyparsing.wikispaces.com</a> при соблюдении описанных выше действий обеспечивает ускорение сравнения по сравнению с регулярными выражениями в разы. Собственно он и является весьма удобным конструктором.</p>
<p>Впрочем был бы PIRE или его аналог, пришлось бы гораздо проще. Впрочем и сейчас немало задач для которых такой инструмент необходим. Начиная от контроля сетевого трафика, задач из области поиска доказательств на компьютерах пользователей, классификационных задач, разбора различных полуструктурированных данных и так далее.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/11/11/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d1%80%d0%be-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сервисы извлечения информации о веб-сайтах</title>
		<link>http://ivan.begtin.name/2010/07/29/%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d1%8b-%d0%b8%d0%b7%d0%b2%d0%bb%d0%b5%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%bd%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%86%d0%b8%d0%b8-%d0%be-%d0%b2%d0%b5%d0%b1-%d1%81/</link>
		<comments>http://ivan.begtin.name/2010/07/29/%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d1%8b-%d0%b8%d0%b7%d0%b2%d0%bb%d0%b5%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%bd%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%86%d0%b8%d0%b8-%d0%be-%d0%b2%d0%b5%d0%b1-%d1%81/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:58:01 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3213</guid>
		<description><![CDATA[<p>В последнее время всё больше появляется сервисов по извлечению информации из веб-сайтов. Например, сравнительно давно существует <a href="http://builtwith.com">BuiltWith</a> и недавно появился <a href="http://w3techs.com">W3Tech.com</a>.</p> <p>Оба позволяют увидеть о сайте много всего интересного типа какие счетчики используются, какие технологии используются и какая CMS применяется.</p> <p>BuiltWith мне нравится чуть больше, но, если говорить начистоту, то оба эти сервиса устроены [...]]]></description>
			<content:encoded><![CDATA[<p>В последнее время всё больше появляется сервисов по извлечению информации из веб-сайтов. Например, сравнительно давно существует <a href="http://builtwith.com">BuiltWith</a> и недавно появился <a href="http://w3techs.com">W3Tech.com</a>.</p>
<p>Оба позволяют увидеть о сайте много всего интересного типа какие счетчики используются, какие технологии используются и какая CMS применяется.</p>
<p>BuiltWith мне нравится чуть больше, но, если говорить начистоту, то оба эти сервиса устроены крайне просто. Есть ограниченный пополняемый список правил для идентификации и классификации тех или иных возможностей на сайтах заложенных.</p>
<p>Правда эти сервисы позволяют анализировать тренды в технологиях, их распространённость и так далее.</p>
<p>Однако, поскольку Рунет не так велик, по сравнению с не-русскоязычной частью Интернета, то оказывается что технологии применяемые тут там не отражаются.</p>
<p>Например, данные о сайте Российской Газеты в обоих сервисах &#8212; <a href="http://w3techs.com/sites/info/rg.ru">http://w3techs.com/sites/info/rg.ru</a> и <a href="http://builtwith.com/rg.ru">http://builtwith.com/rg.ru</a>. BuiltWith подробнее, но вообще Российской специфики маловато.</p>
<p>Или вот посмотрим Roem.ru &#8212; <a href="http://builtwith.com/roem.ru">http://builtwith.com/roem.ru</a> и <a href="http://w3techs.com/sites/info/roem.ru">http://w3techs.com/sites/info/roem.ru</a>. Тут информации побольше, но, опять же Российской специфики мало.</p>
<p>Я, честно говоря, в своё время тоже интересовался этой же темой. Однако у меня цели были несколько иные &#8212; набивка базы массой вспомогательных метрик для улучшения различных алгоритмов обработки веб-страниц. Но промежуточный результат примерно такой же как в сервисах выше &#8212; извлечение массы признаков по группе правил, всего этих правил около 500. Этот механизм уже 1.5 года существует как веб-сервис и этот сервис использовался в ГосСети (<a href="http://www.govweb.ru">www.govweb.ru</a>) для сбора технологий на сайтах.</p>
<p>Сейчас у него есть простенький веб-интерфейс, <a href="http://data.skyur.ru">http://data.skyur.ru</a> в котором можно посмотреть как это работает на практике. Тем кому интересно могут посмотреть там те же сайты <a href="http://data.skyur.ru/?host=www.rg.ru">http://data.skyur.ru/?host=www.rg.ru</a> и <a href="http://data.skyur.ru/?host=www.roem.ru">http://data.skyur.ru/?host=www.roem.ru</a> или вот <a href="http://data.skyur.ru/?host=www.opennet.ru">http://data.skyur.ru/?host=www.opennet.ru</a>.</p>
<p>Но, в общем-то, это демка. Так что визуально всё без изысков. А вот стоит ли делать доступным веб-сервис пока не решил.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/07/29/%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d1%8b-%d0%b8%d0%b7%d0%b2%d0%bb%d0%b5%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%bd%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%86%d0%b8%d0%b8-%d0%be-%d0%b2%d0%b5%d0%b1-%d1%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Языки программирования и регулярные выражения</title>
		<link>http://ivan.begtin.name/2009/12/15/%d1%8f%d0%b7%d1%8b%d0%ba%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b8-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5/</link>
		<comments>http://ivan.begtin.name/2009/12/15/%d1%8f%d0%b7%d1%8b%d0%ba%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b8-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 23:22:05 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2386</guid>
		<description><![CDATA[<p>Оказывается на <a href="http://shootout.alioth.debian.org/">http://shootout.alioth.debian.org/</a> публикуют метрики большинства современных языков программирования из тех что можно запустить на Ubuntu, а то есть практически всех.</p> <p>Из особенно интересного там есть метрики применения регулярных выражений &#8212; <a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=regexdna&#38;lang=all&#38;box=1">http://shootout.alioth.debian.org/u32q/benchmark.php?test=regexdna&#38;lang=all&#38;box=1</a> на Intel QuadCore Q6600.</p> <p>Кстати, там много и других интересных сравнений реализаций алгоритмов.</p> <p>Ну а для регулярных выражений, судя по тестам, [...]]]></description>
			<content:encoded><![CDATA[<p>Оказывается на <a href="http://shootout.alioth.debian.org/">http://shootout.alioth.debian.org/</a> публикуют метрики большинства современных языков программирования из тех что можно запустить на Ubuntu, а то есть практически всех.</p>
<p>Из особенно интересного там есть метрики применения регулярных выражений &#8212; <a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=regexdna&amp;lang=all&amp;box=1">http://shootout.alioth.debian.org/u32q/benchmark.php?test=regexdna&amp;lang=all&amp;box=1</a> на Intel QuadCore Q6600.</p>
<p>Кстати, там много и других интересных сравнений реализаций алгоритмов.</p>
<p>Ну а для регулярных выражений, судя по тестам, там лидирует V8 JavaScript engine из Chromium. Ещё в феврале этого года они <a href="http://blog.chromium.org/2009/02/irregexp-google-chromes-new-regexp.html">писали про движок Irregexp</a> у себя в блоге и то что там реализовали компиляцию регулярных выражений в промежуточный автомат.  Что и говорить, результаты впечатляющие, обгоняют даже C++ реализацию на Boost, а мой любимый язык разработки Python так вообще отстаёт в 6 раз.</p>
<p>Как я вижу,  даже это шестикратное ускорение, на мой взгляд, недостаточно поскольку не решена другая немаловажная задача &#8212; построения индекса из регулярных выражений, дабы ускорить проверки текста и поиск по тексту когда выражений могут быть сотни.</p>
<p>С другой стороны, если промежуточный автомат они построили, то построить их индекс уже проще. Такие исследования и наработки уже были и в закрытых реализациях существуют.</p>
<p>P.S. Кстати, бегло посмотрев код могу констатировать тот факт что в другие языки irregexp вполне можно перенести и вся реализация там укладывается в 700 строк, и, конечно, важно проверить его работу на живых, а не синтетических примерах дабы понять производительность на не-ASCII символах.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/12/15/%d1%8f%d0%b7%d1%8b%d0%ba%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%b8-%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d1%8b%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обновление Скиура</title>
		<link>http://ivan.begtin.name/2009/12/01/%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d0%b8%d1%83%d1%80%d0%b0/</link>
		<comments>http://ivan.begtin.name/2009/12/01/%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d0%b8%d1%83%d1%80%d0%b0/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 21:49:24 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[скиур]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2363</guid>
		<description><![CDATA[<p>Как многие заметили в последнее время Скиур не распознавал многие из новостных страниц.<br /> Основной проблемой этого являлась нарастающая нагрузка на и увеличивающееся число страниц для распознавания что и приводило к таймаутам и т.д. до ненахождения информации.</p> <p>Чтобы решить эту проблему Скиур был довольно серьёзно изменён внутри:<br /> - заменён парсер на более быстрый<br /> [...]]]></description>
			<content:encoded><![CDATA[<p>Как многие заметили в последнее время Скиур не распознавал многие из новостных страниц.<br />
Основной проблемой этого являлась нарастающая нагрузка на и увеличивающееся число страниц для распознавания что и приводило к таймаутам и т.д. до ненахождения информации.</p>
<p>Чтобы решить эту проблему Скиур был довольно серьёзно изменён внутри:<br />
- заменён парсер на более быстрый<br />
- оптимизированы алгоритмы работы с регулярными выражениями<br />
- анализ страниц выделен в отдельный сервис и теперь происходит асинхронно отображением.<br />
- страницы проверяются на обновление раз в сутки.<br />
- улучшено распознавание кодировок</p>
<p>Визуально практически ничего не изменилось, за исключением того что теперь при запросе ссылки на распознавание установлен таймаут в 7 секунд.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/12/01/%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%ba%d0%b8%d1%83%d1%80%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Онтология и примеры анализа кодов и идентификаторов</title>
		<link>http://ivan.begtin.name/2009/11/24/%d0%be%d0%bd%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d1%8f-%d0%b8-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0-%d0%ba%d0%be%d0%b4%d0%be%d0%b2-%d0%b8-%d0%b8%d0%b4/</link>
		<comments>http://ivan.begtin.name/2009/11/24/%d0%be%d0%bd%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d1%8f-%d0%b8-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0-%d0%ba%d0%be%d0%b4%d0%be%d0%b2-%d0%b8-%d0%b8%d0%b4/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 20:16:56 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[информация]]></category>
		<category><![CDATA[расшифровка реальности]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2351</guid>
		<description><![CDATA[<p>Почти год назад я писал на эту  тему в заметке <a href="http://ivan.begtin.name/2008/12/16/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BA%D0%B8-%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2-%D0%B8-%D1%83/">Систематизация расшифровки кодов и управления справочниками</a>, а сейчас продолжу приостановленные тогда размышления.</p> <p>Если вкратце, то основной постулат такой &#8212; подавляющее число маркирующих кодов и уникальных идентификаторов создаются по ограниченному числу правил и подлежат разложению на ряд признаков позволяющих связывать эти коды с другими информационными [...]]]></description>
			<content:encoded><![CDATA[<p>Почти год назад я писал на эту  тему в заметке <a href="http://ivan.begtin.name/2008/12/16/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BA%D0%B8-%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2-%D0%B8-%D1%83/">Систематизация расшифровки кодов и управления справочниками</a>, а сейчас продолжу приостановленные тогда размышления.</p>
<p>Если вкратце, то основной постулат такой &#8212; подавляющее число маркирующих кодов и уникальных идентификаторов создаются по ограниченному числу правил и подлежат разложению на ряд признаков позволяющих связывать эти коды с другими информационными массивами и справочниками, а также на их основе извлекать больше информации об исследуемых/анализируемых объектах.</p>
<p>Но, вернёмся к кодам &#8212; что это такое и как они есть. Буду приводить примеры:</p>
<ul>
<li><span style="background-color: #ffffff; "><strong>049205770 &#8212; </strong>пример кода БИК &#8212; банковского идентификационного кода</span></li>
<li><strong>02.03.1989 &#8212; </strong>пример записи даты в формате dd.mm.yyyy, где dd &#8212; день, mm &#8212; месяц, yyyy &#8212; год от рождества Христова</li>
<li><strong>ru.wikipedia.org</strong> &#8212; пример кодирования адреса в виде домена</li>
<li><strong>09808117</strong> &#8212; пример кода ОКПО,  общероссийского классификатора предприятий и организаций</li>
<li><strong>5460000016</strong> &#8212; пример кода ИНН. Идентификационного номера налогоплательщика</li>
<li><strong>65.12, 65.22.5 - </strong>примеры кодов ОКВЭД</li>
<li><strong>30401810701200001022</strong> &#8212; пример кода корреспондентского счета банка в ЦБ РФ</li>
<li><strong>ALMZRU8Y</strong> &#8212; пример кода S.W.I.F.T используемого банковскими организациями</li>
<li><em><strong>ГОСТ</strong></em><strong> Р 52980-2008 &#8212; </strong>пример кода в виде документа ГОСТ</li>
<li><strong>454091 &#8212; </strong>российский почтовый<strong> </strong>индекс</li>
<li><strong>359</strong> &#8212; код по общероссийскому классификатору единиц измерения (<strong>ОКЕИ</strong>) означающий &#171;сутки&#187;.</li>
<li><strong>NO93 8601 1117 947</strong> &#8212; международный номер банковского счета, в примере номер счета в банке Норвегии</li>
<li><strong>13001 &#8212; </strong>код правительства Российской Федерации по справочнику ОКОГУ</li>
<li><strong>1021600000256 &#8212; </strong>пример общероссийского государственного регистрационного номера, ОГРН, присваеваемого юридическим лицам.</li>
<li><strong>ГС-1-50-02-26-0-7709342342-013097-1 &#8212; </strong>пример номера лицензии на проектирование зданий и сооружений</li>
<li><strong>08050 &#8212; </strong>код улицы &#171;Зелёный проспект&#187; по общемосковскому классификатору улиц</li>
</ul>
<p>плюс сюда же можно добавить такие коды как: номера банковских карт, автомобильные коды VIN, телефонные номера, коды ISBN, MAC адреса сетевых карт, IP адреса, коды EAN-8, EAN-13, GS-128, DUNS номера организаций в США и многие и многие другие.</p>
<p>Суть же всегда одна &#8212; кодирование информации об объектах, это способ решения следующих задач:</p>
<ul>
<li>сопоставление объекта некой информационной записи о нём содержащей подробную информацию о его характеристиках, особенностях и атрибутах</li>
<li>предоставление людям и программным средствам информацию об атрибутах данного объекта.</li>
</ul>
<p>При этом я пока затрагиваю только вопросы кодирования информации в текста, но есть и другие способы в виде баркодов, знаков, аудиосигналов.</p>
<p><span id="more-2351"></span></p>
<h2>Анализ примеров</h2>
<p>Код ИНН <strong>5460000016</strong></p>
<p>Структурно код ИНН состоит из:</p>
<p>- 4 цифры &#8212; код налоговой инспекции по справочнику СОУН: 5460 (Межрайонная инспекция по крупнейшим налогоплательщикам Новосибирской области)</p>
<p>- 5 цифр &#8212; порядковый номер регистрации организации в инспекции: 00001</p>
<p>- 1 цифра проверочный код: 6 (код верен)</p>
<p>Что ещё мы знаем об этом коде? Далее по наблюдениям:</p>
<p>1. Коды инспекций в справочнике СОУН состоят из 4-х цифр, две первых из которых &#8212; это код региона инспекции или же код 99 для крупнейших налогоплательщиков. Но, при указании кодов, код 99 используется для другого налогового кода КПП &#8212; поэтому для ИНН мы можем говорить о 100% привязке кода СОУН к определённому региону что закодировано в первых двух его цифрах. Отсюда код ИНН позволяет всегда определить регион местонахождения организации</p>
<p>2. Код ИНН всегда состоит из 10 символов цифр для юридических лиц и 12 символов цифр для физ. лиц. Что означает что код обладает фиксированной длиной.</p>
<p>3. Присвоение порядкового номера производится инкрементально, отсюда зная даты присвоения нескольких номеров можно с высокой вероятностью предсказывать дату его присвоения. Фактически инспекция &#8212; это генератор последовательно прирастающих значений и то же правило работает и со всеми остальными кодами в которых можно отделить прирастающую часть от идентификационной.</p>
<p>4. Все части кода ИНН обладают фиксированной длиной, отсутствуют случаи когда они могут перекрываться.</p>
<p>5. Код не содержит иерархии, а только ссылки на другие справочники.</p>
<p>6. Код является <strong>совершенным,</strong> а то есть<strong> </strong>- в нём отсутствуют неидентифицированные части и <strong>раскрываемым, </strong>а то есть все части кода являющиеся ссылками на внешние справочники (регионы и справочник СОУН) существуют и доступны.</p>
<p>7. Код является идентификатором в реестре юридических лиц ЕГРЮЛ где и содержится более подробная информация об идентифицируемом им объекте &#8212; организации.</p>
<p>Итого: код ИНН содержит минимальную базовую информацию и является ссылкой на запись о более подробной информации об организации одновременно.</p>
<p>&#8212;</p>
<p>Другой пример код S.W.I.F.T: <span style="background-color: #ffffff; "><strong>ALMZRU8Y</strong></span></p>
<p><span style="background-color: #ffffff; ">Код S.W.I.F.T состоит из следующих частей:</span></p>
<p><span style="background-color: #ffffff; "> &#8212; 4 символа &#8212; уникальный код организации: <strong>ALMZ </strong>(АлмазЭргиЭнБанк)</span></p>
<p><span style="background-color: #ffffff; "> &#8212; 2 символа &#8212; код страны по ISO 3166-1 alpha-2: <strong>RU </strong>(Россия)</span></p>
<p><span style="background-color: #ffffff; ">- 2 символа &#8212; код местонахождения организации: <strong>8Y </strong>(г. Якутск)</span></p>
<p>При наличии филиалов код SWIFT может включать дополнительные 3 символа идентифицирующие его филиал. Например, <strong>UBSWUS33CHI, </strong>где<strong> </strong>CHI это признак филиала в городе Чикаго.</p>
<p>Что можно сказать об этом коде?:</p>
<p>1. Код можно рассматривать как один код с переменной длиной в 8 и 11 символов, так и как два кода &#8212; полный в 11 символов и короткий в 8 символов.</p>
<p>2. Код является совершенным, но не раскрываемым. Несмотря на то что все части кода предопределены, не все справочники известны. В частности справочники кодов местонахождения свои для каждой страны и неизвестны в открытом доступе, равно как и справочники идентификации филиалов</p>
<p>3. Поскольку коды местонахождения уникальны только в пределах страны, а то есть кода страны, то для сведения местонахождений в единый справочник правильная полная запись кода местонахождения должна включать оба этих кода. В нашем случае это <strong>RU8Y,</strong> одновременно с этим, учитывая что глобального всемирного справочника регионов, городов и муниципальных образований не существует и их заменяют региональные государственные справочники, можно говорить о множественности справочников и определения типа ссылки на основании кода страны.</p>
<p>4. Код не содержит кода проверки и допускает опечатки и неточности.</p>
<p>5. Код является ссылкой на идентификатор в базе международной организации SWIFT где содержится более подробная информации об участнике этой системы.</p>
<p>6. Код не содержит признаков иерархии объектов.</p>
<p>Итого: код содержит минимальную базовую информацию и является ссылкой на идентификатор в базе.</p>
<p>&#8212;</p>
<p><span style="background-color: #ffffff;">Рассмотрим далее, код почтового индекса &#8212; <strong>454091</strong></span></p>
<p><span style="background-color: #ffffff;">- 6 цифр &#8212; это идентификатор почтового отделения в базе почтовой службы. </span></p>
<p><span style="background-color: #ffffff;"><strong> </strong>Что можно о нём сказать:</span></p>
<p>1. Код является несовершенным, поскольку для понимания принципов его кодирования требуется детальный анализ имеющихся</p>
<p>2. Информация по данному коду может быть получена из общедоступных справочников публикуемых Почтой России.</p>
<p>3. Код не содержит признаков иерархии объектов.</p>
<p>4. Код и его отдельные части обладают фиксированной длиной.</p>
<p>&#8212;</p>
<p>Код ОКЕИ &#8212; <strong>359</strong></p>
<p><strong>- </strong>3 цифры &#8212; уникальный идентификатор единицы измерений по справочнику ОКЕИ, в нашем случае этот код означает единицу измерений &#171;сутки&#187;</p>
<p>Что можно сказать о коде:</p>
<p>1. Код и его части обладают фиксированной длиной</p>
<p>2. Код является совершенным &#8212; он состоит из лишь одной части которая является лишь идентификатором.</p>
<p>3. Код не содержит каких-либо дополнительных признаков и ссылок, являсь лишь ссылкой на запись в реестре справочника.</p>
<p>Итого: это пример предельно простого кода не содержащего информации и лишь являющегося ссылкой.</p>
<p>Подробнее о коде ОКЕИ можно почитать и их посмотреть тут <a href="http://www.mosclassific.ru/mClass/okei_view.php">http://www.mosclassific.ru/mClass/okei_view.php</a></p>
<p>&#8212;</p>
<p>Код ОКВЭД &#8212; <strong>65.22.1 </strong>(предоставление потребительского кредита)</p>
<p>Структура кода ОКВЭД: XX.XX.XX при этом код обладает нефиксированной длиной и может быть записан в формах: XX.X, XX.XX, XX.XX.X и XX.XX.XX</p>
<p>Что можно сказать о кодах ОКВЭД:</p>
<p>1. Справочник ОКВЭД является иерархическим и это вложено в его коды. Первые две цифры определяют группу, следующие остальные иерархии подгрупп.</p>
<p>2. Длина кода ОКВЭД колеблется от 4 до 8 символов разбитых на группы по 2 символа цифры разделённых точками.</p>
<p>3. Коды ОКВЭД являются совершенными и раскрываемыми, но не содержат информации о ссылках на внешние данные. Вместо этого они ссылаются на вышестоящие коды в иерархии.</p>
<p>4. По коду ОКВЭД можно получить дополнительную информацию из общедоступного справочника кодов которая включает его название и категорию.</p>
<p>Итого: код ОКВЭД &#8212; это пример кода классификатора, когда основной дополнительной информацией которая извлекается это расшифровка его названия. В то же время, сам код не содержит прямых ссылок на другие справочники и объекты</p>
<p>&#8212;</p>
<p>Код IBAN и пример в виде<strong>:  NO93 8601 1117 947</strong></p>
<p>Структура кода IBAN является нефиксированной и зависит от первых двух символов после его идентификатора. Например, для <strong>NO </strong>длина кода составляет 15 символов и обладает следующей структурой:</p>
<p>- 2 символа &#8212; идентификатор страны</p>
<p>- 2 символа &#8212; два знака контрольного числа</p>
<p>- 4 символа &#8212; код банка</p>
<p>- 6 символов &#8212; код счета</p>
<p>- 1 символ &#8212; дополнительное контрольное число</p>
<p>При этом, для других стран длина и структура кода будет отличаться. Подробнее о IBAN можно почитать тут  <a href="http://en.wikipedia.org/wiki/International_Bank_Account_Number">http://en.wikipedia.org/wiki/International_Bank_Account_Number</a></p>
<p>В итоге что можно сказать о коде:</p>
<p>1. Код является совершенным, но не полностью раскрываемым поскольку коды банков в кодах IBAN ведутся центробанками отдельных стран в виде отдельных справочников не все из которых доступны.</p>
<p>2. Код является <strong>нечётким &#8212; </strong>это означает что его длина и/или структура зависит от содержимого и требует дополнительных правил интерпретации и/или ведения справочника структурных схем</p>
<p>3. Код обладает множественными ссылками &#8212; на справочник стран, на справочники банков в странах, на справочники типов счетов для некоторых стран и так далее.</p>
<p>4. Учитывая нечёткость кода и наличие множественных ссылок на зависящих от содержимого &#8212; можно разделять коды IBAN для стран как независимые справочки наследующие общие подходы от некого мета-класса.</p>
<p>Примечание: в принципе, IBAN &#8212; это пример одного из наиболее неприятных видов кодов, поскольку детализация и интерпретация зависят от его содержимого и требуются дополнительные усилия на описания структуры кодов в едином формате.</p>
<p>&#8212;</p>
<p>Рассмотрим код даты в виде записи <strong>02.03.1989 </strong></p>
<p>Об этом коде немного свободным текстом без тезисов.</p>
<p><span style="background-color: #ffffff;">Почему вообще дата и почему в таком формате? Этот формат даты  dd.mm.yyyy, является не более чем примеров, разумеется этих форматов множество. Факт же в том что записывая дату мы тем самым кодируем данные о временном отрезке длительностью в 24 часа в виде текста. Формат позволяет определить из описания: день, месяц и год. Все три числа &#8212; это ссылки на справочники: дней в месяце, месяцев в году и годов. Одновременно с этим значения дня и месяца вместе являются проверочными для определения корректности написания из-за разницы числа дней в месяце, а комбинация дня, месяца и года &#8212; проверочной комбинацией для високосных годов.</span></p>
<p><span style="background-color: #ffffff;">Это кодирование даты, по сути, является не кодом, а <strong>форматом &#8212; </strong>главное отличие которого от кода в множественности форм представления эталонной информации. Например, также дату можно представить в видах: <strong>02 марта 1989</strong>, <strong>62.1989</strong> (день от начала года плюс год), <strong>1989-03-02</strong> и так далее, всего форматов десятки. Одной из особенностью и отличием форматов от кодов является возможность приведения к эталонному значению которое может быть приведено к одному из форматов и заведомо содержит все те признаки что и любой из его форматов. </span></p>
<h2><strong><strong><strong>Итоги и выводы</strong></strong></strong></h2>
<p>Остальные коды я не буду расшифровывать сейчас, там схожие принципы и подходы, сейчас же о сведении всего вышенаписанного воедино:</p>
<p><span style="background-color: #ffffff;">1. Коды можно делить на совершенные и несовершенные &#8212; по наличию неидентифицированных частей</span></p>
<p><span style="background-color: #ffffff;">2. Коды могут быть раскрываемым и нераскрываемыми &#8212; в зависимости от доступности справочников на которые ссылаются отдельные его части и сам код.</span></p>
<p><span style="background-color: #ffffff;">3. Коды бывают четкими и нечёткими &#8212; по зависимости их структуры и длины от отдельных признаков в коде.</span></p>
<p><span style="background-color: #ffffff;">4. Коды могут содержать перекрывающие друг друга части или части накладывающиеся друг на друга. Например, идентификация местонахождения банков в кодах SWIFT является уникальной с кодом страны.</span></p>
<p><span style="background-color: #ffffff;">5. Форматы простых данных &#8212; дат и чисел в некоторых случаях могут рассматриваться как коды.</span></p>
<p>В итоге можно говорить об <strong>онтологии кодирования &#8212; </strong>наборе базовых правил и их формальном описании для интерпретации и сопоставления информации скрытой в кодах.</p>
<h2 style="font-size: 1.5em;"><span style="background-color: #ffffff;"><span style="font-weight: 900;">Зачем это нужно?</span></span></h2>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">Собственно, а зачем всё это нужно помимо простого любопытства? </span></p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">Причин несколько:</span></p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">1. Понимание и расшифровка кодов нужны при обогащении баз данных. Довольно часто возникает ситуация когда те или иные коды &#8212; о продуктах, об организациях или о документах были накоплены и одновременно необходимо к данным добавить дополнительные срезы для их анализа &#8212; в этом случае эта информация извлекается как из кодов, так и из внешних справочников и реестров на которые эти коды ссылаются.</span></p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">2. Применение в различных алгоритмах извлечения информации &#8212; для её обогащения и классификации. Я лично делал уже несколько подобных алгоритмов которые на основе минимума доступной, но нужной информации собирали набор классификационных признаков.</span></p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">3. Конкурентная разведка, следственные мероприятия и так далее. Например, проверка организаций по регистрационным кодам, проверка автомобилей по кодам VIN, определение банка по первым 4-5 цифрам банковской карты и так далее. </span></p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;">Лично я уже довольно долгое время такие коды собираю и пишу о них, как вот в этой заметке так и постах ранее которые идут под категорией <a href="http://ivan.begtin.name/tag/%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BA%D0%B0-%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8/">расшифровка реальности</a></span></p>
<p>Ну а если Вы знаете какие-либо расшифровки интересных видов кодов или же наоборот ищете как расшифровать какие-либо Вам неизвестные  - отмечайтесь в комментариях.</p>
<p><span style="font-weight: normal; font-size: 13px; background-color: #ffffff;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/11/24/%d0%be%d0%bd%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d1%8f-%d0%b8-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b-%d0%b0%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0-%d0%ba%d0%be%d0%b4%d0%be%d0%b2-%d0%b8-%d0%b8%d0%b4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Онлайн API и идентификация языка</title>
		<link>http://ivan.begtin.name/2009/11/16/%d0%be%d0%bd%d0%bb%d0%b0%d0%b9%d0%bd-api-%d0%b8-%d0%b8%d0%b4%d0%b5%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0/</link>
		<comments>http://ivan.begtin.name/2009/11/16/%d0%be%d0%bd%d0%bb%d0%b0%d0%b9%d0%bd-api-%d0%b8-%d0%b8%d0%b4%d0%b5%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 11:11:15 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[информация]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2333</guid>
		<description><![CDATA[<p>На днях искал онлайновые сервисы способные помочь при работе с разного рода информацией, в частности одна из задач в определении кодировок и языка веб-страниц, ибо возможность переложить эту рутинную задачу на какой-либо сервис онлайн часть ресурсов может высвободить.</p> <p>В результате посмотрел на <a href="http://langid.net/">LangId.net</a> и <a href="http://www.alchemyapi.com/api/lang/">AlchemyAPI</a> и там и там одна и та же [...]]]></description>
			<content:encoded><![CDATA[<p>На днях искал онлайновые сервисы способные помочь при работе с разного рода информацией, в частности одна из задач в определении кодировок и языка веб-страниц, ибо возможность переложить эту рутинную задачу на какой-либо сервис онлайн часть ресурсов может высвободить.</p>
<p>В результате посмотрел на <span style="background-color: #ffffff;"><a href="http://langid.net/">LangId.net</a> и <a href="http://www.alchemyapi.com/api/lang/">AlchemyAPI</a> и там и там одна и та же ерунда &#8212; до половины всех русскоязычных документов определяются как вьетнамские. </span></p>
<p><span style="background-color: #ffffff;">При этом информацию о кодировках они вообще не представляют и, похоже, по кодировкам возвращаемым на сервере и на странице коррекцию определения не производят. Иначе говоря, пользоваться ими нельзя. Разумеется есть разные программные реализации того же и определить язык и кодировку своими силами возможно, но это всегда доп. нагрузка на оборудование.</span></p>
<p><span style="background-color: #ffffff;">Понятное дело что сервисных и утилитарных API для Рунета и русского языка в частности практически нет. Разьве что вот Яндекс стал предоставлять <a href="http://api.yandex.ru/speller/">http://api.yandex.ru/speller/</a>, но это капля в море.</span></p>
<p><span style="background-color: #ffffff;">А кто знает какие-либо полезные онлайн API, применимые к Рунету, русскому языку и распознаванию текста?</span></p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/11/16/%d0%be%d0%bd%d0%bb%d0%b0%d0%b9%d0%bd-api-%d0%b8-%d0%b8%d0%b4%d0%b5%d0%bd%d1%82%d0%b8%d1%84%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Техническое. Почему Скиур иногда подтормаживает</title>
		<link>http://ivan.begtin.name/2009/07/22/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%b8%d0%bd%d0%be%d0%b3%d0%b4%d0%b0-%d0%bf%d0%be%d0%b4%d1%82/</link>
		<comments>http://ivan.begtin.name/2009/07/22/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%b8%d0%bd%d0%be%d0%b3%d0%b4%d0%b0-%d0%bf%d0%be%d0%b4%d1%82/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 11:27:46 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[скиур]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2078</guid>
		<description><![CDATA[<p>Буквально несколько дней назад удалось выявить в <a href="http://www.skyur.ru">Скиуре</a> довольно неприятный баг и, частично его исправить. Проблема оказалась в том что мои предыдущие предположения что сервис подтормаживает на прогоне страницы по базе регулярных выражений, конечно были справедливы, но в значительной степени эту проблему удалось решить ещё раньше введя предварительную фильтрацию выражений  по принципам которые я у [...]]]></description>
			<content:encoded><![CDATA[<p>Буквально несколько дней назад удалось выявить в <a href="http://www.skyur.ru">Скиуре</a> довольно неприятный баг и, частично его исправить. Проблема оказалась в том что мои предыдущие предположения что сервис подтормаживает на прогоне страницы по базе регулярных выражений, конечно были справедливы, но в значительной степени эту проблему удалось решить ещё раньше введя предварительную фильтрацию выражений  по принципам которые я у себя же тут в блоге описывал. Не универсальное решение, но всё же вполне оптимальное.</p>
<p>Текущая же проблема оказалась не столь очевидной, но не менее актуальной. К великому моему сожалению и удивлению Python не умеет сериализовывать скомпилированные регулярные выражения. Вернее он метит такие объекты как unmashalled и, в итоге, несмотря на наличие кода который подгружал базу регулярных выражений из кэша, на самом деле оказывалось что для каждой сессии, при подгрузке базы выражений из кеша, происходила полная их перекомпиляция, а это до нескольких секунд в зависимости от общей нагрузки на сервер.</p>
<p>Сейчас проблема решилась выносом кода подгрузки выражений из общей части в те участки где без базы выражений никак не обойтись &#8212; распознавание веб-страницы, во всех же случаях подгрузки данных из кеша более выражения не подгружаются. Загвоздка же в том что простого решения у этой проблемы нет.</p>
<p>В то же время есть варианты:</p>
<p>- либо компилировать выражения в C или Python код и подключить как уже готовые модули</p>
<p>- либо разрабатывать специальный сериализатор для регулярных выражений для Python ибо готовых нет</p>
<p>- либо выносить всю логику распознавания в отдельный сервер/сервис и обрабатывать все страницы в несколько потоков где выражения предварительно подгружены (самый простой способ)</p>
<p>- либо использовать для разбора веб-страниц не Python, а язык умеющий регулярные выражения сериализовывать</p>
<p>- либо отказаться от регулярных выражений и использовать иные правила анализа текстов.</p>
<p>Часть решений сугубо технические, часть алгоритмические. Какой подход проще уже понятно, непонятно какой лучше.</p>
<p>Как бы то ни было, есть и плюсы. Ключевой из которых в том что запас ускорения у Скиура ещё где-то 1000% и промышленный его вариант сможет быть очень быстрым.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/07/22/%d1%82%d0%b5%d1%85%d0%bd%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%b8%d0%bd%d0%be%d0%b3%d0%b4%d0%b0-%d0%bf%d0%be%d0%b4%d1%82/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>В продолжение АнтиSEO</title>
		<link>http://ivan.begtin.name/2009/07/15/%d0%b2-%d0%bf%d1%80%d0%be%d0%b4%d0%be%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b0%d0%bd%d1%82%d0%b8seo/</link>
		<comments>http://ivan.begtin.name/2009/07/15/%d0%b2-%d0%bf%d1%80%d0%be%d0%b4%d0%be%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b0%d0%bd%d1%82%d0%b8seo/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 19:08:46 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2066</guid>
		<description><![CDATA[<p>Хотя и может показаться обратное, но я не забыл про эту тему, хотя и она сейчас мне уже менее интересна чем ранее.</p> <p>Сейчас моя книга &#171;подвисла&#187; посередине &#8212; готово 30 страниц, плюс несколько десятков разрозненных заметок и исследований которые надо сводить вместе.</p> <p>Особенность в том что я не описываю алгоритмы, их нет вообще &#8212; я [...]]]></description>
			<content:encoded><![CDATA[<p>Хотя и может показаться обратное, но я не забыл про эту тему, хотя и она сейчас мне уже менее интересна чем ранее.</p>
<p>Сейчас моя книга &#171;подвисла&#187; посередине &#8212; готово 30 страниц, плюс несколько десятков разрозненных заметок и исследований которые надо сводить вместе.</p>
<p>Особенность в том что я не описываю алгоритмы, их нет вообще &#8212; я описываю со всеми подробностями правила и классификационные признаки которые по совокупности уже можно классифицировать с помощью SVM, Decision Trees или прочих алгоритмов.</p>
<p>Пока этих признаков 50, вернее не признаков, а выявляющих их правил которые могут быть представлены как одним так и большим числом признаков.</p>
<p>По каждому правилу приводятся статистика и примеры, в некоторые случаях подробные, в некоторых случаях как &#171;допущение&#187;.</p>
<p>В итоге получается не серебрянная пуля, а систематизация правил антиSEO анализа. Разумеется, не исключено что весьма спорная, учитывая что большинство реально работающих антиSEO алгоритмов совершенно непубличны.</p>
<p>Как бы то ни было, книга будет, в том или ином виде &#8212; когда точно я ещё отпишу, пока же с желающими можно будет обсудить эту тему на iCamp Russia.</p>
<p>Плюс появилось интересное чтение  в виде описания алгоритма Яндекса - <a href="http://helpcontext.ru/?p=507">http://helpcontext.ru/?p=507</a> по выявлению платных ссылок.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/07/15/%d0%b2-%d0%bf%d1%80%d0%be%d0%b4%d0%be%d0%bb%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b0%d0%bd%d1%82%d0%b8seo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скиур: некоторые цифры и развитие</title>
		<link>http://ivan.begtin.name/2009/07/15/%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%bd%d0%b5%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d1%86%d0%b8%d1%84%d1%80%d1%8b-%d0%b8-%d1%80%d0%b0%d0%b7%d0%b2%d0%b8%d1%82%d0%b8%d0%b5/</link>
		<comments>http://ivan.begtin.name/2009/07/15/%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%bd%d0%b5%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d1%86%d0%b8%d1%84%d1%80%d1%8b-%d0%b8-%d1%80%d0%b0%d0%b7%d0%b2%d0%b8%d1%82%d0%b8%d0%b5/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 18:40:35 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[информация]]></category>
		<category><![CDATA[скиур]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2063</guid>
		<description><![CDATA[<p>Для тех кто может быть не знает, <a href="http://www.skyur.ru">Скиур</a> &#8212; мой небольшой экспериментальный проект продолжает жить, правда пока его развитие несколько притормозилось, но не от того что нет идей куда развивать, а поскольку есть другие не менее интересные проекты.</p> <p>Цифры</p> <p>Пока же приведу некоторые цифры:</p> <p>- всего из активно используемых веб страниц имеется 2441 страница [...]]]></description>
			<content:encoded><![CDATA[<p>Для тех кто может быть не знает, <a href="http://www.skyur.ru">Скиур</a> &#8212; мой небольшой экспериментальный проект продолжает жить, правда пока его развитие несколько притормозилось, но не от того что нет идей куда развивать, а поскольку есть другие не менее интересные проекты.</p>
<p><strong>Цифры</strong></p>
<p>Пока же приведу некоторые цифры:</p>
<p>- всего из активно используемых веб страниц имеется <strong>2441 страница </strong>в RSS каталоге</p>
<p>- из этих страниц извлечено <strong>123 640 </strong>новостных записей (регулярной очистки устаревших) и около 1 миллиона записей если устаревшие записи не вычищать.</p>
<p>- посещаемость у сайта весьма скромная, около <strong>300</strong> уникальных посетителей в сутки что, прямо скажем немного, но для некоммерческого сервиса вполне нормально</p>
<p>- а вот посещаемость RSS лент достигает <strong>2500 </strong>уникальных посетителей в сутки.</p>
<p><strong>Текущее состояние</strong></p>
<p>При этом текущая реализация имеет свои недостатки &#8212; главный из которых в необходимости регулярной чистки данных поскольку ряд сайтов, либо извергают огромный и непрерывный поток новостей, либо меняют текст и структуру предыдущих новостей при добавлении новой, чего алгоритм не отслеживает и, как итог, рассматриват старые новости тоже как новые. Это не столь большая проблема при получении таких лент ридерами, но недостаток при хранении.</p>
<p><strong>Развитие</strong></p>
<p>Проект я изначально задумывал как некоммерческим и он таким продолжает оставаться. Признаться я пока не окончательно решил в какую сторону его развивать &#8212; улучшения инструментариев для работы с RSS или сделать частью движка распознавания типовых форм данных (чем он и является внутри).  Пока же буду рад обсудить эту тему на iCamp Russia со всеми желающими. Хотя этот доклад и отсутствует в программе &#8212; презентация у меня будет с собой.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2009/07/15/%d1%81%d0%ba%d0%b8%d1%83%d1%80-%d0%bd%d0%b5%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d1%86%d0%b8%d1%84%d1%80%d1%8b-%d0%b8-%d1%80%d0%b0%d0%b7%d0%b2%d0%b8%d1%82%d0%b8%d0%b5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

