Example #1
0
 def test_fuzzy_match(self, text_pairs):
     thresholds = (0.5, 0.7, 0.9)
     for text1, text2 in text_pairs:
         sims = [
             similarity.jaccard(
                 text1.split(), text2.split(),
                 fuzzy_match=True, match_threshold=threshold
             )
             for threshold in thresholds
         ]
         assert sims[0] >= sims[1] >= sims[2]
Example #2
0
def test_jaccard_exception(text1, text2):
    with pytest.raises(ValueError):
        _ = similarity.jaccard(text1, text2, True)
                    print('{} {}  {}'.format(a, b, total))
                else:
                    hits_counter[a + '_' + b] += int(len(sentences))
                    #print('NOT {} {}  {}'.format(a,b,len(sentences)))
                data.set_value(row[0], 'd_type', NAME)
                data.set_value(row[0], 'count', int(total))
            except Exception as e:
                print(a, b, e)

selected_sentences = []

for sentence in all_sentences:
    max_sim = 0
    sentence_a = sentence['raw_text']
    for sentence_b in selected_sentences:
        sim = jaccard(sentence_a, sentence_b['raw_text'])
        if sim > max_sim:
            max_sim = sim
    if max_sim < 0.9:
        selected_sentences.append(sentence)

folder = '{}-{}'.format(time.strftime("%H-%M"), NAME)
if not os.path.exists(folder):
    os.makedirs(folder)

with open('{}/raw-sentences-{}.json'.format(folder, NAME), 'w') as f:
    try:
        json.dump(
            {
                'meta': {
                    'marker': markers,
Example #4
0
 def test_match_threshold_error(self, text_pairs):
     text1, text2 = text_pairs[0]
     for mt in (-1.0, 1.01, 50):
         with pytest.raises(ValueError):
             _ = similarity.jaccard(text1, text2, match_threshold=mt)
Example #5
0
 def test_fuzzy_match_error(self, text_pairs):
     for text1, text2 in text_pairs:
         with pytest.raises(ValueError):
             _ = similarity.jaccard(text1, text2, True)
Example #6
0
 def test_obj_types(self, text_pairs):
     for text1, text2 in text_pairs:
         _ = similarity.jaccard(text1, text2)
         _ = similarity.jaccard(text1.split(), text2.split())
Example #7
0
def extraccion_informacion(request):
    #o = u"Dr. José Barbosa, Rector Canciller UTPL, saluda a los estudiantes, docentes y administrativos por el Cuadragésimo Segundo Aniversario de fundación de la Universidad Técnica Particular de Loja."
    if request.method=="POST":
        text = request.POST['consulta']
        consulta_form = text

        #consulta = u'''Dr. José Barbosa, Rector Canciller UTPL, saluda a los estudiantes, docentes y administrativos por el Cuadragésimo Segundo Aniversario de fundación de la Universidad Técnica Particular de Loja. '''
        print(text)
        doc1 = nlp(text)

        # Listado de entidades reconocidas por la libreria
        lista_entidades = []
        for ent in doc1.ents:
            # print ent.text, ent.lemma_, ent.pos_, ent.is_stop, ent.is_punct
            print(ent.text, ent.start_char, ent.end_char, ent.label_)
            lista_entidades.append([ent.text, ent.start_char, ent.end_char, ent.label_])

        m_entidades = []
        conjunto_matriz_triples = []
        conjunto_matriz_triples2 = []
        for entidad in lista_entidades:
            print("Tabla")
            print(lista_entidades)
            print('Entidad: {0} --> tipo: {1}'.format(entidad[0],entidad[3]))

            consulta = '''SELECT * WHERE{
?uri rdfs:label ?label .
?uri foaf:name ?name .
?uri rdfs:comment ?comment .
                                
FILTER (?label = "%s"@es || ?label = "%s"@en || ?name="%s"@es || ?name="%s"@en)
FILTER (lang(?label) = 'es')
FILTER (lang(?comment) = 'es')
}
''' % (str(entidad[0]),str(entidad[0]), str(entidad[0]), str(entidad[0]))



            print consulta
            sparql.setQuery(consulta)
            # definition
            sparql.setReturnFormat(JSON)
            results = sparql.query().convert()
            # print(results)
            conjunto_triples = []
            conjunto_triples2 = []
            for result in results["results"]["bindings"]:
                # print(result)
                # EJEMPLO: [u'http://www.wikidata.org/entity/Q332989', u'ciudad', u'Loja', u'Loja']
                conjunto_triples.append([result["uri"]["value"], result["name"]["value"], result["label"]["value"], result["comment"]["value"],entidad[0]])
                conjunto_triples2.append(result["uri"]["value"])

            if results:
                m_entidades.append(entidad[0])
                conjunto_matriz_triples.append(conjunto_triples)
                conjunto_matriz_triples2.append(conjunto_triples2)

            #lista.append([entidad[0], conjunto_matriz_triples])

        print("Esta es la lista de datos")
        print(conjunto_matriz_triples)


        similitud = []
        maxima_similitud = []
        for entidad_triples in conjunto_matriz_triples:
            for triple in entidad_triples:

                print(triple)
                sim = jaccard(triple[1], text)
                print("Se compara: ")
                print(triple[1]+" -- " +text)
                print(sim)


                similitud.append([triple[0], triple[1], triple[2], sim])

            if similitud:
                similitud = sorted(similitud, key=itemgetter(3), reverse=True)

                maxima_similitud.append(similitud[0])
            else:
                maxima_similitud.append(None)
            similitud = []

        print(maxima_similitud)

        entidades = maxima_similitud

        # html
        cont = 0
        for entidad in lista_entidades:
            if entidades[cont] is not None:
                link = "<a href=" + entidades[cont][0] + ">" + lista_entidades[cont][0] + "</a>"
                mayor = lista_entidades[cont][2]
                menor = lista_entidades[cont][1]
                n = mayor - menor

                longuitud = len(link) - (n)
                # print(longuitud)

                text = text[:lista_entidades[cont][1]] + link + text[lista_entidades[cont][2]:]

                for triple in lista_entidades:
                    triple[1] = triple[1] + longuitud
                    triple[2] = triple[2] + longuitud

            cont = cont + 1

        print(text)

        lista = zip(m_entidades, conjunto_matriz_triples2)

        return render(request, 'anotador.html', {'texto':text, 'listado':maxima_similitud, 'lista':lista, 'consulta':consulta_form})
    listado = []
    consulta_form = "La Universidad Técnica Particular de Loja es una institución educativa del sur del Ecuador"
    texto = ""
    lista = []
    return render(request, 'anotador.html', {'texto':texto,'consulta':consulta_form,'listado':listado, 'lista':lista})
Example #8
0
 def overlap(row):
     headline = row['Headline'].split()
     body = row['articleBody'].split()
     if len(headline) == 0 and len(body) == 0:
         return 0
     return jaccard(headline, body)
Example #9
0
def test_jaccard_fuzzy_match_warning(text1, text2):
    thresh = 50
    with pytest.warns(UserWarning):
        _ = similarity.jaccard(text1.split(), text2.split(),
                               fuzzy_match=True, match_threshold=thresh)