Skip to content
forked from cxumol/tg-search

Search in Telegram with CJK words (unofficial). Telegram 中文搜索 (非官方).

Notifications You must be signed in to change notification settings

Mishini/tg-search

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 

Repository files navigation

telegram 中文搜索解决方案 tg-search-lite

查看旧版请点这里

旧版更难使用, 但功能更强。

背景

8012 年 11 月, tg官方翻译平台新增了简体中文 / 繁體中文

tg 官方终于愿意稍微关注一下中文用户了, 总的来说是件好事。 于是乎, 感觉官方支持中文搜索也待🏳️。

但目前, 想在 tg 搜索中文, 还得靠广大劳动人民的辛勤工作与不懈努力。 比如, 某些 群友 打字 带 空格, 大家 见到, 早 已经 见怪不怪 了。

官方提供数据导出工具之前(GDPR 问世前), 在下曾经做过一个 telegram 中文搜索解决方案, 叫做 tg-search, 它可以搜索某账号所能接触到的全部数据。 而本解决方案的检索范围(目前)较小, 一次搜索仅限于从一个 chat 中导出的数据, 故名 tg-search-lite

相比前作, 本解决方案充分利用官方的 html 导出格式(桌面客户端导出), 而且使用上更加平易近人, 通俗易懂, 方便广大群众使用。

使用

https://t.me/Financial_Express 为例。
这是一个不停推送大量新闻的频道。 推送的速度有时大大超过普通人的阅读速度。

image

image

对于有的浏览器, 直接打开 “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

打开网页

image

然后就可以搜索了


image

说明

Q: 既然导出了 html, 用浏览器的 CTRL+F 不就好了嘛

A: 如果聊天记录在 1000 条以下, 建议 CTRL+F
但根据 tg 桌面端导出格式, 一页 (一个 html 文件) 超过 1000 条消息后, 超出部分会分到下一页, 比如第二页放在了 messages2.html 里面。 某些大群导出几百页都不奇怪。 这下 CTRL+F 就不方便了。


因为加载了两个在线资源, 所以需要联网, 假如想离线使用, 可以找动手能力强的同学帮忙把那两个在线资源下载下来, 改改路径, 应该就能离线使用了。

首次开启时, 会占用较高 CPU / 内存。 聊天记录越多, 则用时越久, 这是因为首次运行时, 程序需要加载并解析大量数据。
以后每次开启或刷新, 则不会 也会和第一次一样占用 CPU / 内存。 因为目前还没有做缓存的功能, 嘿嘿。

在我自己电脑上跑, Chromium 的运行速度远远落后于 Firefox。
我也不知道为什么。 建议大家用 Firefox 运行。

初学 JS, 第一个 JS 作品。 写得很糟糕, 请见谅/请斧正。

设计思路 / 实现原理

因为按照官方方式导出来是 html, 所以 lite 版干脆全部用前端的方式做了。

JS 库和框架又多又乱, 让人生厌, 而 (时尚) 浏览器的原生 API 都这么强了。 出于对 npm 和 package.json 的厌恶, 本来打算一个库都不用, 结果, jquery 真香。

大概思路和一些具体实现参考了 docsifyhexo-theme-icarus 中内置的搜索插件。

加载数据, 生成索引这一步是自己想的: 用 ajax 把原始资料加载到一棵临时的 DOM 里, 再解析这 DOM, 录入生成搜索所需的结构化数据(索引)。

稍后补充

缺点 / 后续计划

性能: 貌似特别吃性能。 所以建议不要搜索聊天记录太长的 chat, 量性能而行

缓存:
考虑过将 索引缓存 存储到 LocalStorage 里面。 但是那个上限大概才 5M, 不够用。
针对 LocalStorage 太小的问题, MDN 推荐了 localforage, 以后再细看。
如果容量还不够用, 考虑做个执行档, 不仅在本地目录生成索引文件 (一般就 json 了), 同时后台运行作为静态 web 服务器。 如果重心再往后点, 岂不是和旧版 tg-search 一样了。

排序:
比如搜索输入了两个词, 有一条消息中包含 1 个关键词 1 次, 另一条消息中包含 2 个关键词而且有一个关键词重复了 3 次。
后者显示得更靠上显然更合理。

稍后补充

About

Search in Telegram with CJK words (unofficial). Telegram 中文搜索 (非官方).

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 73.4%
  • HTML 15.6%
  • CSS 11.0%