문제

나는 현재 사용 중입니다 유사한_text 비교 횟수로 인해 ~ 50,000 목록과 문자열을 비교하려면 매우 느립니다. ~ 500 개의 고유 한 줄을 비교하는 데 약 11 분이 걸립니다.

이것을 실행하기 전에 데이터베이스를 확인하여 과거에 처리되었는지 여부를 확인하므로 초기 실행 후 매번 즉시 가깝습니다.

나는 확실하다 Levenshtein 약간 더 빠르고 Levenshteindistance 기능은 매뉴얼에 게시 한 사람이 흥미로워 보입니다. 이것을 훨씬 더 빨리 만들 수있는 것을 놓치고 있습니까?

도움이 되었습니까?

해결책

결국 둘 다 levenshtein 그리고 similar_text 수표가 많고 최후의 수단으로 만 사용하더라도 끈의 수에 따라 너무 느 렸습니다.

실험으로, 나는 일부 코드를 C#에 포팅하여 인터페이스 코드가 얼마나 빠른 지 확인했습니다. 동일한 데이터 세트로 약 3 분 안에 실행되었습니다.

다음으로 테이블에 추가 필드를 추가하고 이중 중유 PECL 확장을 사용하여 각 행에 대한 키를 생성했습니다. 일부 숫자가 포함되어 있기 때문에 결과는 좋았습니다. 그런 다음 위의 기능을 통해 각각을 실행할 수 있었지만 결정하지 않기로 결정했습니다.

결국 나는 가장 간단한 접근 방식을 선택했습니다. 때로는 탐지하고 수정하기 쉽지만 실수가 있습니다. 또한 약 3-4 초 만에 매우 빠르게 실행됩니다.

다른 팁

아마도 당신은 정확한 일치를 위해 문자열을 먼저 비교하여 (그리고 길이가 동일 한 경우 먼저 비교하여) 일부 수표를 '단락'할 수 있습니다. similar_text 전화.

@jason이 지적했듯이 O (n^3) 알고리즘은 결코 좋은 선택이되지 않습니다.

Levenshtein Automaton을 사용할 때 (거리가있는 문자열과 일치하는 오토 마톤 k) 일치하는 수표를 수행 할 수 있습니다 O(n), 어디 n 확인하는 문자열의 길이입니다. 오토 마톤을 건설 할 수 있습니다 O(kn), 어디 k 최대 거리와 n 기본 문자열의 길이.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top