Pregunta

El problema es el siguiente:

Tengo un resumen, normalmente de entre 20 y 50 palabras, que me gustaría comparar con otros resúmenes relativamente similares.Ya se conocen la categoría general y la ubicación geográfica a la que se refiere el resumen.

Por ejemplo, si personas de la misma zona escriben sobre la construcción de una casa, me gustaría poder enumerar esos resúmenes con cierto nivel de certeza de que en realidad se refieren a la construcción de casas en lugar de a la construcción de un garaje o una piscina en el patio trasero.

El conjunto de datos asciende actualmente a unos 50 000 documentos, con una tasa de crecimiento de unos 200 documentos por día.

Los lenguajes preferidos serían Python, PHP, C/C++, Haskell o Erlang, cualquiera que pueda hacer el trabajo.Además, si no le importa, me gustaría entender el motivo para elegir un idioma específico.

¿Fue útil?

Solución

Se puede echar un vistazo a la WEBSOM proyecto .

A pesar de que su sitio web no ha sido actualizada exactamente este año, el problema a resolver es muy similar. A medida que se estaban procesando cantidades de datos similares a los suyos (y más) que fue hace 10 años, hoy en día que probablemente se podría ejecutar los algoritmos casi en un teléfono celular.

Otros consejos

Puede intentar utilizar algunas medidas de similitud de cadenas, como Jaccard y los dados, pero en lugar de calcular carácter solapa, que se superpone el cálculo de la palabra. Por ejemplo, el uso de Python, puede utilizar lo siguiente:

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

Dado que no es un buen soporte nativo para los conjuntos de pitón, podemos modificar código de JGS como,

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

Realmente no hay un idioma en particular para elegir.Estás intentando encontrar similitudes semánticas.Ésta es un área muy grande.Quizás te interese este artículo:

Medidas de similitud semántica de texto basadas en corpus y basadas en conocimiento

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top