public IEnumerable<RecognizedSegment> Recognize(Stream document, IProgressReporter progress)
        {
            var imageData = new ImageData(document);
            var boards = imageData.DefineIteratedBoards();

            var heuristics = boards.Segment().ToList();

            progress.Maximum = heuristics.Count * 1000;

            foreach (var segment in heuristics) {
                var whitespaceResults = trainingData.PerformWhitespaceLookup(segment, progress.ScaledChildOperation(500)).LastOrDefault(r => r.Certainty > 10);

                if (whitespaceResults != null && whitespaceResults.Text == "AllLabels") {
                    var match = trainingData.PerformLookup(segment, progress.ScaledChildOperation(500)).LastOrDefault(r => r.Certainty > 10);
                    if (match != null)
                        yield return match;
                } else
                    progress.Progress += 500;	//Add the progress that would have been used by the character recognition
            }
        }