File size: 1,827 Bytes
33203e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import re
import unicodedata
import pandas as pd


def limpar_texto(texto):
    if pd.isna(texto):
        return ""

    texto = str(texto).lower().strip()
    texto = unicodedata.normalize("NFKD", texto)
    texto = "".join(c for c in texto if not unicodedata.combining(c))

    texto = re.sub(r"[\n\r\t]", " ", texto)
    texto = re.sub(r"[^a-z0-9\s]", " ", texto)
    texto = re.sub(r"\s+", " ", texto).strip()

    return texto


def mapear_categoria(cat):
    cat = limpar_texto(cat)

    if "acai" in cat:
        return "acai"
    if "pastel" in cat or "pastel de pizza" in cat:
        return "pastel"
    if "pizza" in cat:
        return "pizza"
    if "hamburg" in cat or "burger" in cat:
        return "hamburguer"
    if "sushi" in cat or "japones" in cat or "oriental" in cat:
        return "japones"
    if "suco" in cat:
        return "suco"
    if "bebida" in cat or "refrigerante" in cat or "refri" in cat:
        return "bebida"

    return cat


def inferir_categoria_consulta(query):
    q = limpar_texto(query)

    if "acai" in q:
        return "acai"
    if "pastel" in q or "pastel de pizza" in q:
        return "pastel"
    if "pizza" in q:
        return "pizza"
    if "hamburguer" in q or "burger" in q or "x bacon" in q:
        return "hamburguer"
    if "sushi" in q or "temaki" in q:
        return "japones"
    if "suco" in q:
        return "suco"
    if "coca" in q or "refrigerante" in q or "refri" in q:
        return "bebida"

    return None


def bonus_lexical(query, *texts):
    q = limpar_texto(query)
    referencias = [limpar_texto(texto) for texto in texts if texto]

    bonus = 0.0

    for termo in q.split():
        if any(termo in referencia for referencia in referencias):
            bonus += 0.03

    return bonus