나는 약간 다른 명명 규칙을 사용하여 백만 명이 넘는 2 개의 목록을 가지고 있습니다. 목표는 95 % 신뢰의 논리를 사용하여 유사한 레코드를 일치시키는 것입니다.파이썬에서 일치하는 퍼지 문자열
Python의 FuzzyWuzzy 모듈과 같이 내가 활용할 수있는 라이브러리가 있음을 알고 있습니다.
그러나 처리 측면에서 볼 때 하나의 목록에있는 모든 문자열을 다른 목록과 비교하는 데 너무 많은 리소스가 필요하며이 경우에는 백만 분의 1 회의 반복 횟수가 필요합니다.
이 문제에 대한 다른보다 효율적인 방법이 있습니까?
UPDATE : 사용 파이톤 판다 바이 그래서이 버킷 팅 기능을 만들어 공백 심볼을 제거하는 등을 소문자로 값을 변환하는 간단한 정규화를 적용
...for n in list(dftest['YM'].unique()):
n = str(n)
frame = dftest['Name'][dftest['YM'] == n]
print len(frame)
print n
for names in tqdm(frame):
closest = process.extractOne(names,frame)
데이터 년 단위로 그룹화 된 작은 버킷에로드 된 다음 FuzzyWuzzy 모듈을 사용하여 process.extractOne
이 가장 잘 일치하는 데 사용됩니다.
결과는 여전히 다소 실망 스럽습니다. 테스트 동안 위의 코드는 약 5 천명의 이름을 포함하는 테스트 데이터 프레임에 사용되고 거의 한 시간이 걸립니다.
테스트 데이터는에 의해 나뉩니다. 출생
그리고 나는 그들의 YMS는 같은 양동이에 양동이에 의해 그들을 비교하고 날짜의
- 이름
- 년 월.
내가 사용중인 FuzzyWuzzy 모듈로 인해 문제가 발생할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.
이름을 정규화하고 정규화 된 양식을 비교해 볼 수 있습니다. 그것은 꽤 병렬화가 가능해진다. – Alec
정규화에 대해 어떻게 권하고 싶습니다? 제가 적용 할 수있는 표준 방법이 있습니까? 의견을 보내 주시면 감사하겠습니다. – BernardL
글쎄 그것은 명명 차이의 종류에 따라 달라질까요? 회사 이름과 일치하는 간단한 예로서 'LTD'또는 'INC'및 어쩌면 비 문자와 같은 구문을 제거 할 수 있습니다. – Alec