python editdistance library를 검색하면 다양한 라이브러리가 나옵니다.
그중 editditsance, python-Levenshtein에 대해 속도 비교한 내용입니다.
timeit을 배우려고 timeit으로 속도 비교를 해봤습니다.
참고 1, editdistance, https://github.com/roy-ht/editdistance
참고 2, python-Levenshtein, https://maxbachmann.github.io/Levenshtein/
참고 3, timeit, https://docs.python.org/ko/3/library/timeit.html
[timeit — 작은 코드 조각의 실행 시간 측정 — Python 3.11.1 문서
timeit — 작은 코드 조각의 실행 시간 측정 소스 코드: Lib/timeit.py This module provides a simple way to time small bits of Python code. It has both a 명령 줄 인터페이스 as well as a callable one. It avoids a number of common traps
docs.python.org](https://docs.python.org/ko/3/library/timeit.html)
#!/usr/bin/env python3
import timeit
import editdistance
import Levenshtein
# timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)
a = 'fsffvfdsbbdfvvdavavavavavava'
b = 'fvdaabavvvvvadvdvavavadfsfsdafvvav'
def test1(a, b):
editdistance.eval(a, b)
t1 = timeit.timeit(stmt='test1(a, b)', setup='from __main__ import test1, a, b', number=100000)
print(f'editdistance.eval timeit: {t1}')
def test2(a, b):
Levenshtein.distance(a, b)
t2 = timeit.timeit(stmt='test2(a, b)', setup='from __main__ import test2, a, b', number=100000)
print(f'Levenshtein.distance timeit: {t2}')
def test3(a, b):
Levenshtein.editops(a, b)
t3 = timeit.timeit(stmt='test3(a, b)', setup='from __main__ import test3, a, b', number=100000)
print(f'Levenshtein.editops timeit: {t3}')
코드를 간단히 설명해보면...
timeit의 stmt에 시간 측정할 함수나 명령어를 넣어야 한다.
이때 함수명을 setup을 통해 먼저 import 한다.
editdistance.eval, Levenshtein.distance는 distance만 계산한 경우이고
Levenshtein.editops는 operation까지 계산한 결과이다.
실행 결과
$ ./check_ed_timeit.py
editdistance.eval timeit: 0.20804676972329617
Levenshtein.distance timeit: 0.26508184615522623
Levenshtein.editops timeit: 0.4081676444038749
실행결과를 보면, editdistance.eval가 가장 빠르다. 끝.
'Computer > NLP' 카테고리의 다른 글
Bert Examples (0) | 2021.04.30 |
---|---|
jaro-winkler similarity(jaro-winkler distance) (0) | 2018.05.13 |
noisy channel model and spell correction (0) | 2018.05.08 |
Perplexity in LM (0) | 2017.01.16 |
논문 리뷰(한글 검색 질의어 오타 패턴 분석과 사용자 로그를 이용한 질의어 오타 교정 시스템 구축) (0) | 2016.01.11 |