Giter Site home page Giter Site logo

tg-search's Introduction

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

查看旧版 (golang 版) 请点这里

旧版功能更强, 但更不易于使用。

Description in English

Telegram has never been good at searching in non-alphabetic language (such as Chinese, Japanese, and Korean). 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 为例。
这是一个不停推送大量新闻的频道。 推送的速度有时大大超过普通人的阅读速度。

image

image

对于有的浏览器, 直接打开 “Home.html” 可以正常运行。 比如手头的 Firefox 64.08b (Win-64bit)

但是有的浏览器, CORS 真的很严格, 为了 AJAX, 可以在本机开服, 但更推荐, 临时关闭浏览器的 CORS。 比如手头的 Chromium 67.0.3396.99 (32-bit) windows

临时关闭 Chrome CORS 的教程

本机开服很简单, 下个 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 作品。 写得很糟糕, 请见谅/请斧正。 请 PR

设计思路 / 实现原理

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

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

在 @lxiange 的帮助下实现了一个库都不用。

大概思路和一些具体实现参考了 docsifyhexo-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 技术门槛
    • 可前往 cxumol#3 讨论
  • Windows 自带搜索
    • 优点: Windows 上使用方便
    • 缺点: 系统版本不能太低 须开启 Windows 的文件索引服务
    • 感谢 脸黑君 (id 应要求隐藏) 告知, 示例如下图

Windows Search

tg-search's People

Contributors

cxumol avatar lxiange avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.