본문 바로가기
Computer/NLP

python editdistance library 속도 비교(timeit)

by hexists 2022. 12. 8.

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가 가장 빠르다. 끝.