텍스트 중복 제거 도구
텍스트의 중복 내용을 빠르게 제거, 줄, 단어, 문장 단위 중복 제거 지원
텍스트 중복 제거란?
텍스트 중복 제거 도구는 텍스트의 중복 내용을 빠르게 식별하고 제거하는 데 사용됩니다. 중복되는 줄, 단어, 문장 또는 문단을 처리할 때 이 도구는 데이터를 효율적으로 정리하는 데 도움이 됩니다. 이 도구는 여러 중복 제거 모드를 지원합니다: 목록 데이터에는 줄 단위, 어휘 분석에는 단어 단위, 문서 편집에는 문장 단위, 긴 텍스트 처리에는 문단 단위가 적합합니다. 로그, CSV, 번역 원문처럼 순서가 의미를 갖는 데이터는 중복 제거 방식에 따라 결과가 달라질 수 있으므로, 처리 전 구분자와 대소문자 민감도를 함께 확인해야 합니다.
사용 방법
기본 조작
- 왼쪽 텍스트 상자에 중복을 제거할 텍스트를 입력하거나 붙여넣으세요
- 적절한 중복 제거 모드를 선택하세요 (줄, 단어, 문장 등)
- 필요에 따라 옵션을 조정하세요 (대소문자 구분, 순서 유지 등)
- 오른쪽에서 실시간 중복 제거 결과와 통계를 확인하세요
- 복사 버튼을 클릭하여 결과를 클립보드에 저장하세요
모드 설명
- 줄: 각 줄을 독립 단위로 처리하여 같은 줄을 제거합니다
- 단어: 공백을 기준으로 텍스트를 분리해 중복된 단어를 제거합니다
- 문장: 마침표, 물음표, 느낌표로 분리해 중복된 문장을 제거합니다
- 단락별: 빈 줄로 구분하고 중복된 단락을 제거합니다
- 문자별: 텍스트에서 중복된 문자를 제거합니다
활용 사례
기술 원리
중복 제거는 JavaScript Set 기반의 원스캔 방식입니다. ECMAScript Set은 SameValueZero 동등 알고리즘을 사용합니다(NaN은 NaN과 같고, +0은 -0과 같으며, 그 외에는 엄격 동등 비교 — Array.prototype.includes가 사용하는 것과 동일). 명세는 평균 조회 시간이 준선형을 보장하도록 요구하며, 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)이므로 전체 중복 제거가 O(n), indexOf 기반 O(n²)와 대조
- 줄 모드 정규식 /\r?\n/은 CRLF, LF, 후행 CR을 한 번의 분할로 처리; 이를 무시하면 보이지 않는 '\r' 접미사가 정확한 매칭을 방해
- String.prototype.normalize('NFC')를 통한 Unicode 정규화로 조합형/분해형(예: 'é' U+00E9 vs 'e' + U+0301)을 하나의 키로 통합
- 대소문자 무시 모드는 키만 소문자화 — 원본 대소문자 값은 출력에 보존되어 첫 번째 'ERROR'는 그대로 유지되고 이후 'error' 줄은 버려짐
- 순서 보존은 기본 제공: 결과 배열은 입력 순서로 구성되고 Set은 필터로만 활용되므로 안정 정렬의 SQL DISTINCT와 동일한 동작
- 1000만 건 이상에서 메모리가 병목일 때, 블룸 필터(≈10비트/요소, 1% 오탐률)가 Set을 대체 — 브라우저에서는 100만 문자열의 Set이 100MB 미만으로 충분히 수용 가능
예시
줄 중복 제거, 첫 번째 항목 유지
입력:
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을 이용해 수행되며, 붙여넣은 줄들은 외부로 전송되지 않습니다.