ToolActToolAct

텍스트 중복 제거 도구

텍스트의 중복 내용을 빠르게 제거, 줄, 단어, 문장 단위 중복 제거 지원

입력 텍스트
중복 제거 결과

중복 제거 모드

옵션

통계

원본 항목 수0
고유 항목 수0
중복 항목 수0

텍스트 중복 제거란?

텍스트 중복 제거 도구는 텍스트의 중복 내용을 빠르게 식별하고 제거하는 데 사용됩니다. 중복되는 줄, 단어, 문장 또는 문단을 처리할 때 이 도구는 데이터를 효율적으로 정리하는 데 도움이 됩니다. 이 도구는 여러 중복 제거 모드를 지원합니다: 목록 데이터에는 줄 단위, 어휘 분석에는 단어 단위, 문서 편집에는 문장 단위, 긴 텍스트 처리에는 문단 단위가 적합합니다. 로그, CSV, 번역 원문처럼 순서가 의미를 갖는 데이터는 중복 제거 방식에 따라 결과가 달라질 수 있으므로, 처리 전 구분자와 대소문자 민감도를 함께 확인해야 합니다.

사용 방법

기본 조작

  1. 왼쪽 텍스트 상자에 중복을 제거할 텍스트를 입력하거나 붙여넣으세요
  2. 적절한 중복 제거 모드를 선택하세요 (줄, 단어, 문장 등)
  3. 필요에 따라 옵션을 조정하세요 (대소문자 구분, 순서 유지 등)
  4. 오른쪽에서 실시간 중복 제거 결과와 통계를 확인하세요
  5. 복사 버튼을 클릭하여 결과를 클립보드에 저장하세요

모드 설명

  • 줄: 각 줄을 독립 단위로 처리하여 같은 줄을 제거합니다
  • 단어: 공백을 기준으로 텍스트를 분리해 중복된 단어를 제거합니다
  • 문장: 마침표, 물음표, 느낌표로 분리해 중복된 문장을 제거합니다
  • 단락별: 빈 줄로 구분하고 중복된 단락을 제거합니다
  • 문자별: 텍스트에서 중복된 문자를 제거합니다

활용 사례

반복된 줄, 단어, 문장, 문단 또는 문자 제거중복 제거할 단위를 선택하면 도구가 첫 번째 등장을 유지하면서 고유 항목의 순서를 보존합니다. 각 모드는 적절한 분리 및 결합 전략을 사용하므로 줄, 문단, 단어, 문자 워크플로가 각각 다르게 동작합니다. 해시셋 조회는 패스당 O(n) 시간에 실행되므로 긴 목록도 단일 브라우저 라운드에서 중복 제거됩니다.
정리된 텍스트 복사 전 중복 감사통계에는 원본 수, 고유 수, 제거된 중복 수가 표시됩니다. 선택적 중복 표시에서는 발견된 반복 항목을 나열하여 메일링 리스트, 키워드 목록, 로그, 설문 내보내기를 정리하기 전에 확인할 수 있습니다. 중복 목록을 먼저 검토하면 정리된 출력을 공유하기 전에 올바른 항목이 병합되었는지 확인할 수 있습니다.
대소문자 민감한 매칭 제어Apple과 apple을 별도로 유지해야 할 때 대소문자 구분을 켜고, 대문자 여부에 관계없이 반복 텍스트를 감지해야 할 때 끄세요. 이를 통해 동일한 도구가 산문 정리와 정확한 기술 목록 모두에 유용합니다. 대소문자 무시 모드는 해싱 전에 소문자로 변환하여 입력을 정규화하므로, 긴 로그에서 'ERROR'와 'error'를 별도 항목으로 유지하지 않습니다.
순서를 보존하면서 이메일 또는 태그 목록 정리이메일 내보내기를 붙여넣고 대소문자 무시 매칭의 줄 모드로 전환하여 [email protected]와 [email protected]를 병합합니다. 첫 등장 순서가 유지되어 정리된 목록이 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을 이용해 수행되며, 붙여넣은 줄들은 외부로 전송되지 않습니다.