オープンソース
Usenet Archive Toolkit – Usenetメッセージを検索可能なアーカイブに処理
Usenet Archive Toolkit – process Usenet messages into a searchable archive (github.com)
要約
Usenet Archive Toolkitは、様々なUsenetメッセージソースを整理し、検索可能なアーカイブに変換するためのツール群です。オフラインでの利用や、重複メッセージやスパムのフィルタリング、UTF-8への変換、破損ヘッダーのデコードなどをサポートします。これにより、過去のUsenetディスカッションを効率的に検索・閲覧することが可能になります。
全文翻訳
Usenet Archive Toolkit Usenet Archive Toolkitプロジェクトは、様々なUsenetメッセージソースを、一貫性のある検索可能なアーカイブに処理するためのツールセットを提供することを目的としています。
通常、2つの使用パターンがあります。
すでに作成されたアーカイブファイルがあり、それを読みたい場合。その場合、tbrowserユーティリティをダウンロードまたはビルドするだけで済みます。
ソースからアーカイブファイルを作成したい場合。提供されているユーティリティのほとんどを使用する必要があります。
ワークフローグラフに従うのが良い出発点です。
要するに: 利用可能なアーカイブファイルをダウンロードし、tbrowserを使用してそれらを読みます。
UATアーカイブファイルのリストポーランドのUsenetアーカイブ: https://usenet.nereid.pl/。PCゲームUsenetアーカイブ: https://archive.org/details/usenet-uat-pc-games。
動機Usenetは死んでいます。あなたはそうではないと思うかもしれませんが、実際には死んでいます。
2016年8月から2016年12月までのポーランドのUsenetメッセージ数(概算)。人々は様々なフォーラム、Facebook、Twitterに移動し、そこで元気なようです。一方、古い議論はゆっくりと腐っていきます。
Googleグループは悲しくて、使えないジョークです。Archive.orgのデータセットは、少なくともポーランドのUsenetアーカイブに関しては、非常に不完全です。
データを取得したり、閲覧したり、検索したりする簡単な方法はありません。
だから、何かをする必要があるかもしれません。どうしてそんなに難しいのでしょうか?(それほど難しくはありません:動作するプロトタイプに1ヶ月、磨きとバグ修正にさらに1ヶ月。)
利点なぜUATを使うのか?なぜGoogleグループ、Archive.orgのアーカイブ、または長い履歴を持つNNTPサーバーのような既存のソリューションを使わないのか?
UATはオフライン作業のために設計されています。「クラウド」のデータにアクセスするためにネットワーク接続は必要ありません。クエリへの応答を待つ必要も、ましてや「Web 2.0」インターフェースに耐える必要もありません。
UATアーカイブは突然消えることはありません。あなたのディスクにあります。
Googleグループは、インターフェースの新しいイテレーションごとに劣化しています。また、Googleは、もはや収益性がないと感じたサービスをシャットダウンすることで知られています。Googleリーダー、Googleコード検索、Googleコードなど。その他の小規模サービスは、ディスククラッシュ1回でネットワークから完全に消滅する可能性があります。
UATアーカイブ形式は、高速アクセスと効率的な検索のために設計されています。各メッセージは、即時アクセスを容易にするために個別に圧縮されますが、より良い圧縮のためにアーカイブ全体の辞書を使用します。
検索は、Googleの元の論文に似た設計のデータベースを通じて実現されます。
総アーカイブサイズは、メッセージの非圧縮コレクションよりも小さいです。
複数のメッセージソースを、メッセージの重複なしに、単一のUATアーカイブにマージできます。このようにして、ソースA(例: NNTPアーカイブサーバー)の欠落をソースB(例: はるかに小さいArchive.orgダンプ)のメッセージで補うことができます。
このようにして作成されたアーカイブは、利用可能な最も完全なメッセージコレクションです。
UATアーカイブには重複メッセージ(NNTPサーバーでさえ一般的です)や、他のグループからの無関係なメッセージ(Archive.orgのコレクションには多くの偽のメッセージが含まれています)は含まれていません。
他のUsenetアーカイブはスパムメッセージで散らかっています。UATはスパムをフィルタリングできるため、以前は読めなかったニュースグループが簡単に読めるようになります。
適切にトレーニングされたスパムデータベースは、偽陽性および偽陰性の割合が非常に低いです。
すべてのメッセージはUTF-8に変換されるため、低機能クライアントで表示できます。
UATは、破損している、または完全に無効なヘッダー、エンコーディングが指定されていない、またはエンコーディングが悪いメッセージを正しくデコードしようとします。
メッセージのHTML部分は削除されます。
引用符で囲まれた印刷可能なコンテンツ(おそらく不正な形式)の解析について心配する必要もありません。
そして検索を忘れないでください。UATなしでそのBase64エンコードされたメッセージをgrepして楽しんでください。
UATアーカイブには、事前に計算されたメッセージ接続グラフが含まれており、「References」ヘッダー(しばしば破損している)を解析したり、メッセージを日付順に並べたりする必要がなくなります。
UATは、他のメッセージで引用されたテキストを検索することによって、メッセージヘッダーに示されていない欠落した接続性を「復元」することもできます。
アーカイブへのアクセスは、単純なlibuatインターフェースを通じて可能です。
UATアーカイブはメモリにマッピングされ、100%ディスクバックアップされます。高いメモリ圧力状況では、アーカイブページは単にパージされ、後でオンデマンドで再ロードされる場合があります。
通常のlibuat操作中に必要なメモリ割り当ては、次のものだけです。
単一メッセージを解凍するための、小さく、静的に成長するバッファ。
検索操作中に使用されるstd::vectors。
このようなアプローチの利点は、メッセージあたり25MBの管理情報しか必要としないtbrowserで見ることができます。
ツールキットの説明UATは、それぞれ独自のタスクに特化した多数のユーティリティを提供します。
各ユーティリティの簡単な説明を以下に示します。
インポート形式Usenetメッセージは、さまざまなソースから取得できます。現在、次のものをサポートしています。
import-source-maildir --- 各ファイルが個別のメッセージであるディレクトリツリーからインポートします(例: slrnpullは、動作させるために追加の簡単なセットアップでこれを生成します)。
import-source-maildir-7z --- 単一の7z圧縮ファイルに圧縮されたmaildirツリーからインポートします。
import-source-mbox --- Archive.orgは、すべての投稿が単一のファイルにマージされたmbox形式でUsenetメッセージのコレクションを保持しています。
google-groups --- Googleグループをクロールし、グループをmaildir形式で保存します。
nntp-get --- NNTPサーバーからメッセージを取得します。
インポートされたメッセージは、メッセージごとのLZ4圧縮メタ+ペイロードデータベースに保存されます。
データ処理生のインポートメッセージは、使用可能にするために処理する必要があります。次のユーティリティを提供します。
extract-msgid --- 各メッセージの一意の識別子を抽出し、ID経由で任意のメッセージに高速アクセスするための参照テーブルを構築します。
extract-msgmeta --- 「From」および「Subject」フィールドを抽出し、アーカイブブラウザ用のクイックリファレンスとします。
merge-raw --- 2つのインポートされたデータセットを1つにマージします。メッセージを重複させません。
relative-complement --- 2番目のセットに存在しないメッセージを最初のセットから抽出します。
utf8ize --- メッセージを共通の文字エンコーディングであるUTF-8に変換します。
connectivity --- メッセージの接続グラフを計算します。「Date」フィールドも解析します。これは時系列ソートに必要です。
threadify --- 一部のメッセージには、ヘッダーに接続データが埋め込まれていません。例: ニュースメールゲートウェイの使用における一般的なアーティファクトです。このツールはトップレベルのメッセージを検索し、引用を探し、他のメッセージでこれらの引用を検索して、子と親の間の欠落した接続を作成します(復元ではありません!それは決してそこにはありませんでした!)。
repack-zstd --- すべてのメッセージの共通辞書を構築し、zstdメタ+ペイロード+辞書データベースに再圧縮します。
update-zstd --- 辞書の再計算なしに、既存のzstdアーカイブを新しいデータで更新します。
repack-lz4 --- zstdデータベースをLZ4データベースに変換します。
package --- すべてのデータベースを単一のファイルにパッケージ化します。アンパックをサポートします。
sort --- メッセージをスレッド-時系列順に並べます。
データフィルタリングインポート直後の生のデータは、直接使用するには不向きです。メッセージは重複しており、スパムがあります。これらのユーティリティはクリーンアップを支援します。
kill-duplicates --- 重複メッセージを削除します。これは比較的まれですが、単一のNNTPサーバーからのデータセットでさえ、同じメッセージが2回含まれている場合があります。
filter-newsgroups --- 一部のデータソース(例: Archive.orgのGiganewsコレクション)には、コレクションのニュースグループに送信されなかったメッセージが含まれています。このユーティリティは、そのような偽のメッセージを削除します。
filter-spam --- スパムのように見えるメッセージを学習し、それらを削除します。
データ検索アーカイブの検索は、単語の辞書の手助けを借りて実行されます。次のツールがその準備に使用されます。
lexicon --- 単語のリストと各単語のヒットテーブルを構築します。
lexstats --- 辞書の統計を表示します。
lexdist --- 単語間の距離を計算します。
lexsort --- 辞書データを並べ替えます。
データアクセスこれらのツールはアーカイブデータへのアクセスを提供します。
query-raw --- LZ4データベースに対するクエリを実装します。extract-msgidユーティリティの結果が必要です。サポートするもの:
メッセージ数。
メッセージ識別子のリスト。
識別子によるメッセージのクエリ。
データベースレコード番号によるメッセージのクエリ。
libuat --- アーカイブ