фрагмент кода на языке javascript (+jQuery):
исправление ссылок на законодательство (статьи и части)

материал выложен: 26.08.2017

материал обновлён: 26.08.2017

Перед использованием материалов этого раздела рекомендуется ознакомиться с правилами сайта.

Одно из направлений в legal tech – анализ правовых текстов, в которых часто используются ссылки на законодательство. Неправильная запись таких ссылок может привести к неудовлетворительной работе алгоритмов их поиска, сбора и анализа, которые этого не учитывают.
Данный скрипт содержит:
  • механизм поиска и исправления инвертированных (записанных задом наперёд) ссылок на законодательство, а именно – указаний на статью и часть статьи;
  • механизм очистки всех ссылок от лишних пробелов и точек.

Также суть работы этого скрипта описана в статье:
Исправление ссылок на законодательство: эпизод 1 (статьи и части)

Этот скрипт лежит в основе этой рабочей модели.

<script>

/*
это js-скрипт, в котором:
1) в предоставленном тексте ищутся инвертированные ссылки на законодательство типа "ст. 5 ч. 4" (далее – "плохие ссылки") и исправляются на ссылки типа "ч. 4 ст. 5" (далее – "хорошие ссылки");
2) во всех найденных ссылках количество пробелов и точек сокращается до 1.
*/

// начало скрипта, отлов клика по элементу с селектором "#beginthis":

$(function() {
$("#beginthis").click(function() {

// помещение в переменную bigtext исходного текста, находящегося в текстовом поле с селектором "#oldtext":

var bigtext = $("#oldtext").val();

// поиск хороших ссылок:

var goods = bigtext.match( /ч(\.+|)(\s| |){1,9}\d{1,3}(\s| |){1,9}ст(\.+|)(\s| |){1,9}\d{1,4}/gi );

// если будет найден хоть один результат, то функция match() не возвратит значение null
// так как результат поиска – массив из найденных хороших ссылок (первый индекс равен нулю), через цикл можно исправить их все одну за другой
// если в тексте есть хотя бы одна хорошая ссылка, то начинается обработка:

if (goods != null)
{

// подсчёт количества найденных хороших ссылок, они нужны для определения максимума итераций цикла:

var goodmatches = goods.length;

// начинается цикл, в котором будут убраны лишние пробелы и точки из хороших ссылок:

for(i = 0; i < goodmatches; i++)
{

// запись в переменную currentGood текущей хорошей ссылки (чтобы удобнее было с ней работать):

var currentGood = goods[i];

// устранение лишних пробелов в хорошей ссылке:

var cleanedgood1 = currentGood.replace(/\s+/g, " ");

// устранение лишних точек в хорошей ссылке:

var cleanedgood2 = cleanedgood1.replace(/\.+/g, ".");

// перезапись текста с заменой текущей хорошей ссылки на исправленную:

bigtext = bigtext.replace(new RegExp(currentGood,"g"), cleanedgood2);
}
}

// поиск плохих ссылок:

var bads = bigtext.match( /ст(\.+|)(\s| |){1,9}\d{1,4}(\s| |){1,9}ч(\.+|)(\s| |){1,9}\d{1,3}/gi );

// если будет найден хоть один результат, то функция match() не возвратит значение null
// так как результат поиска – массив из найденных плохих ссылок (первый индекс равен нулю), через цикл можно починить их все одну за другой
// если в тексте есть хотя бы одна плохая ссылка, то начинается обработка:

if (bads != null)
{

// подсчёт количества найденных плохих ссылок, они нужны для определения максимума итераций цикла:

var badmatches = bads.length;

// начинается цикл, в котором плохие ссылки будут исправлены на хорошие и из них будут убраны лишние пробелы и точки:

for(i = 0; i < badmatches; i++) {

// запись в переменную currentBad текущей плохой ссылки (чтобы удобнее было с ней работать):

var currentBad = bads[i];

// выделение первого фрагмента текущей плохой ссылки (там, где номер статьи):

var first = currentBad.match( /ст(\.+|)(\s| |){1,9}\d{1,4}/gi );

// выделение второго фрагмента текущей плохой ссылки (там, где номер части статьи):

var second = currentBad.match( /ч(\.+|)(\s| |){1,9}\d{1,3}/gi );

// перестановка этих фрагментов (то есть собственно починка ссылки):

var fixedBad = second + " " + first;

// устранение лишних пробелов в исправленной ссылке:

var cleanedbad1 = fixedBad.replace(/\s+/g, " ");

// устранение лишних точек в исправленной ссылке:

var cleanedbad2 = cleanedbad1.replace(/\.+/g, ".");

// перезапись текста с заменой текущей плохой ссылки на починенную:

bigtext = bigtext.replace(new RegExp(currentBad,"g"), cleanedbad2); }

// ФИНАЛ: вывод преображённого текста в текстовом поле с селектором "#newtext":

$("#newtext").val(bigtext);
}

// если в тексте нет плохих ссылок, то следует вывести лишь уведомление:

if (bads == null)
{
alert("В данном тексте плохих ссылок нет");
}
});
});

</script>

Нашли ошибку или есть что дополнить?
Пишите на e-mail contact@legaltech.org.ua или сюда.