テキスト重複除去ツール
テキスト内の重複コンテンツを素早く削除、行、単語、文単位の重複除去をサポート
テキスト重複除去とは?
テキスト重複除去ツールは、テキスト内の重複コンテンツを素早く識別・削除するために使用します。重複する行、単語、文、段落のいずれを扱っていても、このツールで効率的にデータをクリーンアップできます。このツールは複数の重複除去モードをサポートしています:リストデータには行単位、語彙分析には単語単位、記事編集には文単位、長いテキスト処理には段落単位が適しています。
使い方
基本的な使い方
- 重複除去するテキストを左側のテキストボックスに入力または貼り付けます
- 適切な重複除去モード(行、単語、文、段落など)を選択します
- 必要に応じてオプションを調整します(大文字小文字の区別、順序保持など)
- 右側にリアルタイムの重複除去結果と統計が表示されます
- コピーボタンをクリックして結果をクリップボードに保存します
モードの説明
- 行単位:各行を独立した単位として扱い、同一の行を削除します
- 単語単位:スペースでテキストを分割し、重複する単語を削除します
- 文単位:ピリオド、疑問符、感嘆符で分割し、重複する文を削除します
- 段落単位:空行で分割し、重複する段落を削除します
- 文字単位:テキスト内で複数回出現する文字を削除します
利用シーン
仕組み
重複除去は JavaScript Set による1パススキャンです。ECMAScript の Set は SameValueZero アルゴリズム(Array.prototype.includes と同じ比較。NaN は NaN と等しく、+0 は -0 と等しい)を使用し、仕様によりサブリニアの平均ルックアップが要求されます。V8 では O(1) の償却挿入を持つオープンアドレスハッシュテーブルとして実装されているため、全体の処理は項目数に対して O(n) です。素朴な方法——結果配列に push し、各要素で indexOf を呼び出す——は O(n²) となり、1万件付近から処理が遅くなります。分割はモードに依存します。行モードは /\r?\n/ で分割し CRLF(Windows)と LF(Unix)の両方の行末に対応、単語モードは /\s+/、文モードは /(?<=[.!?])\s+/、段落モードは /\n{2,}/ で分割します。各単位は Set のキーになる前にオプションの正規化処理を経ます。trim() で前後の空白を除去、toLowerCase() で大文字小文字を区別しないマッチング、String.prototype.normalize('NFC') で合成文字(é、U+00E9)と分解文字(e + U+0301)のように視覚的に同一の文字列を単一のエントリにまとめます。順序は保持されます。結果配列はイテレーション順に構築され、Set は「既に見たか?」フィルターとしてのみ参照されるためです。同じデータ構造の選択は SQL DISTINCT や Python set() の基礎にもなっています。数千万件のデータでは、定数メモリで小さな偽陽性率(10 ビット/要素で約 1%)を犠牲にする確率的ブルームフィルターが唯一の実用的な代替手段ですが、ブラウザ側のテキストツールではオーバーキルです。
- Set ルックアップは SameValueZero アルゴリズム(ECMA-262 §7.2.10)を使用。NaN は NaN と一致、+0 は -0 と一致、それ以外は厳密等価
- V8 は Set をハッシュテーブルとして実装。insert と has は O(1) の償却であり、重複除去全体が indexOf ベースの O(n²) に対して O(n)
- 行モードの正規表現 /\r?\n/ は CRLF、LF、末尾 CR を1回の分割で処理。これを怠ると不可視の「\r」接尾辞が残り、完全一致を妨げる
- String.prototype.normalize('NFC') による Unicode 正規化で、合成/分解形(例:「é」U+00E9 vs「e」+U+0301)を1つのキーにまとめる
- 大文字小文字を区別しないモードではキーのみを小文字化。元の大文字小文字の値は出力に保持されるため、最初の「ERROR」はそのまま残り、以降の「error」行は破棄される
- 順序保持はコストなし。結果配列は入力順に構築され、Set はフィルターとしてのみ参照されるため、SQL DISTINCT の安定ソートと同じ動作
- 1000万件以上でメモリがボトルネックになる場合、ブルームフィルター(10 ビット/要素で偽陽性率約 1%)で Set を置き換え可能。ブラウザ内では100万件の文字列 Set でも 100 MB 未満に収まるため不要
使用例
行の重複削除(最初の出現を保持)
入力:
apple
banana
apple
orange
banana
出力:
apple
banana
orange前後の空白をトリムして行を重複削除
入力:
hello
hello
hello
world
出力(トリム後):
hello
world大文字小文字を区別しない重複削除
入力:
ERROR
error
Warning
WARNING
warning
出力(大文字小文字を区別しない):
ERROR
Warningメールアドレスの一意化
入力:
alice@example.com
bob@example.com
ALICE@example.com
carol@example.com
bob@example.com
出力(大文字小文字を区別しない、行モード):
alice@example.com
bob@example.com
carol@example.com単語の重複削除
入力: hello world hello again world
出力: hello world again文の重複削除
入力: This is a test. This is a test. Another sentence.
出力: This is a test. Another sentence.よくある質問
何が重複と見なされますか?
各単位(行、単語、文、段落、文字)が他と比較されます。完全に同一の単位が重複と判定されます。大文字小文字の区別はオン/オフで切り替え可能です。本ページは重複を除いたリストを出力し、削除された重複の数を表示します。
順序は保持されますか?
はい。各ユニークなアイテムの最初の出現が元の位置に残り、それ以降の重複が削除されます。出力では元の順序が保持されます。
空行は重複として扱われますか?
空行も他の行と同様に比較されます。最初の空行は残り、その後の同一の空行は他の重複と同様に削除されます。
部分文字列や列で重複排除できますか?
いいえ。重複排除は各単位(行、単語、文、段落、文字)の内容全体に対して機能します。列ベースや部分文字列ベースの重複排除モードはありません。
出力はソートされますか?
いいえ。出力は常に元の順序を保持します。ソートオプションはありません。
どれくらい大きなファイルを扱えますか?
ブラウザのメモリが上限となります。デスクトップブラウザでは数十万行までは動作します。数百万行のファイルではメモリ不足になるため、その場合は `sort -u` や `awk '!seen[$0]++'` などの CLI ツールを使ってください。
テキストはアップロードされますか?
いいえ。重複排除はブラウザ内のメモリ上の Set を使用します。貼り付けた行が送信されることはありません。