2017-07-30 6 views
1

J'ai un tableau de mots avec leurs coordonnées dans le document, je veux les transformer en phrases. Mon entrée de gamme:Activer le tableau de mots d'un document avec leurs coordonnées en phrases

[ 
    { 
     "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" 
     } 
] 

La sortie du programme devrait être:

Hey Name 
What Sup 
  • Les coordonnées ne sont pas exactes juste un exemple, aussi l'algorithme doit traiter avec des mots qui sont au milieu de phrases et autres cas extrêmes.

Quelle est la meilleure façon de le faire (idéalement implémenté avec JavaScript)?

+2

S'il vous plaît expliquer, comment vous voulez atteindre cet objectif. Marquer cette question avec "apprentissage automatique" ou "algorithme" n'explique pas ce que vous voulez faire. –

+0

@MichaelHirschler Je cherche la meilleure façon de le faire ... – gal

+2

@gal Cela n'a absolument rien à voir avec la question. Qu'Est-ce que c'est"? Vous voulez transformer un tableau de mots en phrases. Quelle est la structure du tableau? Quel type de phrases voulez-vous créer? – victor

Répondre

0

Vous pouvez utiliser une table de hachage et la commander pour les lignes et les positions, puis récupérer le texte dans cet ordre.

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; }