당신은 쉽게처럼 반복 할 수 있습니다
이
words = set()
with open("input.txt", "r") as fd:
for line in fd:
words.update(line.split())
가 set
의 사용은 각 단어는 오직 한 번 기록되도록합니다 - 그것은 같은 소리입니다 니가 뭘했는지.
입력 내용이 영어 텍스트를 실행하는 경우 '나'와 같은 단어를 잡으려하기 때문에 상황이 조금 더 어려워집니다. 하이픈으로 연결된 단어 (예 : '시간제')를 단일 단어로 분류할지 여부도 결정해야합니다 단어 - 여기 내 예시가 있지만 쉽게 변경할 수 있습니다. 문자의 그룹은 하나 이상의 구성된 아무것도입니다
import re
import string
non_word_re = re.compile(r"[^-\w']+")
words = set()
with open("input.txt", "r") as fd:
for line in fd:
words.update(i for i in non_word_re.split(line) if i[0] in string.letters)
이 단어의 set
을 만들 것입니다 : 내가 그들의 팬이 아니에요 많이 정규 표현식이 사실은 꽤 유용 곳이 어딘가에 [a-zA-Z0-9_-']
을 설정하고 첫 번째 문자는 문자입니다.
이
all_distances = {}
for word in words:
all_distances[word] = dict((i, calculate_distance(word, i)) for i in words)
아마 여기에 중첩 된 사전보다 청소기 데이터 구조있어,하지만 난 그 충분할 것이라고 생각만큼 간단합니다
이 후, 당신은 쉽게 단어의 각 쌍 사이의 거리를 계산할 수 있습니다.
마지막으로, 출력 할 수 있습니다 같은 탭으로 구분 된 매트릭스 뭔가 :
with open("output.txt", "w") as fd:
fd.write("\t" + "\t".join(sorted(all_distances.keys())) + "\n")
for word1, distances in sorted(all_distances.iteritems()):
fd.write(word1 + "\t" + "\t".join(i[1] for i in sorted(distances.iteritems())))
yuo 원하는 경우 매우 형식의 출력 매트릭스에 가까운 뭔가 (즉, 각 열은 자동으로 그 내용에 따라 크기가된다) 그렇다면 여전히 하드가 아니지만 약간의 실수로 코드가 더 필요합니다.
CSV 형식으로 파일을 읽거나 쓰고 싶다면 Python csv 모듈을 살펴보고 따옴표와 같은 지저분한 작업을 처리하십시오.
그게 너 일종의거야?
입력 형식은 무엇입니까? – Abhijit
입력은 단어 목록이있는 텍스트 파일입니다 (예 : 집, 잔디, 보트, 고양이 등). – user1992696