TgWitness / Dokumentasi

Apa yang telah diuji →

Referensi / Arsip & integrasi

Telegram · Pencarian teks lengkap

Temukan pesan yang disimpan berdasarkan bentuk kata, frasa persis, domain, dan @nama pengguna, dengan hasil yang paling sesuai ditampilkan terlebih dahulu, serta indeks yang terikat pada jurnal yang ditandatangani.

TgWitness / Dokumentasi · Penyelidikan

Penyelidikan

Analisis arsip · OCR dan transkripsi lokal · Wiki

Pratinjau. Di Jurnal, pilih "Kecocokan terbaik · bentuk kata" di sebelah bidang pencarian. Hasil diurutkan menggunakan algoritma BM25 dan mencakup bentuk lain dari kata yang sama: "перевод" menemukan "переводом" dan "переводы", "transfer" menemukan "transfers", frasa dalam bahasa Mandarin ditemukan tanpa spasi. Opsi "Terbaru terlebih dahulu · teks persis" mempertahankan pencarian substring sebelumnya di seluruh catatan.

Indeks merupakan data turunan. Indeks ini dibangun ulang dari jurnal yang ditandatangani, tidak pernah ditandatangani sendiri, dan tidak pernah dimasukkan ke dalam ekspor. Catatan asli tidak berubah.

Di halaman ini

Sintaks pencarian#

Tulis Menemukan
перевод карта Catatan yang mengandung kedua kata tersebut, dalam bentuk apa pun
"переводом на карту" Frasa persis ini, dalam urutan ini
бонус OR подарок Salah satu kata
перевод -казино Catatan tanpa kata yang dikecualikan
example.com Domain dan subdomainnya, termasuk dalam tautan tersembunyi dan URL tombol
@username, t.me/username Penyebutan dan tautan akun tersebut, serta pesan yang dikirimkannya
#tag Tagar
+79991234567, alamat dompet, alamat email Nilai yang sama dalam bentuk teks atau tautan
from:@username, from:123456 Pesan dari pengirim tersebut
chat:-1001234567890 Satu obrolan; hal ini hanya dapat membatasi akses Anda sendiri
id:42 Versi pesan 42 yang disimpan
since:2026-01-01 until:2026-01-31 Periode pengamatan; tanggal tanpa waktu mencakup sepanjang hari
kind:edited Hanya pengeditan (new, snapshot, edited, recovered)
source:ocr, source:transcription, source:all Teks yang dikenali sebagai pengganti, atau bersama dengan, pesan

Kata depan dan kata fungsi lainnya diabaikan jika terdapat kata lain di sekitarnya. Huruf yang mirip yang tercampur dalam sebuah kata (misalnya huruf Latin "a" di dalam kata Cyrillic), huruf Unicode lebar penuh dan dekoratif, serta karakter tak terlihat, dinormalisasi.

Bahasa#

Bahasa ditentukan per catatan berdasarkan skrip dan huruf-hurufnya:

Skrip Pencocokan
Huruf Sirilik Lema bahasa Rusia dan Ukraina dengan pymorphy3. Tanpa kamus Ukraina opsional, digunakan stemmer Ukraina yang ringan
Latin Stemmer Snowball bahasa Inggris; tanda diakritik diabaikan
Bahasa Mandarin, Jepang, Korea, Thailand, Laos, Khmer, Myanmar Pasangan karakter yang tumpang tindih: frasa apa pun ditemukan tanpa spasi. Kueri dalam bahasa Mandarin dipisahkan menjadi kata-kata menggunakan Jieba
Skrip lainnya Kata-kata yang tepat

Kamus Ukraina (pymorphy3-dicts-uk) didistribusikan di bawah lisensi GPL-3.0, sehingga tidak diinstal secara default. Instal dengan pip install "tgwitness[uk-dictionary]"; indeks akan mendeteksi penganalisis baru dan membangun ulang dirinya sendiri.

Di mana indeks tersebut berada#

Mode Penyimpanan Penggunaan
Di disk (default) search/fulltext.sqlite3 di direktori workspace Arsip berukuran besar; tetap utuh meskipun sistem di-restart
Hanya di memori Tidak ada data yang disimpan di disk; dibangun ulang setiap kali dijalankan Tidak ada salinan turunan dari teks pesan di disk
Mati Tanpa indeks; Yang terbaru terlebih dahulu · teks yang tepat tetap dipertahankan Instalasi minimal

Administrator utama memilih mode di bawah Jurnal → Filter → Indeks pencarian untuk setiap ruang kerja. TGWITNESS_FULLTEXT=disk|memory|off menetapkan pengaturan default untuk ruang kerja yang tidak memiliki pilihan sendiri. Beralih ke "memori" atau "mati" akan menghapus berkas tersebut. Berkas indeks memiliki perlindungan yang sama dengan jurnal: berkas tersebut disimpan di direktori data pribadi. Berkas ini tidak dienkripsi, dan tidak termasuk dalam cadangan atau salinan di luar lokasi.

Catatan baru diindeks di latar belakang dalam hitungan detik; pencarian juga mengindeks backlog singkat terlebih dahulu, sehingga catatan yang baru saja disimpan dapat ditemukan. Jurnal yang sudah ada diindeks setelah pembaruan tanpa memblokir panel; hingga saat itu, hasil pencarian mencakup catatan yang telah diindeks dan jurnal menampilkan kemajuan proses. Pembuatan ulang indeks dimulai kembali dari catatan pertama.

python -m tgwitness index status --data-dir data/live
python -m tgwitness index rebuild --data-dir data/live --json

rebuild panel harus dihentikan (kode keluar 3 jika tidak). Dengan --json, keluaran standar hanya menampilkan hasilnya; kemajuan ditampilkan di kesalahan standar.

Hasil dan jurnal yang ditandatangani#

Indeks menyimpan nomor urut dan hash dari catatan jurnal terakhir yang dicakupnya serta memeriksa keduanya dengan jurnal saat dibuka. Jurnal yang diganti, dipulihkan, atau diedit akan memicu proses pembaruan indeks. Setiap respons melaporkan posisi ini, dan setiap pencocokan dibaca kembali dari jurnal yang ditandatangani berdasarkan nomor urutnya: indeks menentukan catatan mana yang akan ditampilkan dan urutannya, bukan isinya. Akses obrolan diterapkan pada bidang obrolan jurnal itu sendiri, bukan pada konten indeks.

Teks yang dikenali#

OCR dan transkrip tetap berada dalam artefak terenkripsinya. Indeksnya hanya ada di memori dan dibangun kembali saat pekerjaan pengenalan selesai. Hasil yang cocok muncul dalam media.saved catatannya, diberi label sebagai pengenalan mesin beserta mesin, model, dan kutipan; hasil tersebut tidak pernah ditampilkan sebagai teks yang dikirim di Telegram. Indeks yang sama digunakan untuk Pencarian Teks yang Telah Dikenali, yang juga tetap mencocokkan substring biasa.

Akses#

Akses yang dibatasi pada obrolan hanya menemukan catatan dari obrolan tersebut, termasuk teks yang dikenali dari lampirannya. chat: dan filter lainnya hanya dapat mempersempit kumpulan tersebut. Status indeks yang ditampilkan pada akses terbatas tidak mencakup total jurnal. Hanya administrator utama yang dapat mengubah mode atau membangun ulang indeks.

Tanyakan kepada arsip dan MCP#

Minta arsip untuk mengambil sumbernya dari indeks ini setelah selesai: hasil pencocokan terbaik di seluruh obrolan yang dipilih, dengan teks yang disimpan dihitung satu kali. Hingga 24 sumber dikirim; teks panjang dipotong di sekitar bagian yang cocok dan ditandai sebagai terpotong. Pertanyaan tentang perubahan terbaru, versi pesan yang disimpan, dan pencarian saat indeks masih dalam proses pembuatan menggunakan pengambilan kronologis sebelumnya. Pratinjau menunjukkan metode mana yang digunakan.

Klien MCP dapat memanggil search_messages dengan ranked=true dan halaman dengan next_offset. Koneksi yang dibatasi cakupannya hanya menerima obrolan mereka sendiri.

Pagination berurutan mencakup paling banyak hasil 1,000, terlepas dari ukuran halaman. Persempit kueri, obrolan, atau periode untuk memeriksa kecocokan lebih lanjut. Pencarian terbaru terlebih dahulu mengurutkan pesan, hasil OCR, dan transkripsi sebelum memilih setiap halaman.

Ketergantungan#

Paket Lisensi Mengapa
pymorphy3, pymorphy3-dicts-ru, DAWG2-Python MIT Lema bahasa Rusia dan Ukraina; kamus dimuat secara lokal
snowballstemmer BSD-3-Klausul Bentuk dasar kata dalam bahasa Inggris, Python murni
jieba MIT Segmentasi kueri bahasa Mandarin, Python murni (hanya distribusi sumber)
pymorphy3-dicts-uk (opsional) GPL-3.0 Kamus bahasa Ukraina lengkap

SQLite FTS5 dengan unicode61 tokenizer; ini merupakan bagian dari SQLite dalam build Python saat ini. Tanpa itu, pencarian kecocokan terbaik akan melaporkan bahwa fitur tersebut tidak tersedia.

Tolok ukur#

python tools/bench_fulltext.py --messages 1000000 --work <empty directory>membuat jurnal terverifikasi yang deterministik berisi campuran pesan dalam bahasa Rusia, Ukraina, Inggris, Mandarin, dan Jepang beserta tautan dan handle di 200 obrolan, membangun indeks, serta mengukur waktu pencarian tipikal (50 hasil, median dari 7 kali eksekusi).

Diuji pada Windows 11, Intel Core i9-13900K, 128 GB RAM, Python 3.12.10, SQLite 3.49.1, data pada drive exFAT, alat analisis fulltext-v1+pymorphy3-ru+light-uk+snowball-en:

Ukuran Hasil
Jurnal yang ditandatangani 1.000.000 pesan, 1,50 GiB, ditulis dalam 19 menit
Pembuatan indeks dari jurnal 71 detik, sekitar 14.141 pesan per detik
Berkas indeks 58 MiB, 3,8% dari jurnal
Cari segera setelah catatan baru Median 8 ms, p95 9 ms
Pencarian substring sebelumnya, jurnal yang sama перевод 3,2 detik, 银行转账 2,6 detik, verify-account.example 2,6 detik
Cari Catatan yang cocok Kecocokan terbaik, median hal. 95 Yang terbaru terlebih dahulu, median
Kata umum, bentuk kata: перевод 134,403 82 ms 85 ms 7 ms
Dua kata: оплата карта 28,996 43 ms 43 ms 14 ms
Kata langka: розыгрыш подарок 28,881 42 ms 47 ms 13 ms
Frasa yang tepat: "переказ коштів на картку" tidak dihitung 35 ms 36 ms 6 ms
Domain beserta subdomainnya: verify-account.example 12,435 17 ms 17 ms 3 ms
@username: @support_desk_bot 10,331 15 ms 16 ms 3 ms
Bahasa Mandarin tanpa spasi: 银行转账 17,691 23 ms 24 ms 3 ms
Bahasa Jepang: リンク 16,603 23 ms 25 ms 3 ms
Bentuk dasar dalam bahasa Inggris: withdrawal 27,775 26 ms 26 ms 2 ms
ATAU dan pengecualian: бонус OR подарок -казино 268,034 190 ms 193 ms 19 ms
Filter obrolan: chat:-1000000000007 перевод 652 9 ms 9 ms 6 ms
Filter periode: since:2026-01-01 until:2026-01-31 выплата 115,732 155 ms 156 ms 81 ms

Sebuah frasa yang tepat diperiksa secara harfiah pada kandidat berdasarkan urutan peringkat hingga halaman penuh, sehingga jumlahnya tidak dihitung. Waktu yang dibutuhkan bertambah seiring dengan jumlah catatan yang cocok; mempersempit obrolan atau periode akan mempercepat pencarian yang luas. Korpus sintetis ini mengulang kosakata yang terbatas, sehingga kata-kata umum cocok dengan jauh lebih banyak catatan daripada dalam obrolan nyata.