문제

문제는 다음과 같습니다.

보통 20 ~ 50 단어 사이의 요약이 다른 비교적 유사한 요약과 비교하고 싶습니다. 일반 범주와 요약이 지칭하는 지리적 위치는 이미 알려져 있습니다.

예를 들어, 같은 지역의 사람들이 집을 짓는 것에 관해 글을 쓰고 있다면, 나는 차고 나 뒤뜰 수영장을 짓지 않고 실제로 집을 짓는 것을 언급한다는 확실성으로 그 요약을 어느 정도 확실하게 나열하고 싶습니다.

데이터 세트는 현재 하루에 약 200 개의 문서의 성장률을 가진 약 50,000 개의 문서입니다.

선호하는 언어는 Python, PHP, C/C ++, Haskell 또는 Erlang이므로 작업을 수행 할 수 있습니다. 또한 마음에 들지 않으면 특정 언어를 선택한 추론을 이해하고 싶습니다.

도움이 되었습니까?

해결책

당신은 그것을 볼 수 있습니다 Webom Project.

올해 웹 사이트가 정확히 업데이트되지 않았지만 해결되는 문제는 매우 유사합니다. 그들이 10 년 전과 같이 귀하와 유사한 양의 데이터를 처리하고 있기 때문에 오늘날에는 거의 휴대 전화로 알고리즘을 실행할 수 있습니다.

다른 팁

Jaccard 및 Dice와 같은 일부 문자열 유사성 측정 값을 사용하려고 시도 할 수 있지만 문자 중첩을 계산하는 대신 단어 중첩을 계산합니다. 예를 들어, 파이썬을 사용하면 다음을 사용할 수 있습니다.

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())

파이썬에 세트에 대한 기본적인 지원이 있으므로 수정할 수 있습니다. JGS 코드 처럼,

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"))

실제로 선택할 특정 언어는 없습니다. 시맨틱 유사성을 찾으려고 노력하고 있습니다. 이것은 매우 넓은 지역입니다. 이 백서에 관심이있을 수 있습니다.

텍스트 시맨틱 유사성의 코퍼스 기반 및 지식 기반 측정

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top