фрагмент коду мовою 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 або сюди.