복붙노트

[PYTHON] 파이썬 - 두 문자열 간의 차이점

PYTHON

파이썬 - 두 문자열 간의 차이점

나는 목록에 많은 단어를 저장하고 싶다. 이 단어들의 대부분은 매우 유사합니다. 예를 들어 나는 단어 afrykanerskojęzyczny와 afrykanerskojęzycznym, afrykanerskojęzyczni, nieafrykanerskojęzyczni와 같은 단어를 많이 사용합니다. 두 문자열 간의 차이를 찾고 첫 번째 문자열에서 두 번째 문자열을 복원하고 diff를 비교하는 효과적인 (빠른 및 작은 diff 크기 제공) 솔루션은 무엇입니까?

해결법

  1. ==============================

    1.difflib 모듈에서 ndiff를 사용하여이 작업을 수행 할 수 있습니다. 그것은 한 문자열을 다른 문자열로 변환하는 데 필요한 모든 정보를 가지고 있습니다.

    difflib 모듈에서 ndiff를 사용하여이 작업을 수행 할 수 있습니다. 그것은 한 문자열을 다른 문자열로 변환하는 데 필요한 모든 정보를 가지고 있습니다.

    간단한 예 :

    import difflib
    
    cases=[('afrykanerskojęzyczny', 'afrykanerskojęzycznym'),
           ('afrykanerskojęzyczni', 'nieafrykanerskojęzyczni'),
           ('afrykanerskojęzycznym', 'afrykanerskojęzyczny'),
           ('nieafrykanerskojęzyczni', 'afrykanerskojęzyczni'),
           ('nieafrynerskojęzyczni', 'afrykanerskojzyczni'),
           ('abcdefg','xac')] 
    
    for a,b in cases:     
        print('{} => {}'.format(a,b))  
        for i,s in enumerate(difflib.ndiff(a, b)):
            if s[0]==' ': continue
            elif s[0]=='-':
                print(u'Delete "{}" from position {}'.format(s[-1],i))
            elif s[0]=='+':
                print(u'Add "{}" to position {}'.format(s[-1],i))    
        print()      
    

    인쇄물:

    afrykanerskojęzyczny => afrykanerskojęzycznym
    Add "m" to position 20
    
    afrykanerskojęzyczni => nieafrykanerskojęzyczni
    Add "n" to position 0
    Add "i" to position 1
    Add "e" to position 2
    
    afrykanerskojęzycznym => afrykanerskojęzyczny
    Delete "m" from position 20
    
    nieafrykanerskojęzyczni => afrykanerskojęzyczni
    Delete "n" from position 0
    Delete "i" from position 1
    Delete "e" from position 2
    
    nieafrynerskojęzyczni => afrykanerskojzyczni
    Delete "n" from position 0
    Delete "i" from position 1
    Delete "e" from position 2
    Add "k" to position 7
    Add "a" to position 8
    Delete "ę" from position 16
    
    abcdefg => xac
    Add "x" to position 0
    Delete "b" from position 2
    Delete "d" from position 4
    Delete "e" from position 5
    Delete "f" from position 6
    Delete "g" from position 7
    
  2. ==============================

    2.정규식 모듈 (퍼지 섹션)을 살펴볼 수 있습니다. 실제 차이점을 얻을 수 있는지는 모르지만 적어도 삽입, 삭제 및 대체와 같은 여러 가지 유형의 변경이 허용되는 개수를 지정할 수 있습니다.

    정규식 모듈 (퍼지 섹션)을 살펴볼 수 있습니다. 실제 차이점을 얻을 수 있는지는 모르지만 적어도 삽입, 삭제 및 대체와 같은 여러 가지 유형의 변경이 허용되는 개수를 지정할 수 있습니다.

    import regex
    sequence = 'afrykanerskojezyczny'
    queries = [ 'afrykanerskojezycznym', 'afrykanerskojezyczni', 
                'nieafrykanerskojezyczni' ]
    for q in queries:
        m = regex.search(r'(%s){e<=2}'%q, sequence)
        print 'match' if m else 'nomatch'
    
  3. ==============================

    3.당신이 요구하는 것은 특별한 압축 형식입니다. xdelta3은 압축의 특수한 종류를 위해 고안되었으며 파이썬 바인딩을 지원합니다.하지만 zlib를 직접 사용하는 것은 불가능합니다. zlib.compressobj와 zlib.decompressobj를 "기본 단어"로 설정된 zdict 매개 변수와 함께 사용하고 싶습니다. 아프리카 계 미국인.

    당신이 요구하는 것은 특별한 압축 형식입니다. xdelta3은 압축의 특수한 종류를 위해 고안되었으며 파이썬 바인딩을 지원합니다.하지만 zlib를 직접 사용하는 것은 불가능합니다. zlib.compressobj와 zlib.decompressobj를 "기본 단어"로 설정된 zdict 매개 변수와 함께 사용하고 싶습니다. 아프리카 계 미국인.

    파이썬 3.3 이상에서만 zdict가 지원되며 모든 diff에 대해 동일한 "기본 단어"를 사용하면 코드 작성이 가장 쉽습니다. 원하는 단어 일 수도 있고 아닐 수도 있습니다.

  4. ==============================

    4.나는 ndiff 응답을 좋아하지만, 변경 사항 만 모두 목록에 넣고 싶다면 다음과 같이 할 수 있습니다.

    나는 ndiff 응답을 좋아하지만, 변경 사항 만 모두 목록에 넣고 싶다면 다음과 같이 할 수 있습니다.

    import difflib
    
    case_a = 'afrykbnerskojęzyczny'
    case_b = 'afrykanerskojęzycznym'
    
    output_list = [li for li in difflib.ndiff(case_a, case_b) if li[0] != ' ']
    
  5. ==============================

    5.위의 내 질문에 대한 원래 질문에 대한 대답은 이것이 그가 원하는 전부라고 생각하게 만듭니다.

    위의 내 질문에 대한 원래 질문에 대한 대답은 이것이 그가 원하는 전부라고 생각하게 만듭니다.

    loopnum = 0
    word = 'afrykanerskojęzyczny'
    wordlist = ['afrykanerskojęzycznym','afrykanerskojęzyczni','nieafrykanerskojęzyczni']
    for i in wordlist:
        wordlist[loopnum] = word
        loopnum += 1
    

    이렇게하면 다음 작업이 수행됩니다.

    단어 목록의 모든 값에 대해 단어 목록의 해당 값을 원래 코드로 설정하십시오.

    단어 목록을 변경해야하는 곳에서 단어 목록을 변경해야하는 단어를 저장하고 원본 단어가 올바른지 확인해야하는 곳에서 코드 조각을 작성하면됩니다.

    희망이 도움이!

  6. from https://stackoverflow.com/questions/17904097/python-difference-between-two-strings by cc-by-sa and MIT license