Difflib, 데이터의 차이를 계산해보자

2025. 12. 30. 11:40연구하기, 지식

 최근 긴 문자열 두개를 비교 해야하는 일이 생겼다. 기존에는 형태소 분석을 하거나 낱말(혹은 단어)로 문장을 잘라 단순 비교하는 작업으로 진행 했었다. 이 과정은 간편하지만 너무나 기계적인 방법이라 긴 문자열이 들어오거나 가변적인 상황에 적합하지 않았다. 그렇다고 자연어 처리에 LLM을 쓰기에는 그 시간이 너무 오래 걸렸다. 그러던 중 difflib라는 유용한 파이썬 기본 라이브러리를 알게 되었다. 이 라이브러리를 통해 자연어를 비교해본 나는 원숭이에서 사람으로 진화를 했다.(전 진화론을 믿습니다.) 역시 사람이 코딩을 잘하려면 기본 라이브러리를 잘 알아야 한다. 이 difflib에 대해 공부해놓으면 앞으로 데이터 다룰때에도 매우 유용할 거 같아 공식 문서를 스터디 해보겠다.

 

https://docs.python.org/ko/3/library/difflib.html#

 

difflib — Helpers for computing deltas

Source code: Lib/difflib.py This module provides classes and functions for comparing sequences. It can be used for example, for comparing files, and can produce information about file differences i...

docs.python.org

 

class difflib.SequenceMatcher

  • 시퀀스 요소가 해시 가능이기만 하면, 모든 형의 시퀀스 쌍을 비교할 수 있는 유연한 클래스.
  • 기본 알고리즘은 '게슈탈트 패턴 매칭' *.
  • 아이디어는 정크 요소가 없는 가장 긴 연속적으로 일치하는 서브 시퀀스를 찾는 것.
  • 정크 요소는 빈 줄, 공백 같은 흥미롭지 않은 요소들.
  • 이 아이디어를 작은 조각으로 재귀적으로 적용.

* 게슈탈트 패턴 매칭 : 인간이 시각 정보를 개별 조각이 아닌 전체적인 형태로 인식하는 심리 원리에서 차용.

https://jacobfilipp.com/DrDobbs/articles/DDJ/1988/8807/8807c/8807c.htm

 

JUL88: PATTERN MATCHING: THE GESTALT APPROACH

PATTERN MATCHING: THE GESTALT APPROACH John Ratcliff has developed a number of educational packages at Milliken Publishing, most notably the Word Math series, and is currently doing cardiovascular research at St. Louis University and is developing a comput

jacobfilipp.com

 

class difflib.Differ

  • 텍스트 줄의 시퀀스를 비교하고, 사람이 읽을 수 있는 차이 또는 델타를 생성하는 클래스.
  • 문자 시퀀스를 비교하는데 SequenceMatcher 을 사용하고, 델타의 각 줄은 2자 코드로 시작.

 

class difflib.HtmlDiff

  • HTML 표를 (또는 표를 포함하는 완전한 HTML 파일을) 만드는 데 사용.
  • 자세한 생성자는 링크 참고.

difflib.context_diff (a, b, fromfile='', tofile='', fromfiledate='', tofiledate='', n=3, lineterm='\n')

  • a와 b(문자열의 리스트)를 비교.
  • 델타 줄을 생성하는 제너레이터를 문맥 diff 형식으로 반환.

 

difflib.get_close_matches (word, possibilities, n=3, cutoff=0.6)

  • 최상의 충분히 좋은 일치의 리스트를 반환.

keyword 라이브러리는 예약어 목록을 제공하는 라이브러리(!)

 

difflib.ndiff(a, b, linejunk=None, charjunk=IS_CHARACTER_JUNK)

  • 문자열 a와 b를 비교해 Differ-스타일 델타(제너레이터)를 반환.

 

 이 외에도 매우 재미있는 기능들이 이 라이브러리 안에 포함되어 있다. 얼마나 다른지, 어떻게 다른지들도 전부 출력할 수 있어서 자연어 처리에 매우 유용할 듯 싶다.

728x90

'연구하기, 지식' 카테고리의 다른 글

AI 트렌드 놓치지 않기  (0) 2025.11.13
uv 사용해보기  (5) 2025.08.29
NeMo Multi-Scale Diarization Decoder  (9) 2025.08.12
파이썬에서 깔끔하게 임시 파일 관리하기  (2) 2025.08.10
Supabase DB 사용해보기  (3) 2025.07.06