|
| |||
|
|
Оцифровка Большого Террора: ищем алгоритм (полу)автоматической классификации Портативный прибор, как известно, который с ручкой, полупортативный - с двумя ручками. Так и алгоритмы - у автоматических классификаторов надо потом ручками результаты переделывать, а полуавтоматические позволяют заниматься этим уже в процессе работы алгоритма. Но хватит лирики, перейдем к делу. Вчера я без особой надежды на успех попросил у френдов помощи в классификации таблицы приговоров по политическим делам в СССР. Неожиданно для меня самого завязалась любопытная дискуссия, заставившая углубиться в проблему. Так что давайте углубляться. 1. Таблица 229001 вариантов приговоров и таблица частот встречаемости этих вариантов в 2.7 млн. записей о жертвах политического террора лежат здесь, формат - phpMyAdmin "экпорт CSV для Excel". 2. Выглядят приговоры примерно так (случайные 15): "227843"; "к высылке в Зап.-Сиб. кр. сроком на 3 г. совместно с семьей." "21740"; "спецпоселение: Омская обл. 1941-04.04.1955 (умерла)" "83278"; "5 лет ИТЛ, отбыв.: Унжлаг, освоб. 07.01.42" "6279"; "раскулачена - Кемеровская обл., Анжеро-Судженск, ум. на с/п 21.05.1942" "24781"; "спецпоселение, снят 03.03.1950" "96027"; "7 лет ИТЛ, 3 года п/п, конфискация имущества, отбыв.: Лаготдел.№ 4, освоб. 25.02.1950" "101493"; "к ссылке с семьей на 3 года." "139850"; "лишена избирательных прав, Восстановлена 11.12.1933 года" "190372"; "8 г. лишения свободы. Умер в Вятлаге 30.05.1940" "65156"; "к 5 годам лишения свободы в концлагере с применением принудительных работ, амнистирован." "87544"; "10 лет ИТЛ, освоб. 11.11.1944" "145000"; "к 5 годам ИТЛ. Определением Военной Коллегии Верховного Суда СССР 04.02.36 дело возвращено на дополнительное расследование . Военным Трибуналом Тихоокеанского бассейна 13.03.36 дело прекращено, из-под стражи освобожден." "26192"; "спецпоселение, снят 01.09.1954" "55948"; "\"Забродина подвергнуть лишению свободы в ИТЛ сроком на 10 лет, с поражением в правах по п.п.\"а, б, в\"ст.31 УК РСФСР сроком на 5 лет с конфискацией всего лично ему принадлежащее имущество, с зачетом предварительного заключения с 12.11.1944 г.\"" "177540"; "Умер 15.3.33 во время следствия, в больнице с.Кривоозерки." 3. Обрабатывать вручную 229000 строк - заведомо неподъемное дело; поэтому нужен скрипт или программа, хоть как-то автоматизирующая классификацию. Дальше пойдет речь о возможных алгоритмических решениях для такой программы. 4. Первое, что приходит в голову - использовать нечеткое сравнение строк. Например, сравнивать "10 лет" и "подвергнуть лишению свободы сроком на 10 лет". Но это может сработать в том случае, если мы уже знаем, что "10 лет" - значимый термин (в отличие от "больницы с.Кривоозерки"). А как составить список самих значимых терминов? Алгоритм должен помочь прежде всего в этом! 5. Добывать значимые термины можно исходя из предположения, что в коротких записях (1-2 слова) скорее используются они, нежели всякие там "тихоокеанские бассейны". Таким образом, можно составить словари 1-словных и 2-словных формулировок, а затем проверить, насколько часто найденные термины встречаются в общем массиве. Пока что до конца эта идея не реализована, равно как и прочие. Что хочется получить в результате. Программу на языке, позволяющем запускать исходники на локальной машине (питон, джава, перл...), которая делает вот что: 1) первым проходом формирует файл терминов-гипотез, примерно такого вида: 10, лет 10, ИТЛ 10, лишению, свободы 10, годам ... 2) позволяет назначить каждой связке терминов общий ("обобщение"), например так: 10, лишению, свободы = 10 лет 10, ИТЛ = 10 лет 3) после ручной правки файла терминов - осуществляет сопоставление каждой строки с одним или более обобщением, и выводит спорные случаи (когда строка либо ни под одно обобщение не подпадает, либо подпадает больше чем под одно). Итерациями 2-3 можно довести файл гипотез до приемлемого качества обобщений, и после чего сделать его достоянием общества. Ну что, двигаемся дальше? |
|||||||||||||