Определение, если два или более резюме похожи - PullRequest
0 голосов
/ 22 марта 2009

Проблема заключается в следующем:

У меня есть одно резюме, обычно от 20 до 50 слов, которое я хотел бы сравнить с другими относительно похожими резюме. Общая категория и географическое положение, к которому относится резюме, уже известны.

Например, если люди из того же района пишут о строительстве дома, я хотел бы иметь возможность перечислить эти резюме с некоторой степенью уверенности, что они на самом деле относятся к строительству домов вместо строительства гаража или заднего двора. бассейн.

В настоящее время набор данных составляет около 50 000 документов с темпом роста около 200 документов в день.

Предпочтительными языками могут быть Python, PHP, C / C ++, Haskell или Erlang, в зависимости от того, что может быть выполнено. Также, если вы не возражаете, я бы хотел понять причины выбора определенного языка.

Ответы [ 4 ]

4 голосов
/ 11 сентября 2009

Поскольку в python есть встроенная хорошая поддержка множеств, мы можем изменить код JGs as,

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"))
4 голосов
/ 19 июля 2009

Вы можете попытаться использовать некоторые меры сходства строк, такие как Jaccard и Dice, но вместо вычисления совпадений символов, вы вычисляете совпадения слов. Например, используя Python, вы можете использовать следующее:

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())
2 голосов
/ 22 марта 2009

Вы можете взглянуть на проект WEBSOM .

Хотя их веб-сайт не обновлялся ровно в этом году, решаемая проблема очень похожа. Поскольку они обрабатывали объемы данных, аналогичные вашим (и другим), как 10 лет назад, сегодня вы, вероятно, можете запускать алгоритмы почти на мобильном телефоне.

1 голос
/ 22 марта 2009

Нет особого языка для выбора. Вы пытаетесь найти семантическое сходство. Это очень большая площадь. Вас может заинтересовать этот документ:

Меры семантического сходства текста, основанные на знаниях и знаниях

...