2014-05-22 2 views
0

두 개의 텍스트 사이의 유사점을 점수를 사용하여 비교하려고합니다.my for 루프는 모든 결과가 아닌 마지막 결과 만 제공합니다.

risk_list1_txt = [] 
scoreList = [] 
similarityDict = {} 
theScore = 0 
for text1 in risk_list1: 
    similarityDict['FileName'] = text1 
    theText1 = open(path1 + "\\" + text1).read().lower() 
    for text2 in range(len(risk_list2)): 
     theText2 = open(path2 + "\\" + risk_list2[text2]).read().lower() 
     theScore = fuzz.token_set_ratio(theText1,theText2) 
     similarityDict[risk_list2[text2]] = theScore 
    outFile= open(fileDestDir,'w') 
    outFile.write(str(theScore)) 
outFile.close() 

문제가 내 risk_list1 및 risk_list2의 3 가지 textfiles하는 데 문제가 있지만 내 OUTFILE 만, 나에게 마지막으로 비교를 위해 점수를주고 있다는 것입니다 : 이것은 내 코드입니다. 이 루프가 제대로 작동하지 않습니다.

+0

게시물을 편집하고 http://stackoverflow.com/editing-help를 사용하여 코드를 적절한 공백으로 포맷 할 수 있습니까? –

+0

@BradBeattie 그의 코드가 PEP8 간격을 확실히 따르지는 않지만 코드 블록이되도록 올바르게 형식을 지정했습니다. –

+0

'risk_list2'에 대한 인덱스를 제외하고'text2'를 사용하지 않으므로'risk_list1'처럼'risk_list2'를 반복합니다. 또한 경로 구성 요소를'\\\'로 수동으로 연결하는 대신에'os.path.join'을 사용하십시오. – chepner

답변

2

들여 쓰기 문제 일 수 있습니다.

for text1 in risk_list1: 
    # iterates through each text1 
    # ... 

    for text2 in range(len(risk_list2)): 
     # iterates through each text2 
     theScore = fuzz.token_set_ratio(theText1,theText2) 
     # theScore gets set 

    # we've iterated all the way through the text2's 

    outFile= open(fileDestDir,'w') 
    outFile.write(str(theScore)) 
    # open and write! 

또한 shaktimaan는 그의 대답에서 지적한대로, 언제 당신은 파일을 비 웁니다 'w' 플래그로 파일을 엽니 다. 대신 'a'을 사용하여 파일에 추가하십시오.

6

쓰기 모드에서 파일을 열고 추가 모드가 아닙니다.

outFile= open(fileDestDir,'a') 

outFile= open(fileDestDir,'w') 

교체 쓰기 모드는 파일의 내용을 자릅니다. 추가 모드는 기존 콘텐츠에 추가됩니다. 문서의 파일 모드에 대한 자세한 내용 here

+0

바깥 쪽 루프에서 같은 파일을 여러 번 반복적으로 여는 것이 문제가되지 않습니까? 루프 밖에서 한 번 열어 보는 것이 더 합리적이지 않습니까? 아니면 내가 잘못 읽고 있니? – SethMMorton

+0

파일 작업시 [with with'statement] (https://www.youtube.com/watch?v=lRaKmobSXF4&list=UUAuqj5Bs5mTTl1mIVDmuAlw0)를 사용해야합니다. –

관련 문제