منبع / آرشیو و یکپارچهسازیها
Telegram · جستجوی متن کامل
پیامهای ذخیرهشده را بر اساس شکلهای واژهای، عبارات دقیق، دامنهها و نامهای کاربری @ پیدا کنید، بهترین تطابقها در اولویت، با شاخص متصل به دفترچهٔ امضاشده.
تحلیل بایگانی · شناسایی نوری حروف (OCR) و رونویسی محلی · ویکی
پیشنمایش. در «ژورنال»، «بهترین تطابق · اشکال واژهای» را در کنار کادر جستجو انتخاب کنید. نتایج با BM25 رتبهبندی میشوند و با سایر اشکال همان کلمه مطابقت دارند: «перевод» کلمات «переводом» و «переводы» را پیدا میکند، «transfer» کلماتی مانند «transfers» را پیدا میکند و یک عبارت چینی بدون فاصله پیدا میشود. «جدیدترینها اول · متن دقیق» جستجوی زیر رشتهای قبلی را بر روی کل رکورد حفظ میکند.
این شاخص دادهای مشتقشده است. این شاخص از دفترچهٔ امضاشده بازسازی میشود، خود هرگز امضا نمیشود و هرگز صادر نمیگردد. سوابق اصلی تغییر نمیکنند.
در این صفحه
سینتکس جستجو#
| نوشتن | یافتهها |
|---|---|
перевод карта |
سوابقی که هر دو کلمه را به هر شکلی در خود دارند |
"переводом на карту" |
عبارت دقیق، به همین ترتیب |
бонус OR подарок |
هر یک از کلمات |
перевод -казино |
سوابق بدون کلمهٔ مستثنیشده |
example.com |
دامنه و زیردامنههای آن، همچنین در لینکهای مخفی و آدرسهای دکمهها |
@username, t.me/username |
ذکرها و لینکهای حساب کاربری و پیامهایی که ارسال کرده است |
#tag |
هشتگ |
+79991234567، یک آدرس کیفپول، یک آدرس ایمیل |
همان مقدار در متن یا پیوندها |
from:@username, from:123456 |
پیامها از آن فرستنده |
chat:-1001234567890 |
یک چت؛ این فقط میتواند دسترسی شما را محدود کند |
id:42 |
نسخههای ذخیره شده پیام ۴۲ |
since:2026-01-01 until:2026-01-31 |
دورهٔ مشاهده؛ یک تاریخ بدون زمان کل روز را در بر میگیرد |
kind:edited |
فقط ویرایشها (new, snapshot, edited, recovered) |
source:ocr, source:transcription, source:all |
متن شناساییشده بهجای پیامها یا همراه با آنها |
حروف اضافه و سایر کلمات وظیفهای (function words) در صورت وجود کلمات دیگر نادیده گرفته میشوند. حروف مشابه که در یک کلمه آمیخته شدهاند (مانند حرف a لاتین در یک کلمه سیریلیک)، حروف پهنعرض و تزئینی یونیکد و کاراکترهای نامرئی نرمالسازی میشوند.
زبانها#
زبان هر رکورد بر اساس خط و حروف آن شناسایی میشود:
| اسکریپت | مطابقت |
|---|---|
| سیریلیک | لماهای روسی و اوکراینی با pymorphy3. بدون فرهنگ لغت اختیاری اوکراینی، از یک استمر سبک اوکراینی استفاده میشود. |
| لاتین | ریشهگیر انگلیسی Snowball؛ نشانههای diakritik نادیده گرفته میشوند |
| چینی، ژاپنی، کرهای، تایلندی، لائوسی، خمر، میانماری | جفتهای کاراکتری همپوشان: هر عبارت بدون فاصله یافت میشود. پرسوجوهای چینی با jieba به کلمات تقسیم میشوند. |
| سایر اسکریپتها | واژههای دقیق |
واژهنامه اوکراینی (pymorphy3-dicts-uk) تحت مجوز GPL-3.0 توزیع میشود، بنابراین بهصورت پیشفرض نصب نمیشود. آن را با pip install "tgwitness[uk-dictionary]"؛
ایندکس تحلیلگر جدید را تشخیص داده و خود را مجدداً ساخت میکند.
محل قرارگیری ایندکس#
| حالت | ذخیرهسازی | استفاده |
|---|---|---|
| روی دیسک (پیشفرض) | search/fulltext.sqlite3 در دایرکتوری فضای کاری |
آرشیوهای بزرگ؛ پس از راهاندازی مجدد باقی میماند |
| فقط در حافظه | هیچ چیزی روی دیسک نیست؛ در هر بار راهاندازی دوباره ساخته میشود | هیچ نسخهٔ مشتقشدهای از متن پیام روی دیسک وجود ندارد |
| خاموش | بدون فهرست؛ جدیدترینها اول · متن دقیق باقی میماند | نصبهای حداقلی |
مدیر اصلی برای هر فضای کاری، حالت را در مسیر دفترچه یادداشت → فیلترها → نمایه جستجو انتخاب میکند. TGWITNESS_FULLTEXT=disk|memory|off مقدار پیشفرض را برای فضاهای کاری که انتخاب خاص خود را ندارند، تعیین میکند. سوئیچ کردن به حافظه یا حالت خاموش، فایل را حذف میکند.
فایل نمایه همان حفاظت را دارد که دفترچه یادداشت دارد: در دایرکتوری دادههای خصوصی قرار دارد. این فایل رمزگذاری نشده و بخشی از پشتیبانگیریها یا نسخههای خارج از محل نیست.
سوابق جدید در پسزمینه و ظرف چند ثانیه نمایه میشوند؛ جستجو نیز ابتدا یک پیشنمایه کوتاه را نمایه میکند، بنابراین سوابق ذخیره شده در لحظاتی پیش یافت میشوند. یک دفترچه موجود پس از بهروزرسانی و بدون مسدود کردن پنل نمایه میشود؛ تا آن زمان، نتایج شامل سوابق نمایهشده میشوند و دفترچه پیشرفت را نشان میدهد. بازسازی نمایه از ابتدا از اولین سابقه شروع میشود.
python -m tgwitness index status --data-dir data/live
python -m tgwitness index rebuild --data-dir data/live --json
rebuild نیاز دارد پنل متوقف شود (در غیر این صورت کد خروج ۳). با --json، خروجی استاندارد فقط نتیجه را در بر میگیرد؛ پیشرفت به خطای استاندارد فرستاده میشود.
نتایج و دفترچهٔ امضا شده#
ایندکس، شماره ترتیبی و هش آخرین رکورد ژورنال را که پوشش میدهد ذخیره میکند و هنگام باز شدن ژورنال، آنها را با خود ژورنال مطابقت میدهد. یک ژورنال جایگزینشده، بازیابیشده یا ویرایششده باعث بازسازی میشود. هر پاسخ، این موقعیت را گزارش میکند و هر هیت (hit) از طریق شماره ترتیبیاش از ژورنال امضا شده خوانده میشود: ایندکس تصمیم میگیرد کدام رکوردها را و به چه ترتیبی نمایش دهد، نه محتوای آنها را. دسترسی به چت بر روی فیلد چت خود ژورنال اعمال میشود، نه محتوای ایندکس.
متن شناساییشده#
حروفنگاری نوری (OCR) و رونوشتها در آثار رمزگذاریشدهٔ خود باقی میمانند. نمایهٔ آنها تنها در حافظه وجود دارد و هنگام اتمام یک کار شناسایی بازسازی میشود. یک تطابق در نمایهاش ظاهر میشود که همچنان زیرمجموعههای ساده را نیز تطبیق میدهد.
media.saved سوابق، برچسبگذاری شده به عنوان تشخیص ماشین به همراه موتور، مدل و یک گزیده؛ هرگز به عنوان متنی که در تلگرام ارسال شده است ارائه نمیشود. همین نمایه برای جستجوی متنهای تشخیص داده شده نیز استفاده میشود، که همچنان با زیر رشتههای ساده نیز مطابقت دارد.
دسترسی#
دسترسی محدود به چت تنها رکوردهای مربوط به چتهای خود را، از جمله متنهای شناختهشده پیوستهایشان، پیدا میکند. chat: و سایر فیلترها فقط میتوانند آن مجموعه را محدودتر کنند. وضعیت نمایهای که به دسترسی محدودشده نشان داده میشود، آمار کل دفترچه را حذف میکند. فقط مدیر اصلی میتواند حالت را تغییر دهد یا نمایه را بازسازی کند.
از آرشیو و MCP بپرسید#
زمانی که ایندکس کامل شد، ابزار Ask the archive منابع خود را از آن بازیابی میکند: بهترین تطابقها در میان چتهای انتخابشده، بهطوریکه هر متن ذخیرهشده فقط یک بار شمارش میشود. تا ۲۴ منبع ارسال میشود؛ متنهای طولانی در اطراف تطابق خود بریده شده و بهعنوان ناقص علامتگذاری میشوند. سوالات در مورد تغییرات اخیر، نسخههای ذخیرهشده یک پیام، و جستجوها در حالی که ایندکس هنوز در حال ساخت است، از بازیابی زمانی قبلی استفاده میکنند. پیشنمایش نشان میدهد که از کدام روش استفاده شده است.
کلاینتهای MCP میتوانند فراخوانی کنند search_messages با ranked=true و صفحه با
next_offsetاتصالات محدوددامنه تنها چتهای خود را دریافت میکنند.
پagination رتبهبندیشده حداکثر شامل اولین 1,000 نتیجه است، صرفنظر از اندازه صفحه. برای بررسی نتایج بیشتر، پرسوجو، گفتگو یا دوره را محدود کنید. جستجوها بر اساس جدیدترین-ابتدا، پیامها، نتایج OCR و رونویسی را قبل از انتخاب هر صفحه مرتب میکنند.
وابستگیها#
| پکیج | مجوز | چرا |
|---|---|---|
| pymorphy3، pymorphy3-dicts-ru، DAWG2-Python | امآیتی | لماهای روسی و اوکراینی؛ فرهنگها بهصورت محلی بارگذاری شدهاند |
| snowballstemmer | بند ۳ BSD | ریشههای انگلیسی، پایتون خالص |
| جیبا | امآیتی | بخشبندی پرسوجوی چینی، پایتون خالص (فقط توزیع منبع) |
| pymorphy3-dicts-uk (اختیاری) | GPL-3.0 | واژهنامه کامل اوکراینی |
SQLite FTS5 با unicode61 تکپارچهساز (tokenizer) مورد نیاز است؛ این بخش بخشی از SQLite در نسخههای فعلی پایتون است. بدون آن، جستجو بر اساس بهترین تطابق گزارش میدهد که در دسترس نیست.
معیار سنجی#
python tools/bench_fulltext.py --messages 1000000 --work <empty directory>یک ژورنال امضاشدهی تعیینکنندهای از پیامهای ترکیبی روسی، اوکراینی، انگلیسی، چینی و ژاپنی با لینکها و هندلها در ۲۰۰ چت ایجاد میکند، نمایه را میسازد و جستجوهای معمول را زمانبندی میکند (۵۰ نتیجه، میانه از ۷ اجرا).
اندازهگیری شده بر روی ویندوز ۱۱، اینتل Core i9-13900K، ۱۲۸ گیگابایت رم، پایتون ۳.۱۲.۱۰، SQLite ۳.۴۹.۱، دادهها بر روی یک درایو exFAT، تحلیلگر fulltext-v1+pymorphy3-ru+light-uk+snowball-en:
| اندازهگیری | نتیجه |
|---|---|
| ژورنال امضاشده | ۱٬۰۰۰٬۰۰۰ پیام، ۱٫۵۰ گیگابایت، نوشته شده در ۱۹ دقیقه |
| فهرستسازی بر اساس ژورنال | ۷۱ ثانیه، حدود ۱۴٬۱۴۱ پیام در ثانیه |
| فایل نمایه | ۵۸ مگابایت، ۳٫۸٪ از دفترچه یادداشت |
| پس از ثبت یک رکورد جدید، جستجو کنید | میانگین ۸ میلیثانیه، p95 برابر ۹ میلیثانیه |
| جستجوی زیر رشتهی قبلی، همان دفترچه یادداشت | перевод ۳.۲ ثانیه، 银行转账 ۲.۶ ثانیه، verify-account.example 2.6 ثانیه |
| جستجو | سوابق تطبیقیافته | بهترین تطابق، میانه | p95 | جدیدترینها اول، میانه |
|---|---|---|---|---|
واژهٔ مشترک، اشکال واژه: перевод |
134,403 | ۸۲ میلیثانیه | ۸۵ میلیثانیه | ۷ میلیثانیه |
دو کلمه: оплата карта |
28,996 | ۴۳ میلیثانیه | ۴۳ میلیثانیه | ۱۴ میلیثانیه |
واژهٔ نادر: розыгрыш подарок |
28,881 | ۴۲ میلیثانیه | ۴۷ میلیثانیه | ۱۳ میلیثانیه |
عبارت دقیق: "переказ коштів на картку" |
شمرده نشده | ۳۵ میلیثانیه | ۳۶ میلیثانیه | ۶ میلیثانیه |
دامنه با زیردامنهها: verify-account.example |
12,435 | ۱۷ میلیثانیه | ۱۷ میلیثانیه | ۳ میلیثانیه |
@نام_کاربری: @support_desk_bot |
10,331 | ۱۵ میلیثانیه | ۱۶ میلیثانیه | ۳ میلیثانیه |
چینی بدون فاصله: 银行转账 |
17,691 | ۲۳ میلیثانیه | ۲۴ میلیثانیه | ۳ میلیثانیه |
ژاپنی: リンク |
16,603 | ۲۳ میلیثانیه | ۲۵ میلیثانیه | ۳ میلیثانیه |
ریشهٔ انگلیسی: withdrawal |
27,775 | ۲۶ میلیثانیه | ۲۶ میلیثانیه | ۲ میلیثانیه |
یا و استثناء: бонус OR подарок -казино |
268,034 | ۱۹۰ میلیثانیه | ۱۹۳ میلیثانیه | ۱۹ میلیثانیه |
فیلتر چت: chat:-1000000000007 перевод |
652 | ۹ میلیثانیه | ۹ میلیثانیه | ۶ میلیثانیه |
فیلتر دوره: since:2026-01-01 until:2026-01-31 выплата |
115,732 | ۱۵۵ میلیثانیه | ۱۵۶ میلیثانیه | ۸۱ میلیثانیه |
یک عبارت دقیق به صورت تحتاللفظی روی کاندیداها به ترتیب رتبهبندی بررسی میشود تا زمانی که صفحه پر شود، بنابراین مجموع آن شمارش نمیشود. زمانها با تعداد سوابق مطابقتیافته افزایش مییابند؛ محدود کردن چت یا دوره، جستجوهای گسترده را سریعتر میکند. مجموعه دادههای مصنوعی واژگان کمی را تکرار میکند، بنابراین کلمات رایج با سوابق بسیار بیشتری مطابقت دارند تا در چتهای واقعی.