Цитата
Наверное, на результат в определенной степени влияет и то, что основная информация в Навигаторе пока выбрана из нескольких фамильных тем. В них преимущественно размещается информация по родственным связям и фамилиям, сосредоточенным в определенном регионе.
Безусловно. Там, где больше информации — там и результат будет «гуще». Кстати, эта программа позволяет отловить некоторые огрехи в гиперссылках внутри статей-справок базы Навигатора. Хотя их пока обнаружено совсем немного и на общий результат они существенного влияния не оказали - но и тут есть польза.
Сегодня, если успею, постараюсь вкратце описать здесь алгоритм программы — он несложный, как я уже отметил выше.
***
Сначала напомним формулировку «Занимательной генетики» - как задачи (функции) Навигатора:
«По наперед заданной персоне составить список группы персон - путем выборки из базы Навигатора всех персон, связанных с заданной родственными связями - как бы далеко эти связи ни уводили от исходной персоны» (обрыв родственных связей, как мы понимаем, может иметь причины разного характера: безусловного — бездетность, условного — выбытие потомков из духовного сословия вообще или перехода в другую епархию, объективного — отсутствие архивных данных, субъективного — отсутствие данных в базе Навигатора).
Проверка: по любой другой наперед заданной персоне из полученного списка, в результате новой выборки можно получить новый список, который будет точно таким же по составу и числу персон.
Следствие: если код персоны в Навигаторе условно назвать кодом ее «ДНК» (или «псевдо-ДНК» - как угодно), а коды персон из отобранной группы - «сопряженными генами», то каждая персона из группы имеет "развернутую" цепочку «сопряженных генов» одной и той же длины и состава; порядок расположения (последовательности) «сопряженных генов» для каждой персоны из группы уникален, но общий принцип — первые «гены» в цепочке — это «метки» ближайших для данной персоны родственников.
Начало алгоритма.
Шаг 0 / Программный модуль 0.
Cоставить список всех статей-справок (файлов .pdf – их на текущий момент в базе 1632).
Это решается просто — одна стандартная команда DOS.
Результат: список файлов (TEMP).
Далее требуется специальное программирование.
Шаг 1 / Программный модуль 1.
Последовательно проходя все статьи-справки из списка TEMP по принципу,
поясненному тут, сформировать «Генетическую карту» духовенства MAP, пример которой приведен
тут.
Шаг 2 / Программный модуль 2.
Задать персону (код), пример: 00002 (персона - Предтечевский Иоанн Яковлевич).
Далее все операции выполняются на карте MAP.
Найти и выбрать из карты заданную персону, пример:
00002 00001 80069 00004
Итерация 1:
Найти и выбрать персону по первому «сопряженному гену» (в примере это 00001); результат:
00001 00002
Сравнить пару:
00002 00001 80069 00004
00001 00002
Если есть новые «гены», то выбрать и добавить к исходной строке (в данном примере таких нет), если новых «генов» нет, то перейти к следующему «гену» из исходной строки (в нашем примере это 80069).
Итерация 2:
Выполнить поиск и выборку для следующего «гена» из исходной строки (в примере это 80069 со своим собственным составом «сопряженных генов»: 80069 81164 00002 81160 81157)
Сравнить пару:
00002 00001 80069 00004
80069 81164 00002 81160 81157
Здесь уже видим новые «гены», поэтому добавляем их в исходную строку, которая приобретет вид:
00002 00001 80069 00004 81164 81160 81157
Итерация N
...
И так далее... (исходная строка будет расти)... до тех пор, пока не останется нераскрытых ссылок (т.е. пока не произойдет обрыв последней из обнаруженных родственных связей по причинам, отмеченным выше).
Результат: развернутая последовательность «генов» для наперед заданной персоны - файл GROUP.
Шаг 3 / Программный модуль 3.
Путем последовательной выборки «генов» из GROUP, опираясь на именной список Навигатора, составить развернутый список персон группы — файл FULL.
Конец алгоритма.
Примечание 1. При необходимости, файл FULL можно подгрузить в электронную таблицу, произведя сортировку по фамилиям, именам, отчествам (пример FULL-ABC
см. тут).
Примечание 2. Извлечение данных из статей-справок (Шаг 1) - наиболее «тяжелая» операция; реализованная программа работает (на довольно старом лэп-топе с процессором Intel Centrino Duo) со скоростью примерно 2 справка/сек (на всей базе Навигатора это примерно 15 минут работы программного модуля). Шаги 2 и 3, конечно, выполняются быстро — не более 30 секунд на каждый (при размере выбранной группы 850 персон).
Прошу прощения за «неформатную» для жанра форума длину сообщения.
Сообщение отредактировал cadvmp: 17 January 2014 - 19:38