Gistrec

DB Clasterize

May 16th, 2021
492
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const data = {
  2.     "length": 1003,
  3.     "structures": [
  4.         {
  5.             "box": [
  6.                 26.104801177978516,
  7.                 310.1233825683594,
  8.                 1238.287109375,
  9.                 558.5025024414062
  10.             ],
  11.             "score": 0.999370276927948,
  12.             "category": "table",
  13.             "table": [
  14.                 [
  15.                     {
  16.                         "raw_text": "оп-ции",
  17.                         "coords": [
  18.                             27,
  19.                             37,
  20.                             83,
  21.                             51
  22.                         ]
  23.                     },
  24.                     {
  25.                         "raw_text": "дата",
  26.                         "coords": [
  27.                             31,
  28.                             15,
  29.                             77,
  30.                             33
  31.                         ]
  32.                     },
  33.                     {
  34.                         "raw_text": "№ док.",
  35.                         "coords": [
  36.                             107,
  37.                             13,
  38.                             161,
  39.                             31
  40.                         ]
  41.                     },
  42.                     {
  43.                         "raw_text": "вид",
  44.                         "coords": [
  45.                             181,
  46.                             15,
  47.                             213,
  48.                             31
  49.                         ]
  50.                     },
  51.                     {
  52.                         "raw_text": "от.",
  53.                         "coords": [
  54.                             183,
  55.                             37,
  56.                             207,
  57.                             51
  58.                         ]
  59.                     },
  60.                     {
  61.                         "raw_text": "бик банка",
  62.                         "coords": [
  63.                             227,
  64.                             13,
  65.                             315,
  66.                             31
  67.                         ]
  68.                     },
  69.                     {
  70.                         "raw_text": "корр.",
  71.                         "coords": [
  72.                             251,
  73.                             37,
  74.                             291,
  75.                             53
  76.                         ]
  77.                     },
  78.                     {
  79.                         "raw_text": "корр. счет",
  80.                         "coords": [
  81.                             369,
  82.                             13,
  83.                             455,
  84.                             33
  85.                         ]
  86.                     },
  87.                     {
  88.                         "raw_text": "‘отправителя/",
  89.                         "coords": [
  90.                             540,
  91.                             34,
  92.                             653,
  93.                             53
  94.                         ]
  95.                     },
  96.                     {
  97.                         "raw_text": "№ счета",
  98.                         "coords": [
  99.                             559,
  100.                             13,
  101.                             631,
  102.                             31
  103.                         ]
  104.                     },
  105.                     {
  106.                         "raw_text": "корреспондирующего",
  107.                         "coords": [
  108.                             705,
  109.                             33,
  110.                             867,
  111.                             53
  112.                         ]
  113.                     },
  114.                     {
  115.                         "raw_text": "№",
  116.                         "coords": [
  117.                             775,
  118.                             15,
  119.                             795,
  120.                             31
  121.                         ]
  122.                     },
  123.                     {
  124.                         "raw_text": "содержание",
  125.                         "coords": [
  126.                             917,
  127.                             15,
  128.                             1015,
  129.                             33
  130.                         ]
  131.                     },
  132.                     {
  133.                         "raw_text": "операции",
  134.                         "coords": [
  135.                             927,
  136.                             37,
  137.                             1001,
  138.                             53
  139.                         ]
  140.                     },
  141.                     {
  142.                         "raw_text": "дебет",
  143.                         "coords": [
  144.                             1063,
  145.                             13,
  146.                             1117,
  147.                             33
  148.                         ]
  149.                     },
  150.                     {
  151.                         "raw_text": "кредит",
  152.                         "coords": [
  153.                             1145,
  154.                             13,
  155.                             1207,
  156.                             33
  157.                         ]
  158.                     }
  159.                 ],
  160.                 [
  161.                     {
  162.                         "raw_text": "получателя",
  163.                         "coords": [
  164.                             549,
  165.                             55,
  166.                             643,
  167.                             71
  168.                         ]
  169.                     },
  170.                     {
  171.                         "raw_text": "счета",
  172.                         "coords": [
  173.                             761,
  174.                             55,
  175.                             811,
  176.                             69
  177.                         ]
  178.                     }
  179.                 ],
  180.                 [
  181.                     {
  182.                         "raw_text": "арендная плата за.",
  183.                         "coords": [
  184.                             899,
  185.                             81,
  186.                             1031,
  187.                             99
  188.                         ]
  189.                     },
  190.                     {
  191.                         "raw_text": "01.09-31.09 по",
  192.                         "coords": [
  193.                             909,
  194.                             99,
  195.                             1019,
  196.                             117
  197.                         ]
  198.                     }
  199.                 ],
  200.                 [
  201.                     {
  202.                         "raw_text": "17.08.2019",
  203.                         "coords": [
  204.                             13,
  205.                             117,
  206.                             95,
  207.                             137
  208.                         ]
  209.                     },
  210.                     {
  211.                         "raw_text": "1981",
  212.                         "coords": [
  213.                             117,
  214.                             117,
  215.                             153,
  216.                             137
  217.                         ]
  218.                     }
  219.                 ],
  220.                 [
  221.                     {
  222.                         "raw_text": "01",
  223.                         "coords": [
  224.                             185,
  225.                             119,
  226.                             205,
  227.                             135
  228.                         ]
  229.                     },
  230.                     {
  231.                         "raw_text": "044567848",
  232.                         "coords": [
  233.                             229,
  234.                             117,
  235.                             311,
  236.                             137
  237.                         ]
  238.                     },
  239.                     {
  240.                         "raw_text": "3010181000000000258 ] 40702810700000045675",
  241.                         "coords": [
  242.                             329,
  243.                             117,
  244.                             681,
  245.                             137
  246.                         ]
  247.                     },
  248.                     {
  249.                         "raw_text": "‘нежилых помещений",
  250.                         "coords": [
  251.                             885,
  252.                             139,
  253.                             1043,
  254.                             155
  255.                         ]
  256.                     },
  257.                     {
  258.                         "raw_text": "‘договору аренды.",
  259.                         "coords": [
  260.                             901,
  261.                             123,
  262.                             1029,
  263.                             139
  264.                         ]
  265.                     },
  266.                     {
  267.                         "raw_text": "19000,00.",
  268.                         "coords": [
  269.                             1057,
  270.                             117,
  271.                             1125,
  272.                             137
  273.                         ]
  274.                     }
  275.                 ],
  276.                 [
  277.                     {
  278.                         "raw_text": "№ 4885",
  279.                         "coords": [
  280.                             931,
  281.                             155,
  282.                             997,
  283.                             175
  284.                         ]
  285.                     }
  286.                 ],
  287.                 [
  288.                     {
  289.                         "raw_text": "17.08.2019",
  290.                         "coords": [
  291.                             13,
  292.                             201,
  293.                             95,
  294.                             221
  295.                         ]
  296.                     },
  297.                     {
  298.                         "raw_text": "1982",
  299.                         "coords": [
  300.                             117,
  301.                             203,
  302.                             155,
  303.                             221
  304.                         ]
  305.                     },
  306.                     {
  307.                         "raw_text": "01",
  308.                         "coords": [
  309.                             185,
  310.                             205,
  311.                             205,
  312.                             221
  313.                         ]
  314.                     },
  315.                     {
  316.                         "raw_text": "04478226",
  317.                         "coords": [
  318.                             233,
  319.                             201,
  320.                             309,
  321.                             221
  322.                         ]
  323.                     },
  324.                     {
  325.                         "raw_text": "3010181000000000354 | 40702810600000067132",
  326.                         "coords": [
  327.                             327,
  328.                             198,
  329.                             682,
  330.                             224
  331.                         ]
  332.                     },
  333.                     {
  334.                         "raw_text": "оплата заказа № 4 от",
  335.                         "coords": [
  336.                             887,
  337.                             191,
  338.                             1043,
  339.                             211
  340.                         ]
  341.                     },
  342.                     {
  343.                         "raw_text": "17.05.2019",
  344.                         "coords": [
  345.                             923,
  346.                             211,
  347.                             1005,
  348.                             231
  349.                         ]
  350.                     },
  351.                     {
  352.                         "raw_text": "26700,00",
  353.                         "coords": [
  354.                             1139,
  355.                             203,
  356.                             1209,
  357.                             223
  358.                         ]
  359.                     }
  360.                 ]
  361.             ],
  362.             "raw": {
  363.                 "lines": [
  364.                     "дата 'вид  бик банка `корр счет _№ счета № содержание дебет  кредит",
  365.                     "опции оп  корр отправителя корреспондирующего операции",
  366.                     "по еля ‘счета",
  367.                     "арендная плата за",
  368.                     "01093109 по",
  369.                     "17082019 044567848  3010181000000000258  40702810700000045675 логоворуаренлы  1900000",
  370.                     "‘нежилых помещений",
  371.                     "№4885",
  372.                     "оплата заказа № 4 от",
  373.                     "лаз п о  отв ан нии   ыы"
  374.                 ]
  375.             }
  376.         }
  377.     ]
  378. }
  379.  
  380.  
  381.  
  382. // Ищем какой ячейке принадлежит клик
  383. for (const structure of data.structures) {
  384.     let array = {};
  385.  
  386.     for (const rowIndex in structure.table) {
  387.         const row = structure.table[rowIndex]
  388.  
  389.         for (const colIndex in row) {
  390.             const block  = row[colIndex];
  391.             const coords = block.coords;
  392.  
  393.             // Нас интересует только проекция на ось Y
  394.             // Так как у нас есть номер строки.
  395.             const start = coords[1];
  396.             const end   = coords[3];
  397.  
  398.             // Первуб строку просто добавляем.
  399.             if (rowIndex == 0) {
  400.                 array[rowIndex][colIndex] = {start, end, rowIndex, colIndex};
  401.                 continue;
  402.             }
  403.  
  404.  
  405.             // Получаем пересечение с другими колонками.
  406.             // Скорее всего нужно искать только первое пересечение...
  407.             const crossing = (function() {
  408.                 for (const iRow of array) {
  409.                     const rows = array[iRow];
  410.                     for (const iCol of rows) {
  411.                         const ceil = rows[iCol];
  412.                         // ceil вида {start, end, ...}
  413.  
  414.                         // У нас есть две ячейки (два отрезка) - ищем их пересечение
  415.                         if (start <= ceil.start && ceil.start <= end) {
  416.                             return {iRow, iCol};
  417.                         }
  418.                         if (start <= ceil.end && ceil.end <= end) {
  419.                             return {iRow, iCol};
  420.                         }
  421.                     }
  422.                 }
  423.             })();
  424.             // Сначала пытаемся отнести текущую ячейку к другому столбцу
  425.  
  426.             if (crossing) {
  427.                 array[iRow][iCol] = {start, end, rowIndex, colIndex};
  428.             }else {
  429.                 // Ячейка ни с чем не пересеклась.
  430.                 // В этом случае есть три варианта что с ней делать:
  431.                 // 1. Вставить в начало (сдвинув все ячейки во всех строках на один вправо)
  432.                 // 2. Вставить в середину (сдвинув часть ячеек во всех строках на один вправо)
  433.                 // 3. Вставить в конец
  434.  
  435.                 // Кейс первый:
  436.                 const first = (() => {
  437.                     for (const row of array) {
  438.                         if (row[0] && row[0].start < end) {
  439.                             return false;
  440.                         }
  441.                     }
  442.                     return true;
  443.                 });
  444.                 if (first) {
  445.                     for (const iRow of array) {
  446.                        
  447.                     }
  448.                 }
  449.             }
  450.         }
  451.     }
  452. }
  453.  
RAW Paste Data