TgWitness / ডকুমেন্টেশন

কি পরীক্ষা করা হয়েছে →

তথ্যসূত্র / আর্কাইভ ও ইন্টিগ্রেশনসমূহ

Telegram · পূর্ণ-পাঠ অনুসন্ধান

সigned journal-এ সূচকের সাথে আবদ্ধ ইনডেক্স ব্যবহার করে শব্দরূপ, সঠিক বাক্যাংশ, ডোমেইন এবং @usernames অনুসারে সংরক্ষিত বার্তাগুলো খুঁজুন, প্রথমে সেরা মিলগুলো দেখান।

টিজিউইটনেস / ডকুমেন্টেশন · তদন্ত

তদন্ত

আর্কাইভ বিশ্লেষণ · স্থানীয় OCR এবং ট্রান্সক্রিপশন · উইকি

প্রিভিউ। জার্নালে, অনুসন্ধান ক্ষেত্রের পাশে 'সেরা মিল · শব্দ রূপ' নির্বাচন করুন। ফলাফলগুলি BM25 দ্বারা র‌্যাঙ্ক করা হয় এবং একই শব্দের অন্যান্য রূপের সাথে মেলে: перевод খুঁজে পায় переводом এবং переводы, transfer খুঁজে পায় transfers, একটি চীনা বাক্যাংশ ফাঁকা স্থান ছাড়াই পাওয়া যায়। 'নতুনতম প্রথমে · সঠিক টেক্সট' পুরো রেকর্ডে পূর্ববর্তী সাবস্ট্রিং অনুসন্ধান বজায় রাখে।

সূচী হল প্রাপ্ত তথ্য। এটি স্বাক্ষরিত জার্নাল থেকে পুনর্নির্মাণ করা হয়, নিজে কখনো স্বাক্ষরিত হয় না এবং কখনো রপ্তানি হয় না। মূল রেকর্ডগুলো অপরিবর্তিত থাকে।

এই পৃষ্ঠায়

অনুসন্ধান সিনট্যাক্স#

লিখুন পায়
перевод карта যে কোনো রূপে উভয় শব্দ ধারণকারী রেকর্ডসমূহ
"переводом на карту" নির্দিষ্ট শব্দগুচ্ছ, এই ক্রমে
бонус OR подарок যে কোনো শব্দ
перевод -казино বর্জিত শব্দ ছাড়া রেকর্ড
example.com ডোমেইন এবং এর সাবডোমেইনগুলো, লুকানো লিঙ্ক এবং বোতাম URL-এও
@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 বার্তার পরিবর্তে বা বার্তার সাথে স্বীকৃত পাঠ্য

যখন অন্য শব্দ উপস্থিত থাকে, তখন পূর্বপদ এবং অন্যান্য ফাংশন শব্দ উপেক্ষিত হয়। শব্দে মিশে থাকা দেখতে-সমান অক্ষর (যেমন একটি ল্যাটিন 'a' একটি সিরিলিক শব্দে), পূর্ণপ্রস্থ এবং অলঙ্কৃত ইউনিকোড অক্ষর এবং অদৃশ্য অক্ষরগুলো স্বাভাবিকীকৃত হয়।

ভাষা#

প্রতি রেকর্ড থেকে এর স্ক্রিপ্ট ও অক্ষরগুলির ভিত্তিতে ভাষা সনাক্ত করা হয়:

স্ক্রিপ্ট মেলানো
সিরিলিক pymorphy3 দিয়ে রাশিয়ান ও ইউক্রেনীয় লেমা। ঐচ্ছিক ইউক্রেনীয় অভিধান ছাড়া একটি হালকা ইউক্রেনীয় স্টেমার ব্যবহার করা হয়।
ল্যাটিন ইংরেজি স্নোবল স্টেমার; ডায়াক্রিটিক উপেক্ষিত
চীনা, জাপানি, কোরিয়ান, থাই, লাও, খমের, মিয়ানমার ওভারল্যাপিং অক্ষর যুগল: কোনো বাক্যাংশ ফাঁকা স্থান ছাড়া পাওয়া যায়। চীনা অনুসন্ধানগুলি jieba ব্যবহার করে শব্দে বিভক্ত করা হয়।
অন্যান্য স্ক্রিপ্ট নির্দিষ্ট শব্দ

ইউক্রেনীয় অভিধান (pymorphy3-dicts-uk) GPL-3.0 এর অধীনে বিতরণ করা হয়, তাই এটি ডিফল্টভাবে ইনস্টল করা হয় না। এটি ইনস্টল করুন pip install "tgwitness[uk-dictionary]"; সূচীপত্র নতুন অ্যানালাইজারটি সনাক্ত করে এবং নিজেকে পুনর্নির্মাণ করে।

যেখানে সূচি থাকে#

মোড সংগ্ৰহ ব্যবহার করুন
ডিস্কে (ডিফল্ট) search/fulltext.sqlite3 ওয়ার্কস্পেস ডিরেক্টরিতে বড় আর্কাইভ; রিস্টার্টের পরও টিকে থাকে
শুধুমাত্র মেমরিতে ডিস্কে কিছুই নেই; প্রতিবার শুরুতেই পুনর্নির্মাণ করা হয় ডিস্কে বার্তা পাঠ্যের কোনো ডেরিভেটিভ কপি নেই
বন্ধ কোনো সূচি নেই; সর্বশেষ প্রথমে · হুবহু টেক্সট অপরিবর্তিত থাকবে ন্যূনতম ইনস্টলেশন

প্রধান প্রশাসক প্রতিটি ওয়ার্কস্পেসের জন্য Journal → Filters → Search index-এর অধীনে মোড নির্বাচন করেন। 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 প্যানেলটি বন্ধ করতে হবে (অন্যথায় প্রস্থান কোড 3 হবে)। সাথে --json, স্ট্যান্ডার্ড আউটপুটে শুধুমাত্র ফলাফল চলে; অগ্রগতি স্ট্যান্ডার্ড এরর-এ যায়।

ফলাফল এবং স্বাক্ষরিত জার্নাল#

সূচী শেষ জার্নাল রেকর্ডের ক্রমিক নম্বর এবং হ্যাশ সংরক্ষণ করে এবং জার্নাল খোলার সময় সেগুলো জার্নালের সাথে মিলিয়ে দেখে। প্রতিস্থাপিত, পুনরুদ্ধার বা সম্পাদিত জার্নাল পুনর্নির্মাণ ঘটায়। প্রতিটি প্রতিক্রিয়া এই অবস্থান রিপোর্ট করে, এবং প্রতিটি হিট স্বাক্ষরিত জার্নাল থেকে এর ক্রমিক নম্বর অনুযায়ী পুনরায় পড়া হয়: সূচী নির্ধারণ করে কোন রেকর্ডগুলো দেখানো হবে এবং কোন ক্রমে, কখনই তাদের বিষয়বস্তু নয়। চ্যাট অ্যাক্সেস জার্নালের নিজস্ব চ্যাট ফিল্ডে প্রয়োগ করা হয়, সূচীর বিষয়বস্তুতে নয়।

স্বীকৃত পাঠ্য#

OCR এবং ট্রান্সক্রিপ্টগুলো তাদের এনক্রিপ্টেড আর্টিফ্যাক্টে থাকে। তাদের সূচিপত্র কেবল মেমরিতে বিদ্যমান থাকে এবং একটি স্বীকৃতি কাজ সম্পন্ন হলে পুনর্নির্মাণ করা হয়। একটি হিট তার উপর প্রদর্শিত হয় media.saved রেকর্ডে, ইঞ্জিন, মডেল এবং একটি উদ্ধৃতির সাথে 'মেশিন স্বীকৃতি' লেবেলযুক্ত; এটি কখনই টেলিগ্রামে প্রেরিত পাঠ্য হিসাবে প্রদর্শিত হয় না। একই সূচি স্বীকৃত পাঠ্য অনুসন্ধানের জন্য ব্যবহৃত হয়, যা এখনও সাধারণ উপ-স্ট্রিংগুলির সাথেও মেলে।

অ্যাক্সেস#

চ্যাট-সীমাবদ্ধ অ্যাক্সেস শুধুমাত্র সংশ্লিষ্ট চ্যাটগুলির রেকর্ডই খুঁজে, তাদের সংযুক্তিগুলির স্বীকৃত টেক্সটসহ। chat: এবং অন্যান্য ফিল্টার শুধুমাত্র সেই সেটটিকে সংকীর্ণ করতে পারে। স্কোপড অ্যাক্সেসে প্রদর্শিত সূচকের অবস্থা জার্নালের মোট সংখ্যা বাদ দেয়। শুধুমাত্র প্রধান প্রশাসকই মোড পরিবর্তন বা সূচক পুনর্নির্মাণ করতে পারেন।

আর্কাইভ এবং MCP-কে জিজ্ঞাসা করুন#

Ask the archive সম্পূর্ণ হলে এই সূচি থেকে তার উৎসগুলো পুনরুদ্ধার করে: নির্বাচিত চ্যাটগুলো থেকে সেরা মিলগুলো, যেখানে সংরক্ষিত টেক্সট একবারই গণনা করা হয়। সর্বোচ্চ ২৪টি উৎস পাঠানো হয়; দীর্ঘ টেক্সটগুলো তাদের মিলের আশেপাশে ছেঁটে ফেলা হয় এবং 'truncated' হিসেবে চিহ্নিত করা হয়। সাম্প্রতিক পরিবর্তন, একটি মেসেজের সংরক্ষিত সংস্করণ এবং সূচি এখনও তৈরি হচ্ছে এমন সময়ের অনুসন্ধানের ক্ষেত্রে পূর্ববর্তী কালানুক্রমিক পুনরুদ্ধার ব্যবহার করা হয়। প্রিভিউ দেখায় কোন পদ্ধতি ব্যবহার করা হয়েছে।

MCP ক্লায়েন্টরা কল করতে পারে search_messages with ranked=true এবং পৃষ্ঠা সঙ্গে next_offset. স্কোপড সংযোগগুলো শুধুমাত্র তাদের চ্যাটগুলোই গ্রহণ করে।

র‍্যাঙ্কড পেজিনেশন সর্বোচ্চ প্রথম 1,000 ফলাফলই দেখায়, পৃষ্ঠার আকার যাই হোক। আরও মিল খুঁজে দেখতে অনুসন্ধান, চ্যাট বা সময়সীমা সংকীর্ণ করুন। নতুন-প্রথমে অনুসন্ধান প্রতিটি পৃষ্ঠা নির্বাচন করার আগে বার্তা, OCR এবং ট্রান্সক্রিপশন ফলাফলগুলোকে সাজায়।

নির্ভরতা#

প্যাকেজ লাইসেন্স কেন
pymorphy3, pymorphy3-dicts-ru, DAWG2-Python MIT রাশিয়ান ও ইউক্রেনীয় লেমা; অভিধানগুলো স্থানীয়ভাবে লোড করা হয়েছে
snowballstemmer BSD-3-ক্লজ ইংরেজি স্টেম, বিশুদ্ধ পাইথন
জিয়েবা MIT চীনা অনুসন্ধান বিভাজন, বিশুদ্ধ পাইথন (শুধুমাত্র উৎস বিতরণ)
pymorphy3-dicts-uk (ঐচ্ছিক) জিপিএল-৩.০ পূর্ণ ইউক্রেনীয় অভিধান

SQLite FTS5 সহ unicode61 টোকেনাইজার প্রয়োজন; এটি বর্তমান Python বিল্ডে SQLite-এর অংশ। এটি ছাড়া, best-match সার্চ রিপোর্ট করে যে এটি অনুপলব্ধ।

বেঞ্চমার্ক#

python tools/bench_fulltext.py --messages 1000000 --work <empty directory>২০০টি চ্যাটে লিঙ্ক ও হ্যান্ডেলসহ রুশ, ইউক্রেনীয়, ইংরেজি, চীনা ও জাপানি মিশ্রিত বার্তার একটি নির্ধারিত স্বাক্ষরিত জার্নাল তৈরি করে, সূচিপত্র তৈরি করে এবং সাধারণ অনুসন্ধানের সময় নির্ধারণ করে (৫০টি ফলাফল, ৭টি চালানোর মধ্যক)।

Windows 11, Intel Core i9-13900K, 128 GB RAM, Python 3.12.10, SQLite 3.49.1, exFAT ড্রাইভে ডেটা, অ্যানালাইজার-এ পরিমাপ করা হয়েছে fulltext-v1+pymorphy3-ru+light-uk+snowball-en:

পরিমাপ ফলাফল
স্বাক্ষরিত জার্নাল ১,০০০,০০০টি বার্তা, ১.৫০ জিবি, ১৯ মিনিটে লেখা
জার্নাল থেকে সূচিপত্র তৈরি করুন ৭১ সেকেন্ড, প্রতি সেকেন্ডে প্রায় ১৪,১৪১টি বার্তা
সূচীপত্র ফাইল ৫৮ MiB, জার্নালের ৩.৮%
নতুন রেকর্ডের ঠিক পরেই অনুসন্ধান করুন ৮ ms মধ্যম, ৯ ms p95
পূর্ববর্তী সাবস্ট্রিং অনুসন্ধান, একই জার্নাল перевод ৩.২ সে, 银行转账 2.6 s, verify-account.example 2.6 s
অনুসন্ধান মিলিত রেকর্ডসমূহ সেরা মিল, মধ্যক p95 নতুনগুলো প্রথমে, মধ্যম
সাধারণ শব্দ, শব্দের রূপ: перевод 134,403 ৮২ ms ৮৫ ms ৭ ms
দুটি শব্দ: оплата карта 28,996 ৪৩ ms ৪৩ ms ১৪ ms
দুর্লভ শব্দ: розыгрыш подарок 28,881 ৪২ ms ৪৭ ms ১৩ ms
নির্দিষ্ট বাক্যাংশ: "переказ коштів на картку" গণনা করা হয়নি ৩৫ মিলিসেকেন্ড ৩৬ ms ৬ ms
ডোমেইন সহ সাবডোমেইনসমূহ: verify-account.example 12,435 ১৭ ms ১৭ ms ৩ ms
@username: @support_desk_bot 10,331 ১৫ মিলিসেকেন্ড ১৬ ms ৩ ms
স্থান ছাড়া চীনা: 银行转账 17,691 ২৩ মিলিসেকেন্ড ২৪ মিলিসেকেন্ড ৩ ms
জাপানি: リンク 16,603 ২৩ মিলিসেকেন্ড ২৫ মিলিসেকেন্ড ৩ ms
ইংরেজি মূল: withdrawal 27,775 ২৬ মিলিসেকেন্ড ২৬ মিলিসেকেন্ড ২ মিলিসেকেন্ড
অথবা এবং বহিষ্করণ: бонус OR подарок -казино 268,034 190 ms 193 ms ১৯ মিলিসেকেন্ড
চ্যাট ফিল্টার: chat:-1000000000007 перевод 652 ৯ ms ৯ ms ৬ ms
সময়সীমা ফিল্টার: since:2026-01-01 until:2026-01-31 выплата 115,732 155 ms 156 ms ৮১ ms

একটি সঠিক বাক্যাংশ প্রার্থীদের র‌্যাঙ্ক ক্রমে আক্ষরিক অর্থে পরীক্ষা করা হয় যতক্ষণ না পৃষ্ঠাটি পূর্ণ হয়, তাই এর মোট গণনা করা হয় না। মিলিত রেকর্ডের সংখ্যার সাথে সাথে সময় বৃদ্ধি পায়; চ্যাট বা সময়সীমা সংকীর্ণ করলে বিস্তৃত অনুসন্ধান দ্রুত হয়। সিন্থেটিক কর্পাস একটি ছোট শব্দভাণ্ডার পুনরাবৃত্তি করে, তাই সাধারণ শব্দগুলি বাস্তব চ্যাটের তুলনায় অনেক বেশি রেকর্ডের সাথে মেলে।