문제

difflib 도서관을 시도하고 있습니다.L_1 및 L_2 문자열이 포함 된 두 개의 목록이 있습니다.그 시퀀스가 비슷한 경우 (순서가 중요하지 않음) 알고 싶습니다.

L_1 = ["Bob", "Mary", "Hans"]
L_2 = ["Bob", "Marie", "Háns"]
.

는 ok이어야합니다.그러나

L_1 = ["Nirdosch", "Mary", "Rolf"]
L_2 = ["Bob", "Marie", "Háns"]
.

는 괜찮지 않아야합니다.

나는 첫 번째 목록 L_1을 반복하고, L_1의 모든 요소를 메소드 에 맞추기 위해 일어났습니다.

difflib.get_close_matches()
.

두 번째 목록 L_2에 대해비율이 큰 비율과 일치하는 경우 0.7을 L_2에서 제거하고 계속하십시오.그러나 나는 그것이 좋은 계획이라는 것을 의심합니다.더 나은 것이 있습니까?

도움이 되었습니까?

해결책

I would do something like:

import difflib

L_1 = ["Bob", "Mary", "Hans"]
L_2 = ["Bob", "Marie", "Hans"]

def similiarity(L_1, L_2):
    L_1 = set(intern(w) for w in L_1)
    L_2 = set(intern(w) for w in L_2)

    to_match = L_1.difference( L_2)
    against = L_2.difference(L_1)
    for w in to_match:
        res = difflib.get_close_matches(w, against)
        if len(res):
            against.remove( res[0] )
    return (len(L_2)-len(against)) / (len(L_1))

print similiarity(L_1,L_2)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top