[PYTHON] 파이썬 - 두 문자열 간의 차이점
PYTHON파이썬 - 두 문자열 간의 차이점
나는 목록에 많은 단어를 저장하고 싶다. 이 단어들의 대부분은 매우 유사합니다. 예를 들어 나는 단어 afrykanerskojęzyczny와 afrykanerskojęzycznym, afrykanerskojęzyczni, nieafrykanerskojęzyczni와 같은 단어를 많이 사용합니다. 두 문자열 간의 차이를 찾고 첫 번째 문자열에서 두 번째 문자열을 복원하고 diff를 비교하는 효과적인 (빠른 및 작은 diff 크기 제공) 솔루션은 무엇입니까?
해결법
-
==============================
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.정규식 모듈 (퍼지 섹션)을 살펴볼 수 있습니다. 실제 차이점을 얻을 수 있는지는 모르지만 적어도 삽입, 삭제 및 대체와 같은 여러 가지 유형의 변경이 허용되는 개수를 지정할 수 있습니다.
정규식 모듈 (퍼지 섹션)을 살펴볼 수 있습니다. 실제 차이점을 얻을 수 있는지는 모르지만 적어도 삽입, 삭제 및 대체와 같은 여러 가지 유형의 변경이 허용되는 개수를 지정할 수 있습니다.
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.당신이 요구하는 것은 특별한 압축 형식입니다. xdelta3은 압축의 특수한 종류를 위해 고안되었으며 파이썬 바인딩을 지원합니다.하지만 zlib를 직접 사용하는 것은 불가능합니다. zlib.compressobj와 zlib.decompressobj를 "기본 단어"로 설정된 zdict 매개 변수와 함께 사용하고 싶습니다. 아프리카 계 미국인.
당신이 요구하는 것은 특별한 압축 형식입니다. xdelta3은 압축의 특수한 종류를 위해 고안되었으며 파이썬 바인딩을 지원합니다.하지만 zlib를 직접 사용하는 것은 불가능합니다. zlib.compressobj와 zlib.decompressobj를 "기본 단어"로 설정된 zdict 매개 변수와 함께 사용하고 싶습니다. 아프리카 계 미국인.
파이썬 3.3 이상에서만 zdict가 지원되며 모든 diff에 대해 동일한 "기본 단어"를 사용하면 코드 작성이 가장 쉽습니다. 원하는 단어 일 수도 있고 아닐 수도 있습니다.
-
==============================
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.위의 내 질문에 대한 원래 질문에 대한 대답은 이것이 그가 원하는 전부라고 생각하게 만듭니다.
위의 내 질문에 대한 원래 질문에 대한 대답은 이것이 그가 원하는 전부라고 생각하게 만듭니다.
loopnum = 0 word = 'afrykanerskojęzyczny' wordlist = ['afrykanerskojęzycznym','afrykanerskojęzyczni','nieafrykanerskojęzyczni'] for i in wordlist: wordlist[loopnum] = word loopnum += 1
이렇게하면 다음 작업이 수행됩니다.
단어 목록의 모든 값에 대해 단어 목록의 해당 값을 원래 코드로 설정하십시오.
단어 목록을 변경해야하는 곳에서 단어 목록을 변경해야하는 단어를 저장하고 원본 단어가 올바른지 확인해야하는 곳에서 코드 조각을 작성하면됩니다.
희망이 도움이!
from https://stackoverflow.com/questions/17904097/python-difference-between-two-strings by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 : "튜플 목록"을 1 개의 평면 목록 또는 1 개의 매트릭스로 변환합니다. (0) | 2018.10.19 |
---|---|
[PYTHON] 지역 ()을 사용하는 파이썬 사전 이해력은 KeyError를 제공합니다. (0) | 2018.10.19 |
[PYTHON] Python ElementTree를 문자열로 변환 (0) | 2018.10.19 |
[PYTHON] AttributeError : 'datetime'모듈에 'strptime'속성이 없습니다. (0) | 2018.10.19 |
[PYTHON] 2D 배열 파이썬의 길이 찾기 (0) | 2018.10.19 |