Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const data = {
- "length": 1003,
- "structures": [
- {
- "box": [
- 26.104801177978516,
- 310.1233825683594,
- 1238.287109375,
- 558.5025024414062
- ],
- "score": 0.999370276927948,
- "category": "table",
- "table": [
- [
- {
- "raw_text": "оп-ции",
- "coords": [
- 27,
- 37,
- 83,
- 51
- ]
- },
- {
- "raw_text": "дата",
- "coords": [
- 31,
- 15,
- 77,
- 33
- ]
- },
- {
- "raw_text": "№ док.",
- "coords": [
- 107,
- 13,
- 161,
- 31
- ]
- },
- {
- "raw_text": "вид",
- "coords": [
- 181,
- 15,
- 213,
- 31
- ]
- },
- {
- "raw_text": "от.",
- "coords": [
- 183,
- 37,
- 207,
- 51
- ]
- },
- {
- "raw_text": "бик банка",
- "coords": [
- 227,
- 13,
- 315,
- 31
- ]
- },
- {
- "raw_text": "корр.",
- "coords": [
- 251,
- 37,
- 291,
- 53
- ]
- },
- {
- "raw_text": "корр. счет",
- "coords": [
- 369,
- 13,
- 455,
- 33
- ]
- },
- {
- "raw_text": "‘отправителя/",
- "coords": [
- 540,
- 34,
- 653,
- 53
- ]
- },
- {
- "raw_text": "№ счета",
- "coords": [
- 559,
- 13,
- 631,
- 31
- ]
- },
- {
- "raw_text": "корреспондирующего",
- "coords": [
- 705,
- 33,
- 867,
- 53
- ]
- },
- {
- "raw_text": "№",
- "coords": [
- 775,
- 15,
- 795,
- 31
- ]
- },
- {
- "raw_text": "содержание",
- "coords": [
- 917,
- 15,
- 1015,
- 33
- ]
- },
- {
- "raw_text": "операции",
- "coords": [
- 927,
- 37,
- 1001,
- 53
- ]
- },
- {
- "raw_text": "дебет",
- "coords": [
- 1063,
- 13,
- 1117,
- 33
- ]
- },
- {
- "raw_text": "кредит",
- "coords": [
- 1145,
- 13,
- 1207,
- 33
- ]
- }
- ],
- [
- {
- "raw_text": "получателя",
- "coords": [
- 549,
- 55,
- 643,
- 71
- ]
- },
- {
- "raw_text": "счета",
- "coords": [
- 761,
- 55,
- 811,
- 69
- ]
- }
- ],
- [
- {
- "raw_text": "арендная плата за.",
- "coords": [
- 899,
- 81,
- 1031,
- 99
- ]
- },
- {
- "raw_text": "01.09-31.09 по",
- "coords": [
- 909,
- 99,
- 1019,
- 117
- ]
- }
- ],
- [
- {
- "raw_text": "17.08.2019",
- "coords": [
- 13,
- 117,
- 95,
- 137
- ]
- },
- {
- "raw_text": "1981",
- "coords": [
- 117,
- 117,
- 153,
- 137
- ]
- }
- ],
- [
- {
- "raw_text": "01",
- "coords": [
- 185,
- 119,
- 205,
- 135
- ]
- },
- {
- "raw_text": "044567848",
- "coords": [
- 229,
- 117,
- 311,
- 137
- ]
- },
- {
- "raw_text": "3010181000000000258 ] 40702810700000045675",
- "coords": [
- 329,
- 117,
- 681,
- 137
- ]
- },
- {
- "raw_text": "‘нежилых помещений",
- "coords": [
- 885,
- 139,
- 1043,
- 155
- ]
- },
- {
- "raw_text": "‘договору аренды.",
- "coords": [
- 901,
- 123,
- 1029,
- 139
- ]
- },
- {
- "raw_text": "19000,00.",
- "coords": [
- 1057,
- 117,
- 1125,
- 137
- ]
- }
- ],
- [
- {
- "raw_text": "№ 4885",
- "coords": [
- 931,
- 155,
- 997,
- 175
- ]
- }
- ],
- [
- {
- "raw_text": "17.08.2019",
- "coords": [
- 13,
- 201,
- 95,
- 221
- ]
- },
- {
- "raw_text": "1982",
- "coords": [
- 117,
- 203,
- 155,
- 221
- ]
- },
- {
- "raw_text": "01",
- "coords": [
- 185,
- 205,
- 205,
- 221
- ]
- },
- {
- "raw_text": "04478226",
- "coords": [
- 233,
- 201,
- 309,
- 221
- ]
- },
- {
- "raw_text": "3010181000000000354 | 40702810600000067132",
- "coords": [
- 327,
- 198,
- 682,
- 224
- ]
- },
- {
- "raw_text": "оплата заказа № 4 от",
- "coords": [
- 887,
- 191,
- 1043,
- 211
- ]
- },
- {
- "raw_text": "17.05.2019",
- "coords": [
- 923,
- 211,
- 1005,
- 231
- ]
- },
- {
- "raw_text": "26700,00",
- "coords": [
- 1139,
- 203,
- 1209,
- 223
- ]
- }
- ]
- ],
- "raw": {
- "lines": [
- "дата 'вид бик банка `корр счет _№ счета № содержание дебет кредит",
- "опции оп корр отправителя корреспондирующего операции",
- "по еля ‘счета",
- "арендная плата за",
- "01093109 по",
- "17082019 044567848 3010181000000000258 40702810700000045675 логоворуаренлы 1900000",
- "‘нежилых помещений",
- "№4885",
- "оплата заказа № 4 от",
- "лаз п о отв ан нии ыы"
- ]
- }
- }
- ]
- }
- // Ищем какой ячейке принадлежит клик
- for (const structure of data.structures) {
- let array = {};
- for (const rowIndex in structure.table) {
- const row = structure.table[rowIndex]
- for (const colIndex in row) {
- const block = row[colIndex];
- const coords = block.coords;
- // Нас интересует только проекция на ось Y
- // Так как у нас есть номер строки.
- const start = coords[1];
- const end = coords[3];
- // Первуб строку просто добавляем.
- if (rowIndex == 0) {
- array[rowIndex][colIndex] = {start, end, rowIndex, colIndex};
- continue;
- }
- // Получаем пересечение с другими колонками.
- // Скорее всего нужно искать только первое пересечение...
- const crossing = (function() {
- for (const iRow of array) {
- const rows = array[iRow];
- for (const iCol of rows) {
- const ceil = rows[iCol];
- // ceil вида {start, end, ...}
- // У нас есть две ячейки (два отрезка) - ищем их пересечение
- if (start <= ceil.start && ceil.start <= end) {
- return {iRow, iCol};
- }
- if (start <= ceil.end && ceil.end <= end) {
- return {iRow, iCol};
- }
- }
- }
- })();
- // Сначала пытаемся отнести текущую ячейку к другому столбцу
- if (crossing) {
- array[iRow][iCol] = {start, end, rowIndex, colIndex};
- }else {
- // Ячейка ни с чем не пересеклась.
- // В этом случае есть три варианта что с ней делать:
- // 1. Вставить в начало (сдвинув все ячейки во всех строках на один вправо)
- // 2. Вставить в середину (сдвинув часть ячеек во всех строках на один вправо)
- // 3. Вставить в конец
- // Кейс первый:
- const first = (() => {
- for (const row of array) {
- if (row[0] && row[0].start < end) {
- return false;
- }
- }
- return true;
- });
- if (first) {
- for (const iRow of array) {
- }
- }
- }
- }
- }
- }
Advertisement