0

주어진 단어와 일치하는 순열을 찾고 열 위치를 기반으로 데이터를 정렬하려고합니다. -다른 열에서 단어의 유사한 순열 찾기

IE는 내가 몇에서 폐기 데이터로 CSV를 생성 websites.Say 보인다 :

Name1  OtherVars Name2  More Vars 

Stanford 23451  Mamford  No 
MIT   yes  stanfor1d  12 
BeachBoys pie  Beatles  Sweeden 

내가 원하는을 (1) NAME2의 이름 1에서 각 단어의 순열을 찾은 다음 (2) Name1에서 그 단어가있는 표를 인쇄합니다. + OtherVars에서 일치하는 단어 + Name2에서 해당 단어의 순열 + MoreVars에서 일치합니다. (일치하는 단어가없는 경우 단어 삭제)

결과는이 경우에있을 것입니다 :

Name1  OtherVars  Name2  More Vars 

Stanford 23451  stanford  12 

그래서, 어떻게 할 :

  1. 다른 열에서 단어 순열을 일치 찾기?

  2. 두 단어와 다른 단어에 매핑 된 값을 인쇄 하시겠습니까?

추신 - 여기에 비슷한 질문이 있습니다; 그러나, 그것은 자바이고 의사 코드입니다. How to find all permutations of a given word in a given text? Difflib이 기반으로 CSV를 적합하지 않는 것 같다 How to find the most similar word in a list in python

PS2 - 나는 그러나 Fuzzymatch를 사용하는 것이 좋습니다했다, 나는이 경우 잔인한 있다고 생각한다. 당신이 "스탠포드"와 "stanf1ord"에 대해 동일한 출력을 반환하는 함수를 찾고 있다면

+1

'Name2'의 두 번째 항목에 1이 있어야합니까? – marisbest2

+0

또한,이 경우 "순열"은 무엇이며 "유사"를 어떻게 정의합니까? – marisbest2

+0

예 @ marisbest2 거기에 있어야하는 1. 순열은 Levenshtein Distance 또는 더 나은 사용자 정의 함수를 사용할 수있을만큼 충분히 유사하게 정의됩니다. – oba2311

답변

0

, 당신은 할 수 :

  • 사용 소문자는
  • 문자 만
  • 문자를
  • 종류의 유지


import re 

def signature(word): 
    return sorted(re.findall('[a-z]', word.lower())) 

print(signature("Stanford")) 
# ['a', 'd', 'f', 'n', 'o', 'r', 's', 't'] 
print(signature("Stanford") == signature("stanfo1rd")) 
# True 

첫 번째 열에서 서명 또는 집합을 만들고 두 번째 열에 일치하는 항목이 있는지 확인할 수 있습니다.

+0

고맙습니다.하지만이 표준화가 제안하는 것이이 문제의 많은 부분 중에서 첫 번째 단계 일뿐입니다. 그 단어에 가까운 좋은 일치를 검색하는 방법, 당신이 제안하는 것과 같이 정규화 한 후에 검색 공간의 모든 데이터를 정규화 하시겠습니까? – oba2311

+0

@ oba2311 귀하는 귀하의 질문에서 순열만을 언급했습니다. 순열은 내 코드의 적용을받습니다. 더 많은 퍼지 논리가 필요하다면, 어떤 종류의 것을 보여주고 무엇을 시도했는지 정확하게 정의해야합니다. –

0

"퍼뮤 테이션"이 아닌 퍼지 매칭이 필요합니다. 몇 가지 파이썬 일치하는 라이브러리가 있지만 사람들이 좋아하는 것 같아요 fuzzywuzzy

또는 자신 만의 롤 수 있습니다. 비슷한 것

def ismatch(s1,s2): 
    # implement logic 
    # return boolean if match 
    pass 

def group(): 
    pairs = [(n1, v1, n2, v2) for n1 in names1 for n2 in names2 if ismatch(n1,n2)] 
    return pairs