🟠 2020 年 12 月 Telegram 开放了问题反馈平台, 请大家支持下面这项议题, 让 Telegram 听见亚洲用户的诉求, 改善搜索。
🟠 As of December 2020, Telegram launched the platform for Bugs and Suggestions. Please support the following issue, so that Telegram can be aware of Asian user's demand for improving the searching ability.
Improve the ability to search chat history for Asian regional languages, such as Chinese and Japanese
https://bugs.telegram.org/c/724
VOTE!
查看旧版 (golang 版) 请点这里
旧版功能更强, 但更不易于使用。
Telegram has never been good at searching in non-alphabetic language (such as Chinese, Japanese, and Thai). Herein we made an offline web tool to improve the searching experience on chat history. Used data are generated by Telegram Desktop chat history exporter, in HTML.
8012 年 11 月, tg官方翻译平台新增了简体中文 / 繁體中文。
tg 官方终于愿意稍微关注一下中文用户了, 总的来说是件好事。 于是乎, 感觉官方支持中文搜索也指日可待🏳️。
但目前, 想在 tg 搜索中文, 还得靠广大劳动人民的辛勤工作与不懈努力。 比如, 某些 群友 打字 带 空格, 大家 见到, 早 已经 见怪不怪 了。
官方提供数据导出工具之前(GDPR 问世前), 在下曾经做过一个 telegram 中文搜索解决方案, 叫做 tg-search, 它可以搜索某账号所能接触到的全部数据。 而本解决方案的检索范围(目前)较小, 一次搜索仅限于从一个 chat 中导出的数据, 故名 tg-search-lite。
相比前作, 本解决方案充分利用官方的 html 导出格式(桌面客户端导出), 而且使用上更加平易近人, 通俗易懂, 方便广大群众使用。
以 https://t.me/Financial_Express 为例。
这是一个不停推送大量新闻的频道。 推送的速度有时大大超过普通人的阅读速度。
对于有的浏览器, 直接打开 “Home.html” 可以正常运行。 比如手头的 Firefox 64.08b (Win-64bit)
但是有的浏览器, CORS 真的很严格, 为了 AJAX, 可以在本机开服, 但更推荐, 临时关闭浏览器的 CORS。 比如手头的 Chromium 67.0.3396.99 (32-bit) windows
本机开服很简单, 下个 caddy, 在文件夹
ChatExport_日_月_年
中直接开服, 再进入 http://localhost:2015/Home.html 即可。
又比如, 如果你装了 python, 在文件夹ChatExport_日_月_年
中打开python -m http.server
, 就能进入 http://localhost:8080/Home.html 。
打开网页
然后就可以搜索了
Q: 双击点开 "Home.html", 发现新版 Firefox 上无法加载数据, 浏览器控制台提示 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at file:///R:/ChatExport_2022-07-06/messages.html. (Reason: CORS request not http).
, 怎么办?
A: 这是因为 Firefox 68 及以上版本变更了 CORS 规则, 限制读取本机文件。 可以去 about:configs
改回来, Firefox 68 ~ 94 对应的配置项是 privacy.file_unique_origin
(参考来源); Firefox 95+ 对应的配置项是 security.fileuri.strict_origin_policy
(参考来源), 改成和默认值相反就行了。
Q: 既然导出了 html, 用浏览器的 CTRL+F 不就好了嘛
A: 如果聊天记录在 1000 条以下, 建议 CTRL+F
但根据 tg 桌面端导出格式, 一页 (一个 html 文件) 超过 1000 条消息后, 超出部分会分到下一页, 比如第二页放在了 messages2.html 里面。 某些大群导出几百页都不奇怪。 这下 CTRL+F 就不方便了。
其他可行方法, 请查看 其它方案
因为加载了两个在线资源, 所以需要联网,
假如想离线使用, 可以找动手能力强的同学帮忙把那两个在线资源下载下来, 改改路径, 应该就能离线使用了。
不需要了
首次开启时, 会占用较高 CPU / 内存。 聊天记录越多, 则用时越久, 这是因为首次运行时, 程序需要加载并解析大量数据。
以后每次开启或刷新, 则不会 也会和第一次一样占用 CPU / 内存。 因为目前还没有做缓存的功能, 嘿嘿。
在我自己电脑上跑, Chromium 的运行速度远远落后于 Firefox。
我也不知道为什么。 建议大家用 Firefox 运行。
初学 JS, 第一个 JS 作品。 写得很糟糕, 请见谅/请斧正。 请 PR
因为按照官方方式导出来是 html, 所以 lite 版干脆全部用前端的方式做了。
JS 库和框架又多又乱, 让人生厌, 而 (时尚) 浏览器的原生 API 都这么强了。 出于对 npm 和 package.json
的厌恶, 本来打算一个库都不用, 结果, jquery 真香。
在 @lxiange 的帮助下实现了一个库都不用。
大概思路和一些具体实现参考了 docsify 和 hexo-theme-icarus 中内置的搜索插件。
加载数据, 生成索引这一步是自己想的: 用 ajax 把原始资料加载到一棵临时的 DOM 里, 再解析这 DOM, 录入生成搜索所需的结构化数据(索引)。
稍后补充咕咕咕
性能:
貌似特别吃性能。 所以建议不要搜索聊天记录太长的 chat, 量性能而行
update: 已经改善不少, 应该归功于把 jQ 的 ajax 换成浏览器 fetch API
缓存:
考虑过将 索引缓存 存储到 LocalStorage 里面。 但是那个上限大概才 5M, 不够用。
针对 LocalStorage 太小的问题, MDN 推荐了 localforage, 以后再细看。
如果容量还不够用, 考虑做个执行档, 不仅在本地目录生成索引文件 (一般就 json 了), 同时后台运行作为静态 web 服务器。
如果重心再往后点, 岂不是和旧版 tg-search 一样了。
觉得可以试试保存一份 .json 在本文件夹
排序:
比如搜索输入了两个词, 有一条消息中包含 1 个关键词 1 次, 另一条消息中包含 2 个关键词而且有一个关键词重复了 3 次。
后者显示得更靠上显然更合理。
多重:
把多个 ChatExport
放到 ./data/
中, 跨 chat
搜索。
需要显示某结果是从哪个 chat 中搜到。
须调整相应数据结构。
稍后补充咕咕咕
- grep 或类似搜索软件 (推荐 ripgrep)
- 优点: 快
- 缺点: 命令行操作 技术门槛
- 一些文本编辑器 (或类似功能软件) 的文件夹搜索
- 优点: 用这些软件的人用得顺手
- 缺点: 脑补HTML 技术门槛
- 可前往 #3 讨论
- Windows 自带搜索
- 优点: Windows 上使用方便
- 缺点: 系统版本不能太低 须开启 Windows 的文件索引服务
- 感谢
脸黑君
(id 应要求隐藏) 告知, 示例如下图