2013-03-18 5 views
2

편집 거리/레벨 간 거리에 따라 ELKI를 사용하여 많은 수의 문자열을 클러스터링해야합니다. 데이터 세트가 너무 커서 파일 기반 사전 계산 된 거리 행렬을 피하고 싶습니다. 어떻게 할 수 있습니까?ELKI로 문자열 데이터 클러스터하기

(a) 파일에서 ELKI로 문자열 데이터를로드하십시오 ("레이블"만)?

(b)는 라벨에 액세스하는 거리 함수를 구현 (AbstractDBIDDistanceFunction을 확장,하지만 어떻게 레이블을 얻을?)

일부 코드 조각 또는 예를 들어, 입력 파일 도움이 될 것입니다.

답변

1

그것은 실제로 매우 간단합니다 :

이) 왜 라벨 수치 벡터 용으로 작성된 파서를 다시 사용하려고 (당신의 입력 파일 형식에 대한 적절한있는 Parser 쓰기), 아마 서브 클래스 AbstractStreamingParser 원하는 데이터 형식의 관계를 생성합니다 (아마도 String을 사용할 수 있습니다.) 조금 더 일반적인 경우 TokenSequence이이 거리에 더 적합한 개념 일 수 있습니다. 문자열은 단순한 경우 일 수 있습니다.

B)는 PrimitiveDistanceFunction<String> 대신 DBID 대신이 벡터 유형을 기반으로 DistanceFunction을 구현합니다. 다시 말하지만, AbstractPrimitiveDistanceFunction을 하위 클래스 화하는 것이 가장 쉬운 방법 일 수 있습니다.

성능상의 이유로 인덱싱 알고리즘을 살펴보고 예를 들어 k 가장 유사한 문자열. 나는 어떤 인덱스 구조가 스트링 편집 거리와 levenshtein 거리에 존재하는지 잘 모르겠다.

동료에게는 분명히 작동 토큰 편집 거리가있는 학생이 있지만 아직 코드를 보거나 리뷰하지 않았습니다. 로그 파일을 처리 할 때 그는 문자 대신 토큰 기반 접근 방식을 사용하고있을 것입니다.

+0

귀하의 신속하고 유용한 조언을 주셔서 감사합니다. 필자가 변경 한 것은 'AbstractStreamingParser' 서브 클래스로 String을 생성 할 때 [1]을 얻었 기 때문에'AbstractParser'와'AbstractStreamingParser' ('BitVectorLabelParser'와 같은) 대신'Parser'를 확장하는 것이 었습니다. 필요한 경우 인덱싱 알고리즘을 연구하겠습니다. [1] NoSupportedDataTypeException : 데이터 유형을 찾을 수 없습니다. 문자열 사용 가능한 유형 : DBID ... ' – Stahli

+0

[1]은 (는) 아마도'Event.META_CHANGED' 이벤트를 발생시키지 않았을 것입니다. 하지만 그 외의 경우, ELKI에 코드를 제공하여 다른 사람들도 ELKI를 사용할 수 있다고 생각하십니까? 나는 당신이 Levenshtein 거리와 현에 관심이있는 유일한 사람이 아니라고 확신합니다. –