python |从屏幕抓取应用程序中整理出冗余文本

标签 python algorithm

我正在编写一个屏幕抓取应用程序来监控纯文本聊天窗口。文本被添加到窗口的底部。

应用程序截取聊天窗口的屏幕截图。如果自上次截屏以来发生了更改 (new_screenshot != old_screenshot),则会保存截屏。

X 次后,所有图像合并为一张图像,其中最旧的图像在顶部。这个大图像被发送到服务器进行 OCR,并返回一串文本。

问题:如何整理多余的文字?

示例:

  • 聊天窗口高 5 行,最初是空的。
  • 解决方案必须适用于空的和非空的初始聊天窗口。
  • 可以在每个屏幕截图中添加多行。同一行可以出现多次,但绝不会连续出现两次所以仅仅去重是不够的(所以使用 sorted(set(text.split('\n'))) 是不够的)

算法输入:

1 Lorem ipsum dolor sit amet,
1 Lorem ipsum dolor sit amet,
2 conectetur adipiscing elit
1 Lorem ipsum dolor sit amet,
2 conectetur adipiscing elit
3 Mauris porttitor enim sed tincidunt interdum.
1 Lorem ipsum dolor sit amet,
2 conectetur adipiscing elit
3 Mauris porttitor enim sed tincidunt interdum.
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet.
1 Lorem ipsum dolor sit amet,
2 conectetur adipiscing elit
3 Mauris porttitor enim sed tincidunt interdum.
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet.
5 Nam aliquet velit vel elementum tristique.
2 conectetur adipiscing elit
3 Mauris porttitor enim sed tincidunt interdum。
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet。
5 Nam aliquet velit vel elementum tristique。
6 Donec ac tincidunt urna。
3 Mauris porttitor enim sed tincidunt interdum.
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet.
5 Nam aliquet velit vel elementum tristique.
6 Donec ac tincidunt urna.
7 Proin pretium, metus non porttitor lobortis, tortor sem rhoncus urna
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet.
5 Nam aliquet velit vel elementum tristique.
6 Donec ac tincidunt urna.
7 Proin pretium, metus non porttitor lobortis, tortor sem rhoncus urna
8 quis finibus leo lorem sed lacus.
5 Nam aliquet velit vel elementum tristique.
6 Donec ac tincidunt urna.
7 Proin pretium, metus non porttitor lobortis, tortor sem rhoncus urna
8 quis finibus leo lorem sed lacus.
1 Lorem ipsum dolor sit amet,

预期结果:

1 Lorem ipsum dolor sit amet,
2 conectetur adipiscing elit
3 Mauris porttitor enim sed tincidunt interdum。
4 Morbi elementum erat nec nulla auctor, eget porta odio aliquet。
5 Nam aliquet velit vel elementum tristique。
6 Donec ac tincidunt urna。
7 Proin pretium, metus non porttitor lobortis, tortor sem rhoncus urna
8 quis finibus leo lorem sed lacus。
1 Lorem ipsum dolor sit amet,

最佳答案

这是我理解您想要的代码(添加看到的新行但保留 5 行的历史记录以避免重复):

history = 5
lastSeen = dict()
result = [] 
for idx, line in enumerate(text.split('\n')):
    if line not in lastSeen:
        result.append(line)
    else:
        if lastSeen[line] + history < idx:
            result.append(line)
    lastSeen[line] = idx

关于 python |从屏幕抓取应用程序中整理出冗余文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52118889/

相关文章:

python - 通过 Python 从给定的 URL 获取加载的图像

python - 以编程方式编辑 Photoshop PSD 文本图层

python - 如何在 sympy 1.3 上进行区间运算?

c++ - 具有可变地形的 2D 静态盒碰撞

c++ - 排序 k 个有序链表?

database - 分布式系统中故障转移有哪些算法?

python - 尝试保存新文件: IndexError: list index out of range时发生Python错误

python - 使用机器学习解码回溯

algorithm - 聚类算法和 "extending"聚类以包括 N 个最近的邻居

java - Libgdx 生成 RogueLIke Dungeon - 算法错误