Разница в тексте при прокрутке - PullRequest
2 голосов
/ 27 мая 2011

У меня есть код, который захватывает текст из прокрутки, и я ищу алгоритм (работающий с C ++ / Qt), который может сказать мне, какие строки являются новыми. ПРИМЕЧАНИЕ: Новые строки добавляются только в конце.

Так что при первом захвате у меня может быть следующее:

hello world
some more text
hello world
some text

И при втором захвате может иметься:

hello world
some text
yet more text
hello world

Итак, я хочу, чтобы алгоритм вернул, что у меня есть две новые строки:

yet more text
hello world

Если возможно, это будет производительность справки, если она может начинаться с последней строки и заканчиваться один разон достигает уже обработанной линии.Но я думаю, что это, вероятно, невозможно, поскольку могут быть повторяющиеся строки.

Ответы [ 3 ]

0 голосов
/ 27 мая 2011

Для вашего особого случая я бы рассмотрел простой базовый алгоритм loop-in-loop.Я не думаю, что производительность действительно является проблемой (не так много строк, я также считаю OCR основной частью), и поэтому алгоритм должен быть легко читаемым и надежным.

Один из возможных алгоритмов в псевдокоде:

numberOfNewLines = 0
while numberOfNewLines <= numberOfTotalLines do
    compare lines 
        [1..numberOfTotalLines-numberOfNewLines] of textNew
        with lines [1+numberOfNewLines..numberOfTotalLines] of textOld
    if identical then exit while
    numberOfNewLines++
end while

Вы можете прервать сравнение, как только одна строка отличается, но по-прежнему алгоритм равен O(N^2) по количеству строк.

Тогда вы можете вывести последние numberOfNewLinesс конца textNew.Как упомянуто в комментарии, вы, конечно, не можете обнаружить некоторые крайние случаи, такие как «10000 раз« ABC »и затем 1 раз« DEF »», где большинство строк «ABC» будет игнорироваться.

0 голосов
/ 28 мая 2011

Я проверил это на нескольких тестовых примерах, и пока он работает:

0 голосов
/ 27 мая 2011

Ну, вы говорите, что это прокрутка, и вы используете OCR, так что вы могли бы также захватить размер виджета прокрутки в окне прокрутки и проверить это вместе с записанными вами строками?подключить DLL в программу производителя, чтобы вы могли сигнализировать, когда он выводит новую строку?или напрямую направить свой вывод в ваш?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...