<?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/%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d1%8b/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/11/12/decisionspace/</link>
		<comments>http://ivan.begtin.name/2010/11/12/decisionspace/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 13:54:50 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[из жизни]]></category>
		<category><![CDATA[размышления]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3589</guid>
		<description><![CDATA[<p>Я тут почитал обсуждения вокруг моего прошлого поста по работе с регулярными выражениями и упоминания про FPGA и не только и вспомнился мне мой личный опыт по работе с FPGA и вообще решением сложных задач. К тому же NDA у меня давно уже истёк так что можно рассказывать.</p> <p>Много лет тому назад я работал в [...]]]></description>
			<content:encoded><![CDATA[<p>Я тут почитал обсуждения вокруг моего прошлого поста по работе с регулярными выражениями и упоминания про FPGA и не только и вспомнился мне мой личный опыт по работе с FPGA и вообще решением сложных задач. К тому же NDA у меня давно уже истёк так что можно рассказывать.</p>
<p>Много лет тому назад я работал в отделе качества одной небольшой компании работающей в области биометрических технологий &#8212; конкретно идентификации и авторизации людей по отпечаткам пальцев. Причём работал я там практически с самой начальной позиции занимался поначалу банальным ручным тестированием и превращением юзкейсов в тесткейсы. Но будучи человеком ленивым и чрезмерно любопытным одновременно, довольно скоро я придумал способ как автоматизировать большую часть тесткейсов, вплоть до того, что после прихода нового билда продукта &#8212; старая версия автоматически деинсталлировалась, новая устанавливалась, прогонялись все тесты и рассылалось письмо с результатами тестирования пока я мирно попивал чай или читал какие-нибудь интересные книжки или автоматизируя ещё что-нибудь.</p>
<p>Как бы то ни было вероятно я и выглядел как наиболее незагруженный сотрудник поскольку когда возникла задача по приёмке и тестированию специально FPGS-девайса я и оказался тем кому это поручили.</p>
<p>Собственно что это было и какова предыстория. У компании существовало несколько продуктов по работе с отпечатками пальцев &#8212; клиентские приложения, сервер, библиотеки и так далее. Однако у всех из них были ограничение в виде числа отпечатков которые могли бы хранится в базе продукта. Ограничение это происходило от того что для сравнения отпечатков использовался специальный алгоритм, вернее семейство алгоритмов которые могли:</p>
<p>а. Преобразовать картинку отпечатка пальцев в специальную модель.</p>
<p>б. Проводить нечёткое сравнение одной модели с другими.</p>
<p>Ключевым был алгоритм проводящий это самое сравнение, которое хоть и работало быстро &#8212; ведь сравнивались модели, а не картинки, но на тысяч отпечатков уже начинал подтормаживать, а на сотнях тысяч вообще не смог бы работать в разумное время.</p>
<p>И как раз для этой цели компания заказала разработку специального FPGA-девайса который мог бы обрабатывать ну очень много отпечатков, до сотен тысяч и более.</p>
<p>Девайс этот был разработан и передан нам в отдел качества в формате &#171;надо принять&#187;. А то есть было понятно что он как-то работает, но разработка извне никак не курировалась, документации было минимум, никаких тесткейсов и так далее.</p>
<p>Собственно что это было. Это был действительно мощный компьютер со встроенным Linux&#8217;ом с огромным числом спец-процессоров в которые заливалась специальная прошивка с алгоритмом, а далее заливались модели отпечатков пальцев, вплоть до миллиона отпечатков. Далее в девайс должны были отправлять отдельные отпечатки на сравнение и он возвращал ID&#8217;шники отпечатков ранее в него загруженных прогоняя задачу через все процессоры. Девайс был реально ОЧЕНЬ БЫСТРЫМ то есть возникни задача загрузить в него миллион настоящих отпечатков, то он мог бы в проводить аутентификацию по новым в течении нескольких секунд.  Те кто сталкивался с подобными задачами знают насколько это непросто.</p>
<p>Однако, были и свою нюансы и с избытком. Первый и ключевой нюанс в том что девайс работал через TCP/IP где у него был специальный демон через который загружались прошивки, модели отпечатков и модели на аутентификацию. Этот демон работал асинхронно, работать с ним было реально непросто и многих возможностей нехватало.</p>
<p>Второй нюанс был в том что при нагрузочном тестировании время от времени у него &#171;отключались&#187; отдельные процессоры, а то есть переставали по тем или иным причинам отвечать, видимо из-за каких-то внутренних программно-аппаратных проблем о которых могли знать только его разработчики.</p>
<p>Кроме того девайс был один, а его необходимо было одновременно тестировать и одновременно разработчикам с ним работать для создания над ним программной обёртки.</p>
<p>И что делать? Особенно что делать мне как человеку весьма ленивому, а тут не не до лени &#8212; надо бы заставить эту штуку работать хоть как-то. Кроме того разработчиков тоже больше одного и у них тоже конфликты кто и как с устройством работает.</p>
<p>Моё решение было очень простым. Я хорошенько покопался в документации и клиентских библиотеках и написал свой эмулятор этого девайса на Python. Эмулятор мог быть установлен на любой компьютер и поддерживал  все команды этого девайса. Вплоть до того что к нему была прикручена библиотека для матчинга отпечатков от серверного продукта и он мог сравнивать небольшое число отпечатков, до тысячи. То есть это был не только полнофункциональный эмулятор, а практически сервер и с ним то мы все дружно и заработали. Далее последовательно по мере обнаружения я добавлял в эмулятор новые фичи по эмуляции известных багов девайса и опять же смог автоматизировать всё что только можно отработав все свои тесты на десятках эмуляторов одновременно.</p>
<p>Однако мою идею в том что можно использовать кластер из моих &#171;эмуляторов&#187; вместо одного FPGA-устройства тогда не поддержали. Увы и ах, а было бы интересно если бы было по другому.</p>
<p>К чему я обо всём этом пишу. У каждой задачи и у каждого решения есть своя специфика и пространство решений может быть куда шире чем оптимизация алгоритмов. В данном случае алгоритм был закрытым и был коммерческой тайной компании, возможности по его оптимизации были у единиц и то врядли, оставались только аппаратные и кластерные решения и они работали более чем успешно.</p>
<p>Лично я тогда приобрёл опыт в том что некоторые решения могут быть весьма некрасивыми, но объективно необходимыми и действенными. И каким-бы ни был тот самый FPGA-девайс с точки зрения его сопровождения, он был одним из немногих способных решать такие задачи.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/11/12/decisionspace/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>Google Refine &#8212; новое название для Gridworks</title>
		<link>http://ivan.begtin.name/2010/10/11/google-refine-%d0%bd%d0%be%d0%b2%d0%be%d0%b5-%d0%bd%d0%b0%d0%b7%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-gridworks/</link>
		<comments>http://ivan.begtin.name/2010/10/11/google-refine-%d0%bd%d0%be%d0%b2%d0%be%d0%b5-%d0%bd%d0%b0%d0%b7%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-gridworks/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 05:40:30 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[opengovdata.ru]]></category>
		<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[аналитика]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3476</guid>
		<description><![CDATA[<p>Для тех кто может быть ещё не знает Google купили компанию Metaweb &#8212; создателей FreeBase и Gridworks.</p> <p>Теперь Gridworks называется Google Refine и доступно по другому адресу <a href="https://code.google.com/p/google-refine/">https://code.google.com/p/google-refine/</a></p> <p>Gridworks, а теперь Google Refine &#8212; это один из мощнейших и инструментов по очистке данных. Ему можно на вход подать данные в CSV формате и далее различными [...]]]></description>
			<content:encoded><![CDATA[<p>Для тех кто может быть ещё не знает Google купили компанию Metaweb &#8212; создателей FreeBase и Gridworks.</p>
<p>Теперь Gridworks называется Google Refine и доступно по другому адресу <a href="https://code.google.com/p/google-refine/">https://code.google.com/p/google-refine/</a></p>
<p>Gridworks, а теперь Google Refine &#8212; это один из мощнейших и инструментов по очистке данных. Ему можно на вход подать данные в CSV формате и далее различными способами перетасовывать колонки, фильтровать, обогащать, формировать производные колонки с помощью встроенных интерпретаторов Jython и GEL.</p>
<p>В общем и целом очень мощная штука, пожалуй, лучшая из бесплатных.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/10/11/google-refine-%d0%bd%d0%be%d0%b2%d0%be%d0%b5-%d0%bd%d0%b0%d0%b7%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-gridworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Продолжение по поводу анализа структуры сайтов</title>
		<link>http://ivan.begtin.name/2010/10/04/webdatamining/</link>
		<comments>http://ivan.begtin.name/2010/10/04/webdatamining/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 08:13:09 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3453</guid>
		<description><![CDATA[<p>Хотя на сайте MS Research много интересных материалов, но, на самом деле отправной точкой во всём что касается извлечения информации из веб-сайтов, классификации, аннотирования и так далее &#8212; это страничка профессора Bing Liu <a href="http://www.cs.uic.edu/~liub/">http://www.cs.uic.edu/~liub/</a> из Института Иллинойса Чикаго.</p> <p>Помимо того что он автор книги Web Data Mining <a href="http://www.cs.uic.edu/~liub/WebMiningBook.html">http://www.cs.uic.edu/~liub/WebMiningBook.html</a> где охватывает почти все темы, но [...]]]></description>
			<content:encoded><![CDATA[<p>Хотя на сайте MS Research много интересных материалов, но, на самом деле отправной точкой во всём что касается извлечения информации из веб-сайтов, классификации, аннотирования и так далее &#8212; это страничка профессора Bing Liu <a href="http://www.cs.uic.edu/~liub/">http://www.cs.uic.edu/~liub/</a> из Института Иллинойса Чикаго.</p>
<p>Помимо того что он автор книги Web Data Mining <a href="http://www.cs.uic.edu/~liub/WebMiningBook.html">http://www.cs.uic.edu/~liub/WebMiningBook.html</a> где охватывает почти все темы, но у него же на сайте есть обучающий курс по Data Mining and Text Mining <a href="http://www.cs.uic.edu/~liub/teach/cs583-fall-10/cs583.html">http://www.cs.uic.edu/~liub/teach/cs583-fall-10/cs583.html</a> где как раз очень много материалов или ссылок на материалы других исследователей по структуре веб-сайтов.</p>
<p>При этом, как я пониманию, одно из направлений его исследований &#8212; это создание автоматических и полуавтоматических врапперов для извлечения данных из веб-сайтов с описанием технологий как автоматически на страницах выявляются значимые блоки, их расположение, классифицируются и кластеризуются ссылки и так далее.</p>
<p>Практических примеров, правда, не так много как хотелось бы. Мне понравилась идея с автоматическим анализом форм поиска билетов через сервисы бронирования для создания одной общей формы через которую идёт поиск по всем (более 5) сервисам.</p>
<p>Некоторые интересные и очевидные мысли которые я в его презентациях разглядел:</p>
<ul>
<li>данные в Веб сильно зашумлены и алгоритмы по автоматическому анализу должны уметь от этого шума избавляться</li>
<li>большая часть данных в Веб представлена фиксированным набором способов её представления &#8212; шаблонами в виде HTML тэгов</li>
<li>для выявления повторяющихся объектов на странице нужна их <em>топологизация, </em>формирование шаблонов в виде последовательностей полей и меток</li>
<li>для определения структуры сайта можно использовать tree edit distance используя DOM как дерево</li>
<li>главные проблемы работы с врапперами в их сопровождении и повторном обучении. В ответах на вопросы: как определить что враппер не работает? как его автоматически починить? должно ли переобучение менять текущий враппер или создавать новый?</li>
</ul>
<p>Плюс, там же интересные материалы по тому как именно производится тематическая классификация веб-сайтов/веб-страниц.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/10/04/webdatamining/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Понимание структуры веб-сайтов</title>
		<link>http://ivan.begtin.name/2010/10/02/webstructure/</link>
		<comments>http://ivan.begtin.name/2010/10/02/webstructure/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 15:04:55 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=3444</guid>
		<description><![CDATA[<p>Оказывается в Microsoft Research есть проект <a href="http://research.microsoft.com/en-us/projects/website_structure_mining/">Website Structure Understanding and It&#8217;s applications</a> с весьма впечатляющей коллекцией материалов по этой теме.</p> <p>Конечно, не они единственные занимаются этой темой &#8212; у меня довольно большая подборка материалов самых разных исследователей, но там их особенно много.</p> <p>Правда явно делают акцент на анализе форумов и других дискуссионных площадок, что в [...]]]></description>
			<content:encoded><![CDATA[<p>Оказывается в Microsoft Research есть проект <a href="http://research.microsoft.com/en-us/projects/website_structure_mining/">Website Structure Understanding and It&#8217;s applications</a> с весьма впечатляющей коллекцией материалов по этой теме.</p>
<p>Конечно, не они единственные занимаются этой темой &#8212; у меня довольно большая подборка материалов самых разных исследователей, но там их особенно много.</p>
<p>Правда явно делают акцент на анализе форумов и других дискуссионных площадок, что в свете популярности соц-сетей в которых уже есть структурированный контент уже не столь актуально, но всё равно интересно.</p>
<p>Вообще это одна из очень интересных тем. Я последний раз вплотную анализировал данную тему работая над алгоритмов по превращению новостных лент в HTML страницах в RSS автоматически. Алгоритм уже давно работает и активно используется на практике, однако же начинал я его именно с автоматического анализа веб-страниц для той самой цели фокусированого индексирования.</p>
<p>И, конечно, разница в подходе &#8212; они основываются на произвольных выборках веб-страниц, кластеризации ссылок, кластеризации структуры веб-страниц и последующих вероятностных предположениях.</p>
<p>Я же пытался зайти со стороны предварительной классификации сайта целиком, идентификации CMS, выявлению микро-признаков с &#171;переупаковкой&#187; структуры веб-страницы из DOM в специального рода таблицы.</p>
<p>Если бы я в последние годы не увлёкся проектами в области общественного блага (РосГосЗатраты, Открытые данные), то пожалуй самое интересное это было бы закончить исследования в этой области. Так что читаю такие материалы не без лёгкой белой зависти потому как очень увлекательно.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/10/02/webstructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBase Gridworks released</title>
		<link>http://ivan.begtin.name/2010/05/10/freebase-gridworks-released/</link>
		<comments>http://ivan.begtin.name/2010/05/10/freebase-gridworks-released/#comments</comments>
		<pubDate>Mon, 10 May 2010 08:27:53 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[data.gov.ru]]></category>
		<category><![CDATA[opengovdata.ru]]></category>
		<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[аналитика]]></category>
		<category><![CDATA[интересные проекты]]></category>
		<category><![CDATA[информация]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2831</guid>
		<description><![CDATA[<p>Появился исходный код Gridworks &#8212; <a href="http://code.google.com/p/freebase-gridworks/">http://code.google.com/p/freebase-gridworks/</a> , а также всяческие интересные примеры там же, в Wiki проекта. Этой такой инструмент по очистке и преобразованию данных сделанный внутри Metaweb&#8217;а, компании разработчика проекта Freebase.</p> <p>И инструмент уж больно интересный и полезный, особенно учитывая что он теперь и с открытым кодом однако я лично попал на баг с [...]]]></description>
			<content:encoded><![CDATA[<p>Появился исходный код Gridworks &#8212; <a href="http://code.google.com/p/freebase-gridworks/">http://code.google.com/p/freebase-gridworks/</a> , а также всяческие интересные примеры там же, в Wiki проекта. Этой такой инструмент по очистке и преобразованию данных сделанный внутри Metaweb&#8217;а, компании разработчика проекта Freebase.</p>
<p>И инструмент уж больно интересный и полезный, особенно учитывая что он теперь и с открытым кодом однако я лично попал на баг с тем что в локализованной винде имена юзеров на русском языке и, похоже что, у Gridworks из-за этого не сохраняется история работы с проектами да  и, в принципе, не работают все операции требующие сохранение на диск так как не находится путь куда сохранять.</p>
<p>Багу я им уже зарегистрировал, но сколько ждать придётся неизвестно.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/05/10/freebase-gridworks-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Систематизация распознавания пола и этноса по ФИО</title>
		<link>http://ivan.begtin.name/2010/05/04/%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%d0%bf%d0%be%d0%b7%d0%bd%d0%b0%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be%d0%bb%d0%b0-%d0%b8/</link>
		<comments>http://ivan.begtin.name/2010/05/04/%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%d0%bf%d0%be%d0%b7%d0%bd%d0%b0%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be%d0%bb%d0%b0-%d0%b8/#comments</comments>
		<pubDate>Tue, 04 May 2010 13:03:55 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[аналитика]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2801</guid>
		<description><![CDATA[<p>Какое-то время назад я эту тему поднимал в посте &#171;Распознавание национальности по имени&#187; &#8212; <a href="http://ivbeg.livejournal.com/119528.html">http://ivbeg.livejournal.com/119528.html</a></p> <p><a href="http://ivbeg.livejournal.com/119528.html"></a>Но там было нечто вроде результатов экспериментов, сейчас же затрону тему систематизации того как можно обрабатывать ФИО и какую информацию можно на основе ФИО извлечь.</p> <p>Предыстория этого текста исключительно практическая, поскольку я очень много с данными работаю, то [...]]]></description>
			<content:encoded><![CDATA[<p>Какое-то время назад я эту тему поднимал в посте &#171;Распознавание национальности по имени&#187; &#8212; <a href="http://ivbeg.livejournal.com/119528.html">http://ivbeg.livejournal.com/119528.html</a></p>
<p><a href="http://ivbeg.livejournal.com/119528.html"></a>Но там было нечто вроде результатов экспериментов, сейчас же затрону тему систематизации того как можно обрабатывать ФИО и какую информацию можно на основе ФИО извлечь.</p>
<p>Предыстория этого текста исключительно практическая, поскольку я очень много с данными работаю, то периодически возникают задачи по тому как обогатить, улучшить, извлечь и отклассифицировать данные.  Так, например, анализ  ФИО даёт возможность  добавить как минимум 2 новых среза &#8212; гендерный и этнический (более правильное название определения национальности).</p>
<p>В задачах по визуализации гендерный срез особенно интересен, поскольку при наличии большого числа дополнительных характеристик можно показать различия весьма наглядно.</p>
<p>Этнический же срез интересен только на больших выборках, но поскольку эту информацию хотя бы частично можно извлечь, то опишу этот процесс.</p>
<p>Почему систематизация ? Лично я придерживаюсь того мнения что систематизации мало не бывает. Иногда это вредит &#8212; поскольку приводит к значительному углублению в детали, но чаще это помогает поскольку позволяет лучше понять предметную область и прежде чем приступать к воплощению в коде каких-либо алгоритмов &#8212; понять, с чем же имеем дело и как обеспечить простоту анализа данных в сочетании с максимально возможным охватом.</p>
<p>В случае ФИО, начало систематизации начинается с шаблонов.</p>
<p><span id="more-2801"></span></p>
<p><strong>Шаблоны </strong></p>
<p>Форм записи ФИО не очень много и они вполне поддаются систематизации и укладываются в несколько шаблонов которые, в свою очередь, разделяются на несколько элементов.</p>
<p>Этих элементов немного и их можно перечислить:</p>
<p><strong>s</strong> &#8212; Фамилия (surname)</p>
<p><strong>f</strong> &#8212; Личное имя (first name)</p>
<p><strong>m</strong> &#8212; Отчество (midname)</p>
<p><strong>S</strong> &#8212; Однобуквенная запись фамилии</p>
<p><strong>F</strong> &#8212; Однобуквенная запись имени</p>
<p><strong>M</strong> &#8212; Обнобуквенная запись отчества.</p>
<p>Далее при анализе ФИО я буду исходить из того что ФИО &#8212; это не только фамилия, имя и отчество, но в реальной жизни это гораздо большее число форм написания того же.</p>
<p>При этом у использования этих элементов есть свои особенности в частности есть устоявшиеся сочетания в которых они присутствуют. Далее я приведу перечень шаблонов для определения этих сочетаний:</p>
<p><strong>sfm</strong> &#8212; Фамилия, имя и отчество. Например, <em>Пилипенко Мария Геннадьевна</em></p>
<p><strong>fms &#8212; </strong>Имя, Отчество, Фамилия. Например, <em>Александр Аронович Хромов</em></p>
<p><strong>sFM &#8212; </strong>Фамилия и по первой букве от имени и отчества. Например, <em>Васильев И. И.</em> или <em>Минниханов Р Е</em></p>
<p><strong>FMs &#8212; </strong>первые буквы от имени и отчества и фамилия полностью. Пример: <em>А. Ю. Макаренко, Н.Г. Буранов</em></p>
<p><strong>sfM</strong> &#8212; фамилия и имя полностью и первая буква от отчества. Примеры: <em>Ефимов Борис А., Карманова Мария В.</em></p>
<p><strong>Fs</strong> &#8212; Первая буква имени и фамилия. Например, <em>А. Румянцев </em>или <em>В Ручкин .</em></p>
<p><strong>sF</strong> &#8212; фамилия полностью и первая буква от имени. Примеры: <em>Борисов Г., Рахмонова Е.</em></p>
<p><strong>s</strong> &#8212; только фамилия. Например: <em>Хазанов</em>, <em>Минниханов, Дудкина, Малых</em></p>
<p><strong>fs  - </strong>имя, фамилия. Например: <em>Арут Карапетян</em>, <em>Борис Рыбин</em></p>
<p><strong>sf &#8212; </strong>фамилия, имя. Например: <em>Климов Максим, Мирных Алексей, Дудяк Елена</em></p>
<p><strong>fm &#8212; </strong>имя, отчество. Например: <em>Иван Петрович, Василий Аркадьевич, Рахиль Альбертовна</em></p>
<p><strong>f &#8212; </strong>личное<strong> </strong>имя. Примеры: <em>Иван, Петр, Алексей, Равиль, Аслан </em>и т.д.</p>
<p><strong>SFM</strong> &#8212; по первой букве от фамилии, имени, отчества. Примеры: <em>В.Р.Е, Е.Н.М. </em></p>
<p>Является ли этот список шаблонов исчерпывающим? Весьма вероятно что нет, однако все остальные случаи будут достаточно редкими чтобы рассматривать их как исключения и систематизировать именно с точки зрения исключений.</p>
<p><strong>Правила разбора ФИО</strong></p>
<p>Когда известны все основные шаблоны и есть входящий поток для разбора можно приступать к описанию логики анализа.</p>
<p>Прежде чем определять пол персоны или этнос важно разложить ФИО на элементы и для этой цели необходимо определить каким шаблоном ФИО написано. Как это сделать?</p>
<p>1. Вначале разбить ФИО на элементы исходя из того что разделителями могут выступать пробелы и точки.</p>
<p>2. Определяется количество частей после чего идёт ветвление на проверку по шаблонам. Если 1 часть (1 слово) &#8212; то шаблон s или f. Если две части, то sf, fm, fs, sF или Fs</p>
<p>3. Для ФИО из 3-х частей проводится простая проверка не состоят ли какие-либо части из одной буквы. Если да и более двух, то быстро определяются такие шаблоны как SFM, sFM и FMs</p>
<p>4. Далее как определить какая из частей каким типом элементов является. Есть два способа и их комбинация.</p>
<p><strong>Способ 1.</strong> Базы имён, фамилий и отчеств</p>
<p>Всего уникальных имён сравнительно немного &#8212; десятки тысяч. То же самое с отчествами. Сложнее с фамилиями &#8212; их могут быть сотни тысяч и миллионы. Однако при наличии значительных массивов возможно создание баз имён, фамилий и отчеств, а далее ручная и полуавтоматическая разметка по полу и этносу.</p>
<p><strong>Способ 2. </strong>Регулярные выражения</p>
<p>Для отчеств &#8212; окончания на <strong>-вич </strong>и <strong>-вна. </strong>Для фамилий выражений больше. Например, таки как: ^(.*)(о|е|ё)в$, ^(.*)швили$ и так далее, несколько десятков.  А также есть набор выражений для имён, но там всё несколько сложнее и это отдельная тема.</p>
<p>Для каждого из выражений может быть сопоставление его с полом или этнической группой.</p>
<p><strong>Способ 3. </strong>Использование баз и выражений совместно</p>
<p>Если запись находится в базе &#8212; исходить их признаков в базе, если нет &#8212; применять разметку регулярным выражением.</p>
<p>-</p>
<p>5. После идентификация шаблона мы имеем его описание и, если его идентификация потребовала определения типа элементов, то и предположения о поле и, возможно, этносе персоны. Для полноты картины необходимо проверить все остальные элементы регулярными выражениями и/ли по базам.</p>
<p>6. В конечном итоге результатом являются:</p>
<p>- выявленный формат шаблона</p>
<p>- размеченные элементы (фамилия, имя, отчество)</p>
<p>А также, или все имеющиеся или один производный признак пола и, при возможности определения, этноса.</p>
<p>Или же возврат,  и производного, и всех признаков. Об особенностях определения признаков в следующем пункте.</p>
<p><strong>Особенности</strong></p>
<p>Все было бы очень просто если бы не некоторые особенности которые важно помнить и учитывать.</p>
<p>1. Есть множество случаев когда пол определить невозможно даже определив шаблон и отдельные элементы. Связано это не с несовершенством методов проверки, а с тем что далеко не всегда информация о поле содержится в ФИО. Вот несколько примеров: <strong>Малых А.А. &#8212; </strong>имя и отчество присутствуют только в виде первых букв, а фамилия Малых является универсальной и может принадлежать, как женщине, так и мужчине. Точно также с фамилиями на -ко, -их и множестве других. Фактически во всех случаях шаблонов sFM, FMs, Fs, sF и s у нас недостаточно элементов несущих информацию и определение ограничено имеющейся информацией. В виду этого результатом метода по определению пола по ФИО могут быть 4 варианта ответа: женский, мужской, универсальный и неизвестно.</p>
<p>2. Есть множество региональной специфики в том что касается написания имён и отчеств. В частности в  азербайжанских казахских ФИО часто присутствует &#171;Оглы&#187; или &#171;Кызы&#187;. Например, <a href="http://www.warheroes.ru/hero/hero.asp?Hero_id=851">Асланов Ази Ахад оглы</a></p>
<p>3. Много специфики в именах используемых в национальных республиках России и бывшем СССР. Точность распознавания будет зависеть от наличия датасетов по регионам.</p>
<p>4. Описанный подход не охватывает случаи намерянных и случайных искажений. Например, когда вместо точки используют запятую или указывают ФИО вроде &#171;Гадя Петрович Хренова&#187;. А также случаи с опечатками &#8212; это несколько более сложная, но не сверхсложная задача.</p>
<p>5. Определения этноса задача сложная, в первую очередь, в виду значительных объёмов классифицируемой информации. Фактически её можно разделить на принципы определения различных этнических особенностей в ФИО разных народов. Например, окончания фамилий на &#171;-ян&#187; у армян или &#171;-дзе&#187; и &#171;-швили&#187; у грузин. А также на основе баз имён разных народов.  Однако есть много случаев когда определить этнос сложно поскольку имя может указывать лишь на то из какого языка оно происходит. А в некоторых случаях имена могут иметь множественное значение. Например имя Артур &#8212; весьма популярно среди армян и это армянское имя переводящееся как &#171;свет истины&#187; и одновременно это нередкое современное имя в России среди русских.</p>
<p><strong>Примеры</strong></p>
<p>Собственно всё вышеперечисленное какое-то время я реализовал довольно давно в виде довольно простого закрытого веб-сервиса который на входе кушает текст, а на выходе выдаёт JSON с результатами. Работает это всё настолько просто назвать это алгоритмом у меня язык не поворачивается &#8212; просто &#171;полезная штука&#187;, ничего более.</p>
<p>Вот несколько примеров.</p>
<p>Текст: <em>Бегтин И.В.</em></p>
<p>Разбор в формате JSON:</p>
<p><em>{&#8216;format&#8217;: &#8216;sFM&#8217;, &#8216;gender&#8217;: &#8216;m&#8217;, &#8216;sn&#8217;: u&#8217;Бегтин&#8217;, &#8216;fn_s&#8217;: u&#8217;И&#8217;, &#8216;text&#8217;: u&#8217;Бегтин И.В.&#8217;, &#8216;mn_s&#8217;: u&#8217;В&#8217;, &#8216;parsed&#8217;: True}</em></p>
<p>Текст: <em>Иван Викторович Бегтин</em></p>
<p>Разбор в формате JSON:</p>
<p><em>{&#8216;format&#8217;: &#8216;fms&#8217;, &#8216;gender&#8217;: u&#8217;m', &#8216;mn&#8217;: u&#8217;Викторович&#8217;, &#8216;sn&#8217;: u&#8217;Бегтин&#8217;, &#8216;text&#8217;: u&#8217;Бегтин Иван Викторович&#8217;, &#8216;parsed&#8217;: True, &#8216;fn&#8217;: u&#8217;Иван&#8217;}</em></p>
<p>Где: fn &#8212; имя, sn &#8212; фамилия, mn &#8212; отчество, fn_s &#8212; первая буква имени, format &#8212; выявленный формат описания ФИО, parsed &#8212; флаг что формат был определён, gender &#8212; пол в виде одного из признаков m, f, u и &#171;-&#187; если определение пола не прошло.</p>
<p>Нет только признаков этноса, поскольку сейчас они присутствуют только для имён</p>
<p><strong>Статистика</strong></p>
<p>В качестве небольшого дополнения приведу некоторые статистические наблюдения.</p>
<p>Для проверки точности я взял небольшой массив примерно в  5 600 000 неуникальных записей из публичных официальных документов. А то есть с частыми повторениями одного и того же ФИО, но в разных формах. Например: где-то упоминается: <em>Кудрявцев Е.В.</em>, где-то <em>Кудрявцев Евгений</em>, где-то <em>Кудрявцев Евгений Викторович</em> и так далее.</p>
<p>В результате сформировалась следующая таблица частот использования тех или иных форм записи.</p>
<tr height="20">
<td width="64" height="20"><strong>Шаблон</strong></td>
<td width="64"><strong>Частота</strong></td>
</tr>
<tr height="20">
<td height="20"><strong>sfm</strong></td>
<td align="right">49,38%</td>
</tr>
<tr height="20">
<td height="20"><strong>sFM</strong></td>
<td align="right">35,71%</td>
</tr>
<tr height="20">
<td height="20"><strong>FMs</strong></td>
<td align="right">13,42%</td>
</tr>
<tr height="20">
<td height="20"><strong>fms</strong></td>
<td align="right">1,24%</td>
</tr>
<tr height="20">
<td height="20"><strong>sF</strong></td>
<td align="right">0,069%</td>
</tr>
<tr height="20">
<td height="20"><strong>sf</strong></td>
<td align="right">0,055%</td>
</tr>
<tr height="20">
<td height="20"><strong>Fs</strong></td>
<td align="right">0,038%</td>
</tr>
<tr height="20">
<td height="20"><strong>sfM</strong></td>
<td align="right">0,029%</td>
</tr>
<tr height="20">
<td height="20"><strong>s</strong></td>
<td align="right">0,026%</td>
</tr>
<tr height="20">
<td height="20"><strong>fs</strong></td>
<td align="right">0,0010%</td>
</tr>
<tr height="20">
<td height="20"><strong>f</strong></td>
<td align="right">0.0007%</td>
</tr>
<p>Фактически можно увидеть что при 4 основных написания &#8212; <strong>sfm, sFM, FMs и fms </strong>лидируют по частоте встречаемости. Но, как я упоминал ранее, здесь есть специфика в официальности. Если же анализировать другие массивы, то распределение шаблонов по популярности будет иным.</p>
<p><strong>В качестве резюме</strong></p>
<p>В общем-то разбор ФИО &#8212; это довольно простой пример на уровне &#171;систематизации очевидного&#187;. Куда сложнее задачи по разбору адресов или, например, товарных позиций. Но ничего неразрешимого нет при условии последовательного упрощения и шаблонизации форматов представления, иногда многоуровневой.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/05/04/%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%d0%bf%d0%be%d0%b7%d0%bd%d0%b0%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bf%d0%be%d0%bb%d0%b0-%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Совсем без SQL&#8217;ные базы данных</title>
		<link>http://ivan.begtin.name/2010/04/14/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%b1%d0%b5%d0%b7-sql%d0%bd%d1%8b%d0%b5-%d0%b1%d0%b0%d0%b7%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/</link>
		<comments>http://ivan.begtin.name/2010/04/14/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%b1%d0%b5%d0%b7-sql%d0%bd%d1%8b%d0%b5-%d0%b1%d0%b0%d0%b7%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 12:35:57 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2727</guid>
		<description><![CDATA[<p>Шаг-за шагом объектные и безсхемные базы данных превращаются из экзотики в нечто общепринятое. </p> <p>На <a href="http://nosql-database.org/">nosql-database.org</a> обнаружилась большая подборка ссылок и материалов по этой теме.</p> <p>Лично я нашёл там для себя много нового и теперь знаю какие есть альтернативы уже используемого мной MongoDB.</p> <p>На мой взгляд самые интересные это:</p> Инфогрид &#8212; <a href="http://infogrid.org">http://infogrid.org</a>/ HyperGraphDb [...]]]></description>
			<content:encoded><![CDATA[<p>Шаг-за шагом объектные и безсхемные базы данных превращаются из экзотики в нечто общепринятое. </p>
<p>На <a href="http://nosql-database.org/">nosql-database.org</a> обнаружилась большая подборка ссылок и материалов по этой теме.</p>
<p>Лично я нашёл там для себя много нового и теперь знаю какие есть альтернативы уже используемого мной MongoDB.</p>
<p>На мой взгляд самые интересные это:</p>
<ul>
<li>Инфогрид &#8212; <a href="http://infogrid.org">http://infogrid.org</a>/</li>
<li>HyperGraphDb &#8212; <a href="http://www.kobrix.com/hgdb.jsp">http://www.kobrix.com/hgdb.jsp</a></li>
<li>LightCloud &#8212; <a href="http://opensource.plurk.com/LightCloud/">http://opensource.plurk.com/LightCloud/</a></li>
</ul>
<p>Но, в принципе, это интересная тенденция. Даже глаза разбегаются что лучше выбрать и использовать.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/04/14/%d1%81%d0%be%d0%b2%d1%81%d0%b5%d0%bc-%d0%b1%d0%b5%d0%b7-sql%d0%bd%d1%8b%d0%b5-%d0%b1%d0%b0%d0%b7%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Техническое: Про ускорение RSS и протоколы SUP и PubSubHub</title>
		<link>http://ivan.begtin.name/2010/04/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%83%d1%81%d0%ba%d0%be%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-rss-%d0%b8-%d0%bf%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be/</link>
		<comments>http://ivan.begtin.name/2010/04/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%83%d1%81%d0%ba%d0%be%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-rss-%d0%b8-%d0%bf%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 08:12:21 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[алгоритмы]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2710</guid>
		<description><![CDATA[<p>На TechCrunch почти год назад была пара интересных статей <a href="http://www.techcrunchit.com/2009/05/05/rest-in-peace-rss/">RSS is dying</a> и <a href="http://techcrunch.com/2009/07/09/speeding-up-rss/">Speeding up RSS</a>.</p> <p>В первой рассказывается про то как Twitter вытесняет RSS из повседневного использования, а вторая про протоколы PubSubHub и SUP.</p> <p>PubSubHub &#8212; это инициатива Брэда Фицпатрика с открытой спецификаций и открытым исходным кодом <a href="http://code.google.com/p/pubsubhubbub/">http://code.google.com/p/pubsubhubbub/</a>. Где главная идея [...]]]></description>
			<content:encoded><![CDATA[<p>На TechCrunch почти год назад была пара интересных статей <a href="http://www.techcrunchit.com/2009/05/05/rest-in-peace-rss/">RSS is dying</a> и <a href="http://techcrunch.com/2009/07/09/speeding-up-rss/">Speeding up RSS</a>.</p>
<p>В первой рассказывается про то как Twitter вытесняет RSS из повседневного использования, а вторая про протоколы PubSubHub и SUP.</p>
<p><strong>PubSubHub</strong> &#8212; это инициатива Брэда Фицпатрика с открытой спецификаций и открытым исходным кодом <a href="http://code.google.com/p/pubsubhubbub/">http://code.google.com/p/pubsubhubbub/</a>. Где главная идея в том создатели RSS лент регистрируют их на одном из PubSubHub сервисов и далее пингуют сервисы при обновлении своих лент, а хабы мультикастом распространяют контент по всем подписчикам. Конечно, в такой схеме нужно чтобы клиент мог принимать новые сообщения и такие клиенты появляются, их список можно посмотреть здесь &#8212; <a href="http://code.google.com/p/pubsubhubbub/wiki/SubscriberClients">http://code.google.com/p/pubsubhubbub/wiki/SubscriberClients</a><br />
Однако изменения нужны, и на сервере, и на клиенте, и необходим внешний сервис.</p>
<p><strong>SUP (Simple Update Protocol)</strong> &#8212; это протокол разработанный для FriendFeed. Также с открытой спецификацией и исходным кодом доступными здесь <a href="http://code.google.com/p/simpleupdateprotocol/">http://code.google.com/p/simpleupdateprotocol/</a><br />
Он очень просто устроен и отличается тем что никак не специфицирует работу клиентов, а описывает механизм публикации при котором в новостные ленты сайта добавляются указания на ленту SUP где с заданной периодичностью указываются те новостные ленты где произошли изменения. Тем самым, в случае если с одного ресурса извлекается более одной RSS ленты, то число обращений можно существенно ограничить. А также за счёт того что в заголовках HTTP ответов указывается текущий статус RSS ленты, то и существенно сократить число выгрузок лент. </p>
<p>Лично мне оба подхода в равной степени нравятся/не нравятся. На мой взгляд они вполне равновесны.<br />
Однако они не решают другой большой и сложной задачи которая заключается в том что же делать когда вероятность что разработчики сайтов добавят поддержку одного из протоколов очень невлика. И это, в общем-то, обыденная ситуация если вспомнить что не все сайты до сих пор поддерживают технологию RSS. А если говорить про наиболее интересующую меня категорию веб-сайтов, то до 80% из них RSS не отдают. </p>
<p>И вот вопрос как быть в этом случае?<br />
Свои размышления по этому поводу я собрал в виде нескольких тезисов:<br />
1. В зависимости от характера решаемых задач подход может быть различным. Главный критерий здесь &#8212; ожидаемый интервал оперативности в получении новостной информации и это может определять стратегии сбора информации. К примеру, если новости собранные за сутки используются лишь для дайджеста<br />
2. У подавляющего числа RSS лент есть свои &#171;временные паттерны&#187;. Которые можно охарактеризовать как периоды времени активности в данной RSS ленте. В большинстве случаев эти временные паттерны напрямую завязаны на суточный цикл дня и ночи привязанный к источнику этих данных и недельный/календарный цикл с учётом падения активности в выходные и праздничные дни. Разумеется в случаях когда речь идёт &#171;естественных&#187; новостных лентах формируемых людьми, а не ботами.  При выявлении характеристик этих циклов могут быть определены интервалы опроса источников информации. Это может позволить соблюсти баланс между использованием ресурсов и частотой обновления.<br />
3. Некоторые сервера честно возвращают даты фактического обновления в &#171;Last Modified&#187;, некоторые отдают заголовок &#171;ETag&#187; и чаще отдают информацию о размере страницы/ленты. При наличии этой информации её можно использовать для сокращения числа GET запросов. Правда, при этом сразу возникают другие особенности &#8212; в том необходимо убедится в том что информация в заголовках от сервера корректна. Например, несколько раз я сталкивался с тем что возвращалось неверное значение ETag, в том что &#171;Last Modified&#187; возвращает корректные значения также необходимо убеждаться, равно как и есть определённые риски в использовании &#171;Content-Length&#187; для принятия решения об обновлении или необновлении RSS ленты. </p>
<p>Минусы этих подходов &#8212; необходимости предварительного сбора накопления информации перед тем как выбирать правильную стратегию опроса RSS лент. И, конечно, универсальным решением это не является, в отличии от SUP&#8217;а и PubSubHub. Правда, подозреваю что до тех пор пока разработчики CMS не начнут включать поддержку одного из них в свои продукты по умолчанию, на большинстве сайтов мы их так и не увидим.</p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/04/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%83%d1%81%d0%ba%d0%be%d1%80%d0%b5%d0%bd%d0%b8%d0%b5-rss-%d0%b8-%d0%bf%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OData: Open Data Protocol</title>
		<link>http://ivan.begtin.name/2010/03/29/odata-open-data-protocol/</link>
		<comments>http://ivan.begtin.name/2010/03/29/odata-open-data-protocol/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 09:55:24 +0000</pubDate>
		<dc:creator>ivbeg</dc:creator>
				<category><![CDATA[data.gov.ru]]></category>
		<category><![CDATA[opengovdata.ru]]></category>
		<category><![CDATA[semweb]]></category>
		<category><![CDATA[алгоритмы]]></category>
		<category><![CDATA[стандарты]]></category>

		<guid isPermaLink="false">http://ivan.begtin.name/?p=2676</guid>
		<description><![CDATA[<p><a href="http://ivan.begtin.name/wp-content/uploads/2010/03/OData-logo.png"></a><br /> Оказывается Microsoft сделали и предложили протокол OData &#8212; Open Data Protocol используемый для раскрытия данных в машиночитаемой форме. </p> <p>Подробнее можно почитать здесь <a href="http://www.odata.org">http://www.odata.org</a></p> <p>А вот его полное описание &#8212;<br /> There is a vast amount of data available today and data is now being collected and stored at a rate [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ivan.begtin.name/wp-content/uploads/2010/03/OData-logo.png"><img src="http://ivan.begtin.name/wp-content/uploads/2010/03/OData-logo.png" alt="" title="OData-logo" width="202" height="57" class="alignnone size-full wp-image-2677" /></a><br />
Оказывается Microsoft сделали и предложили протокол OData &#8212; Open Data Protocol используемый для раскрытия данных в машиночитаемой форме. </p>
<p>Подробнее можно почитать здесь <a href="http://www.odata.org">http://www.odata.org</a></p>
<p>А вот его полное описание &#8212;<br />
<em>There is a vast amount of data available today and data is now being collected and stored at a rate never seen before. Much, if not most, of this data however is locked into specific applications or formats and difficult to access or to integrate into new uses.  Public data is often unfortunately held private or needlessly buried behind random, inefficient, and cumbersome interfaces.</p>
<p>The Open Data Protocol (OData) provides a way to unlock your data and free it from silos that exist in applications today, making it easy for data to be shared in a manner that follows the philosophy of Open Data. OData enables a new level of data integration and interoperability across a broad range of clients, servers, services, and tools.</em></p>
<p>Это реально радует. Во первых сама спецификация протокола довольно проста и понятна, во вторых она без жёсткой привязки к сервисам MS. </p>
<p>А я тем временем всё больше понимаю что на OpenGovData.ru должны быть инструкции и разъяснения как именно надо публиковать информацию. </p>
]]></content:encoded>
			<wfw:commentRss>http://ivan.begtin.name/2010/03/29/odata-open-data-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

