Группировка слов в предложения на основе границ
Пользуюсь системой распознавания текста от Google Cloud, результат мне прилетает в виде следующего
IReadOnlyList<EntityAnnotation> annotations
Каждая EntityAnnotation содержит в себе BoundingBox, это 4 цельночисленные цифры, обозначающие границы слова.
Вопрос - как это объединить в предложения?
Допустим, у меня на изображении для распознавания три несвязанных между собой предложения
Предложение первое, Предложение второе, в одну строку
всякое - разное, в две строчки.
Предложение 3,
В целых
Три строки
Ну и гугл пришлёт мне соответственно каждое слово и его координаты границ
"Предложение" (200:30) (200:70) (220:30) (220:70)
И так с каждый словом.
Вопрос - как объединить слова на основе их близкого расположения и в правильном порядке?
Я вижу это примерно так - берем первое слово, проверяем, есть ли у него сосед справа и объединяем их.
var rightBoundCoordFirstWord = annotations[0].bounds.Max(x=>x.x);
var leftBoundCoordSecondWord = annotations[1].bounds.Min(x=>x.x);
if(leftBoundCoord - rightBoundCoord < 100) //Если разница между границами меньше сотни пикселей, то скорее всего они части одного предложения
{
var unitedAnnotations = new EntityAnnotation(){new Bound( annotations[0].leftBound, annotations[1].rightBound), text = annotations[0].text + " " + annotations[1].text;
}
Окей, мы объединили две аннотации в одну - теперь у них общие границы и общий текст. А как сделать это со всеми? Проверить правого соседа у первого, потом правого соседа у второго, потом, если соседа правого нет, глянуть у первого - нижнего соседа и это всё как то объединить...
Как это сделать? Может существуют готовые решения по группировке текста в предложения на основе их позиции или границ?