all the project copy
This commit is contained in:
64
api/phrase_similarity.py
Normal file
64
api/phrase_similarity.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
|
||||
ROOT_DIR = Path(__file__).resolve().parents[1]
|
||||
CONN_DIR = ROOT_DIR / "conn"
|
||||
if str(CONN_DIR) not in sys.path:
|
||||
sys.path.insert(0, str(CONN_DIR))
|
||||
|
||||
import mysql5
|
||||
|
||||
|
||||
def _legacy_start_guessing_manual(ticket):
|
||||
try:
|
||||
from sklearn.feature_extraction.text import TfidfVectorizer
|
||||
from sklearn.metrics.pairwise import cosine_similarity
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return []
|
||||
|
||||
competence_origin, product_origin, problem_origin, area_origin, subarea_origin = mysql5.getCompetenceOrProdotto(ticket)
|
||||
w_list = mysql5.getProblemaBYCompetenzaOrProgramma_manul(competence_origin, product_origin, area_origin, subarea_origin)
|
||||
|
||||
if len(w_list) == 0:
|
||||
return []
|
||||
|
||||
phrases = [item[0] for item in w_list]
|
||||
vectorizer = TfidfVectorizer(analyzer="char_wb", ngram_range=(3, 5), lowercase=True)
|
||||
tfidf_matrix = vectorizer.fit_transform([problem_origin] + phrases)
|
||||
similarity_matrix = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:])
|
||||
|
||||
# Keep the real top five. The old code used [-6:-1], which skipped the best result.
|
||||
best_matches_indices = similarity_matrix.argsort()[0][-5:][::-1]
|
||||
|
||||
final_list = []
|
||||
for i, index in enumerate(best_matches_indices, start=1):
|
||||
complete_ticket = mysql5.getTicketByProblema(str(phrases[index]))
|
||||
solution = str(complete_ticket[1])
|
||||
if len(solution) > 400:
|
||||
solution = solution[:400] + "..."
|
||||
|
||||
final_list.append(
|
||||
f"\n\n----- {i}. Metodo legacy -----\n"
|
||||
f"[ /Ticket_dettaglio_{complete_ticket[0]} ]\n"
|
||||
f"https://tsnew.sanmarcoweb.com/it/ticket/index/index/operation/view/id/{complete_ticket[0]}\n"
|
||||
f"SOLUZIONE: {solution}\n"
|
||||
)
|
||||
return final_list
|
||||
|
||||
|
||||
def start_guessing_manual(ticket, user_id=None, filters=None, limit=None, offset=0):
|
||||
try:
|
||||
import ai_retriever
|
||||
|
||||
kwargs = {"user_id": user_id, "filters": filters, "offset": offset}
|
||||
if limit is not None:
|
||||
kwargs["limit"] = limit
|
||||
return ai_retriever.start_guessing_manual(ticket, **kwargs)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
if filters:
|
||||
return []
|
||||
return _legacy_start_guessing_manual(ticket)
|
||||
Reference in New Issue
Block a user