Question

Le problème est le suivant:

J'ai un résumé, généralement entre 20 à 50 mots, que je voudrais comparer à d'autres résumés relativement similaires. La catégorie générale et la situation géographique à laquelle le résumé fait allusion sont déjà connus.

Par exemple, si les gens de la même région sont en train d'écrire sur la construction d'une maison, je voudrais être en mesure de dresser la liste des résumés avec un certain niveau de certitude qu'ils se réfèrent en fait à la construction de maisons au lieu de construire un garage ou une arrière-cour piscine.

L'ensemble de données est actuellement d'environ 50 000 documents avec un taux de croissance de quelque 200 documents par jour.

Langues préférées seraient Python, PHP, C / C ++, Haskell ou Erlang, selon pourrait faire le travail. De plus, si cela ne vous dérange pas, je voudrais comprendre le raisonnement pour choisir une langue spécifique.

Était-ce utile?

La solution

Vous pouvez consulter le WEBSOM projet .

Bien que leur site n'a pas été mis à jour exactement cette année, le problème étant résolu est très similaire. Comme ils traitaient quantités de données semblables à la vôtre (et plus), comme il y a 10 ans, aujourd'hui, vous pourriez probablement exécuter les algorithmes presque sur un téléphone cellulaire.

Autres conseils

Vous pouvez essayer d'utiliser des mesures de similarité de chaîne, tels que Jaccard et dés, mais au lieu de calculer le caractère chevauche, vous calculez mot recouvre. Par exemple, en utilisant Python, vous pouvez utiliser les éléments suivants:

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

Comme il y a un support natif pour bien des ensembles en python, nous pouvons modifier Code JGS comme,

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

Il n'y a pas vraiment une langue particulière pour choisir. Vous essayez de trouver la similarité sémantique. Ceci est une très grande surface. Vous pourriez être intéressé par cet article:

Corpus-base et des mesures fondées sur la connaissance du texte sémantique similarité

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top