Превратить массив слов из документа с их координатами в предложения

1

У меня есть массив слов с их координатами в документе, я хочу превратить их в предложения. Мой входной сигнал массива:

  [
    {
        "bounds": [
          {
            "x": 10,
            "y": 10
          },
          {
            "x": 15,
            "y": 10
          },
          {
            "x": 15,
            "y": 15
          },
          {
            "x": 10,
            "y": 15
          }
        ],
        "desc": "Hey"
      },
    {
        "bounds": [
          {
            "x": 18,
            "y": 10
          },
          {
            "x": 24,
            "y": 10
          },
          {
            "x": 24,
            "y": 15
          },
          {
            "x": 18,
            "y": 15
          }
        ],
        "desc": "Name"
      },
          {
        "bounds": [
          {
            "x": 18,
            "y": 20
          },
          {
            "x": 24,
            "y": 20
          },
          {
            "x": 24,
            "y": 25
          },
          {
            "x": 18,
            "y": 25
          }
        ],
        "desc": "What"
      },
    {
        "bounds": [
          {
            "x": 18,
            "y": 20
          },
          {
            "x": 24,
            "y": 20
          },
          {
            "x": 24,
            "y": 25
          },
          {
            "x": 18,
            "y": 25
          }
        ],
        "desc": "Sup"
      }
]

Выход программы должен быть:

Hey Name
What Sup
  • Координаты не точны как пример, также алгоритм должен иметь дело со словами, которые находятся в середине предложений и других крайних случаев.

Каким образом я могу это сделать (Идеально реализовано с помощью JavaScript)?

  • 2
    Пожалуйста, объясните, как вы хотите этого достичь. Пометка этого вопроса с помощью «машинного обучения» или «алгоритма» не объясняет, что вы хотите сделать.
  • 0
    @MichaelHirschler Я ищу лучший способ сделать это ...
Показать ещё 3 комментария
Теги:
machine-learning
algorithm
document
ocr

1 ответ

0

Вы можете использовать хеш-таблицу и заказать ее для строк и позиций, а затем вернуть текст в этом порядке.

var data = [{ bounds: [{ x: 10, y: 10 }, { x: 15, y: 10 }, { x: 15, y: 15 }, { x: 10, y: 15 }], desc: "Hey" }, { bounds: [{ x: 18, y: 10 }, { x: 24, y: 10 }, { x: 24, y: 15 }, { x: 18, y: 15 }], desc: "Name" }, { bounds: [{ x: 18, y: 20 }, { x: 24, y: 20 }, { x: 24, y: 25 }, { x: 18, y: 25 }], desc: "What" }, { bounds: [{ x: 18, y: 20 }, { x: 24, y: 20 }, { x: 24, y: 25 }, { x: 18, y: 25 }], desc: "Sup" }],
    hash = {},
    result;

data.forEach(function (a) {
    hash[a.bounds[0].y] = hash[a.bounds[0].y] || {};
    hash[a.bounds[0].y][a.bounds[0].x] = hash[a.bounds[0].y][a.bounds[0].x] || [];
    hash[a.bounds[0].y][a.bounds[0].x].push({ desc: a.desc, end: a.bounds[2] });

});

result = Object.keys(hash)
    .sort((a, b) => a - b)
    .map(k => Object.keys(hash[k])
        .sort((a, b) => a - b)
        .reduce((r, l) => [...r, ...hash[k][l].map(c => c.desc)], [])
        .join(' ')
    )
    .join('\n');
   
console.log(result);
console.log(hash);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню