2009-03-22 13 views
0

둘 이상의 요약이 유사한 지 판단

하나의 요약본은 일반적으로 20-50 단어 사이로 비교적 비슷한 다른 요약본과 비교하고 싶습니다. 요약이 참조하는 일반 범주 및 지리적 위치는 이미 알려져 있습니다.

예를 들어, 같은 지역의 사람들이 집을 짓는 것에 대해 글을 쓰고 있다면, 나는 그 집들이 실제로 차고를 짓지 않고 집을 짓는 것을 어느 정도 확신 할 수있는 수준으로 나열 할 수 있기를 바랍니다. 뒷마당 수영장.

데이터 세트는 현재 약 50,000 개의 문서이며 하루에 약 200 개의 문서 증가율을 나타냅니다.

선호하는 언어는 파이썬, PHP, C/C++, 하스켈 또는 얼랭 중 어느 것이 든 완료 될 수 있습니다. 또한, 괜찮 으면 특정 언어를 선택하는 이유를 이해하고 싶습니다.

답변

2

WEBSOM project을 살펴볼 수 있습니다.

올해 웹 사이트가 정확하게 업데이트되지는 않았지만 해결되는 문제는 매우 유사합니다. 10 년 전과 마찬가지로 데이터 양을 처리하면서 (또는 그 이상), 오늘날 휴대폰에서 거의 알고리즘을 실행할 수 있습니다.

+0

당신은 아마 짐작으로 내 데이터를 예를 들어, 파이썬을 사용하여 다음과 같은 사용할 수 있습니다 핀란드어로되어 있기 때문에 매우 적합합니다. 나는 내일 이것을 파헤쳐 야 할 것이다. –

1

실제로 특정 언어를 선택할 필요가 없습니다. 의미 론적 유사성을 찾으려고합니다. 이것은 아주 큰 영역입니다. 이 논문에 관심이있을 수 있습니다

Corpus-based and Knowledge-based Measures of Text Semantic Similarity

+0

그래, 나는 의미 론적 접근법을 피하려고 노력했다. 핀란드어에서 관련된 용어를 찾는 것이 내가 해결할 준비가되지 않은 문제이기 때문이다. –

4

당신은 인 Jaccard와 주사위와 같은 일부 문자열 유사성 조치를 사용하려고 할 수 있지만, 대신에 문자가 중복 계산, 당신은 단어가 중복 계산합니다. 파이썬에서 세트에 대한 기본 좋은 지원이 있기 때문에

def word_overlap(a, b): 
    return [x for x in a if x in b] 


def jaccard(a, b, overlap_fn=word_overlap): 
    """ 
    Jaccard coefficient (/\ represents intersection), given by : 
     Jaccard(A, B) = (A /\ B)/(|a|) + (|b|) - (A /\ B) 
    """ 
    c = overlap_fn(a, b) 
    return float(len(c))/(len(a) + len(b) - len(c)) 

jaccard("Selling a beautiful house in California".split(), "Buying a beautiful crip in California".split()) 
4

, 우리가 JGs code을 수정할 수

def jaccard(a, b): 
    """ 
    Jaccard coefficient (/\ represents intersection), given by : 
     Jaccard(A, B) = (A /\ B)/(|a|) + (|b|) - (A /\ B) 
    """ 
    c = a.intersection(b) 
    return float(len(c))/(len(a) + len(b) - len(c)) 

jaccard(set("Selling a beautiful house in California"), set("Buying a beautiful crip in California")) 
+0

이것은 JG 버전과 같지 않습니다. 그는 일련의 단어에 대해 Jaccard를 계산하고 있으며 일련의 문자를 통해이를 수행하고 있습니다. 함수를 더 단순화 할 수 있습니다. float (len (a & b))/len (a | b) 만 반환하면됩니다. 주석의 수식이 잘못되었습니다 (괄호가 잘못되었습니다). –

+0

호아킨, 참으로 나는 고쳐졌다. 그 점을 지적 해 주셔서 감사합니다. – Chantz