jaro 거리에 의해 주어진 유사성을 기반으로 문자열 그룹을 클러스터하려고합니다. 파이썬에서 JellyFish로 계산하고 있습니다. 나는 데이터를 클러스터하는 방법을 알아 내려고 애 쓰고있다. 나는 클러스터링에 대한 전문가가 아니며, 이것이 어떻게하는지를 파악하려는 나의 첫 번째 시도이다.문자열 클러스터링 알고리즘 - 지침
이- 다음의 경우 첫 번째 클러스터
- 의 cnetroid 첫 번째 문자열을 확인 : 현재 나는이 같은 나의 이해하기 위해 노력 분할의 싱글 패스 방식의 방법을 근사 믿는 뭔가를 작성했습니다 문자열은 Jaro Distance를 사용하여 그 중심과 유사성을 계산합니다.
- 가 다음 클러스터에 문자열을 추가 충분히 유사한 경우에는 문자열이 내가 어떤 힌트를 싶습니다
을 평가하기 위해 남아 있지 않을 때까지 다른
코드에 대한 몇 가지주의 사항. 1. 시작 지점이 임의이므로 임의로 목록을 임의로 뒤집습니다. 2. 일치 항목 점수가 이전 일치 항목보다 높으면 무게 중심을 업데이트합니다. 이는 클러스터의 첫 번째 문자열에 대해서는 임의적이지만 시도는 시도합니다 클러스터 중심으로 '진정한'문자열을 찾으십시오. 어떤 지침을 사전에
감사
def SLINK(SList):
shuffle(SList)
Clusters = []
Centroid = []
Scores = []
for string in SList:
Matched = 0
if len(Clusters) == 0:
Clusters.append([string])
Centroid.append([string])
Scores.append([])
continue
for ClustNum in xrange(len(Clusters)):
Dist = jf.jaro_distance(string, Centroid[ClustNum][0])
if Dist > 0.8:
Clusters[ClustNum].append(string)
if len(Scores[ClustNum]) == 0:
Scores[ClustNum].append(Dist)
else:
if Dist > Scores[ClustNum]:
Scores[ClustNum][0] = Dist
Centroid[ClustNum][0] = string
Matched = 1
break
if Matched ==0:
Clusters.append([string])
Centroid.append([string])
Scores.append([])
return Clusters
기존 코드에 문제가 있습니까? 그렇다면 자세히 설명해 주시겠습니까? –
사실 그것은 잘 작동하는 것 같습니다! 나는 단지 내가 문제에 접근하고 있음을 보여주기 위해 신속한 토론에 게시했습니다. 나는 무엇이든 방법 충고를 찾고 있었다고 생각한다. –
[코드 검토 스택 교환] (http://codereview.stackexchange.com/)에 관심이있을 수 있습니다.이 코드는 일반적으로 작동하는 코드에 적합하며 일반적인 피드백에 관심이 있습니다. –