private static void ProcessLine(GMLine line, ICollection <double> anglesDetected) { var suitableWords = line.Words().Where(IsWordValidForAngleDetection).ToList(); // To detect direction of given line we have to have at least two words in the line if (suitableWords.Count < 2) { return; } //var firstWord = suitableWords[0]; double sum = 0; for (var idx = 1; idx < suitableWords.Count; idx++) { //var secondWord = suitableWords[idx]; //var angle = DetectAngle(firstWord, secondWord); var angle = DetectAngle(suitableWords[idx - 1], suitableWords[idx]); sum += angle; //Console.Out.WriteLine("Angle: {0:N4}", Angles.RadToDeg(angle)); anglesDetected.Add(angle); } //var avAngle = sum / (suitableWords.Count - 1); // Console.Out.WriteLine("Average angle: {0:N4}", Angles.RadToDeg(avAngle)); }
public GMLine AddLine([NotNull] BoundingBox boundingBox) { var line = new GMLine(boundingBox); lines.Add(line); return(line); }
private static GMTextBlock RemoveEmptyElements(this GMTextBlock textBlock) { var textBlockNew = new GMTextBlock(textBlock.BoundingBox); foreach (var paragraph in textBlock.Paragraphs()) { var paragraphNew = new GMParagraph(paragraph.BoundingBox); foreach (var line in paragraph.Lines()) { var lineNew = new GMLine(line.BoundingBox); foreach (var word in line.Words()) { if (word.Text.Trim().Length > 0) { var wordNew = new GMWord(word.BoundingBox, word.Text, word.Accuracy); lineNew.AddWord(wordNew); } } if (lineNew.Words().Any()) { paragraphNew.AddLine(lineNew); } } if (paragraphNew.Lines().Any()) { textBlockNew.AddParagraph(paragraphNew); } foreach (var word in textBlock.StandaloneWords()) { if (word.Text.Trim().Length > 0) { var wordNew = new GMWord(word.BoundingBox, word.Text, word.Accuracy); textBlockNew.AddStandaloneWord(wordNew); } } } return(textBlockNew); }
public void AddLine(GMLine line) { lines.Add(line); }