14/04/22 - 16h30
parent
16d54640c1
commit
699bf5f3f9
92
Ela_Spacy.py
92
Ela_Spacy.py
|
@ -458,3 +458,95 @@ def test_ela_myntlk():
|
||||||
my_file.close()
|
my_file.close()
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def ela_index_article_avis_record_field(lines, article_avis_id, source_field = ""):
|
||||||
|
|
||||||
|
try:
|
||||||
|
'''
|
||||||
|
## Suppression de toutes les indexation qui existe de cette formation
|
||||||
|
'''
|
||||||
|
client = MongoClient(CONNECTION_STRING)
|
||||||
|
dbname = client['cherifdb']
|
||||||
|
coll_name = dbname['elaindex_article_avis']
|
||||||
|
|
||||||
|
# check default value of parameter : source_field
|
||||||
|
if len(str(source_field)) == 0 :
|
||||||
|
source_field = 'default'
|
||||||
|
|
||||||
|
myquery = {"id_articles_avis": article_avis_id, "source_field":source_field}
|
||||||
|
delete_row = coll_name.delete_many(myquery)
|
||||||
|
mycommon.myprint(" elaindex Article AVIS : - "+str(delete_row.deleted_count)+" documents deleted. Article_Avis ==> "+str(article_avis_id)+" ")
|
||||||
|
|
||||||
|
'''
|
||||||
|
Ajout des indexe
|
||||||
|
'''
|
||||||
|
tab_tokens = Ela_Tokenize(lines)
|
||||||
|
tab_tokens2 = Ela_remove_stop_words(tab_tokens)
|
||||||
|
tab_tokens3 = Ela_remove_pronoun(tab_tokens2)
|
||||||
|
tab_tokens4 = Ela_stemmize(tab_tokens3)
|
||||||
|
|
||||||
|
tab_tokens4 = Ela_Remove_Noise_from_list(tab_tokens4)
|
||||||
|
tab_tokens4 = Ela_remove_ponct(tab_tokens4)
|
||||||
|
|
||||||
|
# Enregistrement dans la base mongodb
|
||||||
|
|
||||||
|
Ela_article_avis_list_to_mongo(tab_tokens4, article_avis_id, source_field)
|
||||||
|
|
||||||
|
size_tab = len(tab_tokens4)
|
||||||
|
|
||||||
|
occurrences = Counter(tab_tokens4)
|
||||||
|
most_common = occurrences.most_common()
|
||||||
|
print(most_common)
|
||||||
|
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def Ela_article_avis_list_to_mongo(tab_tokens, traning_id, source_field):
|
||||||
|
try:
|
||||||
|
# clear / truncate elaindex
|
||||||
|
#db.elaindex.remove({})
|
||||||
|
|
||||||
|
# Recherche des occurence d'une valeur
|
||||||
|
my_file = open("ela_output_article_file_pandas_2.txt", "w")
|
||||||
|
size_tab = len(tab_tokens)
|
||||||
|
|
||||||
|
occurrences = Counter(tab_tokens)
|
||||||
|
|
||||||
|
# insert the list to the set
|
||||||
|
list_set = set(tab_tokens)
|
||||||
|
# convert the set to the list
|
||||||
|
unique_list = (list(list_set))
|
||||||
|
|
||||||
|
final_lists = []
|
||||||
|
for tmp in unique_list:
|
||||||
|
moyenne = round(int(occurrences[str(tmp)]) / size_tab, 2)
|
||||||
|
final_lists.append([str(tmp), int(str(occurrences[str(tmp)])), str(moyenne), str(traning_id), str(source_field)])
|
||||||
|
|
||||||
|
print(final_lists)
|
||||||
|
data = pd.DataFrame(final_lists, columns=('mots', "occurence", 'moyenne', 'id_article_avis', 'source_field'))
|
||||||
|
my_file.write(str(data))
|
||||||
|
my_file.close()
|
||||||
|
|
||||||
|
# Making a Connection with MongoClient
|
||||||
|
client = MongoClient("mongodb://localhost:27017/")
|
||||||
|
# database
|
||||||
|
db = client["cherifdb"]
|
||||||
|
# collection
|
||||||
|
collection = db["elaindex_article_avis"]
|
||||||
|
|
||||||
|
data.reset_index(inplace=True)
|
||||||
|
data_dict = data.to_dict("records")
|
||||||
|
|
||||||
|
# Insert collection
|
||||||
|
collection.insert_many(data_dict)
|
||||||
|
data.to_csv("data_indexees_article_avis.csv")
|
||||||
|
|
||||||
|
return True
|
||||||
|
except Exception as e :
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
252
articles_avis.py
252
articles_avis.py
|
@ -280,7 +280,6 @@ def add_articles_avis(diction):
|
||||||
|
|
||||||
my_user_recid = user_recid
|
my_user_recid = user_recid
|
||||||
|
|
||||||
print(" ########### RECID = "+user_recid)
|
|
||||||
|
|
||||||
mydata['user_recid'] = my_user_recid
|
mydata['user_recid'] = my_user_recid
|
||||||
mydata['token'] = my_token
|
mydata['token'] = my_token
|
||||||
|
@ -373,4 +372,253 @@ def add_articles_avis(diction):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
return False, " Impossible de créer l'article/avis"
|
return False, " Impossible de créer l'article/avis"
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Cette fonction recherche un aricles ou avis
|
||||||
|
'''
|
||||||
|
def recherche_articles_avis(diction):
|
||||||
|
try:
|
||||||
|
|
||||||
|
'''
|
||||||
|
# Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
|
||||||
|
# Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
|
||||||
|
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
|
||||||
|
# field_list.
|
||||||
|
'''
|
||||||
|
field_list = ['token', 'user_ip', 'user_country_code', 'user_country_name', 'user_city',
|
||||||
|
'user_postal', 'user_latitude', 'user_longitude', 'user_state', 'search_text']
|
||||||
|
incom_keys = diction.keys()
|
||||||
|
for val in incom_keys:
|
||||||
|
if val not in field_list:
|
||||||
|
mycommon.myprint(
|
||||||
|
str(inspect.stack()[0][3]) + " - : Le champ '" + val + "' n'existe pas, recherche annuléee")
|
||||||
|
return False, " Le champ '" + val + "' n'existe pas, recherche annulée"
|
||||||
|
|
||||||
|
'''
|
||||||
|
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
|
||||||
|
On controle que les champs obligatoires sont presents dans la liste
|
||||||
|
'''
|
||||||
|
field_list_obligatoire = ['search_text', 'token']
|
||||||
|
|
||||||
|
for val in field_list_obligatoire:
|
||||||
|
if val not in diction:
|
||||||
|
mycommon.myprint(
|
||||||
|
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
|
||||||
|
return False, " : La valeur '" + val + "' n'est pas presente dans liste "
|
||||||
|
|
||||||
|
# recuperation des paramettre
|
||||||
|
search_text = ""
|
||||||
|
user_recid = ""
|
||||||
|
token = ""
|
||||||
|
if ("search_text" in diction.keys()):
|
||||||
|
if diction['search_text']:
|
||||||
|
search_text = diction['search_text']
|
||||||
|
|
||||||
|
|
||||||
|
if ("token" in diction.keys()):
|
||||||
|
if diction['token']:
|
||||||
|
token = diction['token']
|
||||||
|
|
||||||
|
# Verification de la validité du token/mail dans le cas des user en mode connecté
|
||||||
|
if (len(str(token)) > 0):
|
||||||
|
retval = mycommon.check_token_validity("", token)
|
||||||
|
|
||||||
|
if retval is False:
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
|
||||||
|
return False, "Le token n'est pas valide"
|
||||||
|
|
||||||
|
# Recuperation du recid de l'utilisateur
|
||||||
|
user_recid = mycommon.get_user_recid_from_token(token)
|
||||||
|
if user_recid is False:
|
||||||
|
mycommon.myprint(
|
||||||
|
str(inspect.stack()[0][3]) + " - Impossible de recuperer le token de l'utilisateur")
|
||||||
|
return False, " Impossible de desactiver l'objectif utilisateur"
|
||||||
|
|
||||||
|
mycommon.myprint(" On recehrche la phrase +'" + search_text + "' + user_recid = " + user_recid)
|
||||||
|
# Enregistrerment de la recherche
|
||||||
|
retval, message, store_recherche_Id = store_recherche_article_avis(diction, user_recid)
|
||||||
|
if (retval is False):
|
||||||
|
return retval, message
|
||||||
|
|
||||||
|
tab_training = []
|
||||||
|
tab_training = ela_index.ela_recherche_article_avis_tokens(search_text)
|
||||||
|
mycommon.myprint(" pour phrase : #" + search_text + "#, voici la liste des formations")
|
||||||
|
mycommon.myprint(tab_training)
|
||||||
|
|
||||||
|
coll_name = dbname['articles_avis']
|
||||||
|
|
||||||
|
'''
|
||||||
|
la valeur nb_result permettra de savoir si la requete a donnée un resultat.
|
||||||
|
si ce n'est pas le cas, il faudra à la fin enregistrer la requete avec un result a vide'''
|
||||||
|
nb_result = 0
|
||||||
|
insertObject = []
|
||||||
|
|
||||||
|
for val in tab_training:
|
||||||
|
|
||||||
|
for x in coll_name.find({"title_formation": str(val)},
|
||||||
|
{"_id": 0, "indexed": 0, "valide": 0, "locked": 0, }):
|
||||||
|
nb_result = nb_result + 1
|
||||||
|
my_recid = {}
|
||||||
|
my_recid['user_rec_id'] = str(user_recid)
|
||||||
|
mydict_combined = {**diction, **x, **my_recid}
|
||||||
|
mydict_combined['date_update'] = str(datetime.now())
|
||||||
|
mydict_combined['type_view'] = "summary"
|
||||||
|
|
||||||
|
if ("_id" in mydict_combined.keys()):
|
||||||
|
mydict_combined['class_id'] = mydict_combined.pop('_id')
|
||||||
|
|
||||||
|
user = x
|
||||||
|
|
||||||
|
|
||||||
|
val = x['qualite']
|
||||||
|
if (len(x['qualite']) > MAX_CARACT):
|
||||||
|
x['qualite'] = val[:MAX_CARACT] + " ..."
|
||||||
|
|
||||||
|
else:
|
||||||
|
x['qualite'] = val[:MAX_CARACT]
|
||||||
|
|
||||||
|
val = x['avis']
|
||||||
|
if (len(x['avis']) > MAX_CARACT):
|
||||||
|
x['avis'] = val[:MAX_CARACT] + " ..."
|
||||||
|
|
||||||
|
else:
|
||||||
|
x['avis'] = val[:MAX_CARACT]
|
||||||
|
|
||||||
|
|
||||||
|
insertObject.append(JSONEncoder().encode(user))
|
||||||
|
|
||||||
|
return True, insertObject
|
||||||
|
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False, " Impossible de recherche un article/avis"
|
||||||
|
|
||||||
|
'''
|
||||||
|
Stockage des recherches sur les avis
|
||||||
|
'''
|
||||||
|
def store_recherche_article_avis(diction, user_recid=""):
|
||||||
|
try:
|
||||||
|
'''
|
||||||
|
# Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
|
||||||
|
# Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
|
||||||
|
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
|
||||||
|
# field_list.
|
||||||
|
'''
|
||||||
|
|
||||||
|
if ( len(str(user_recid)) <= 0 ):
|
||||||
|
user_recid = 'None' # by default
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
field_list = ['token', 'user_ip', 'user_country_code', 'user_country_name', 'user_city',
|
||||||
|
'user_postal', 'user_latitude', 'user_longitude', 'user_state', 'search_text', 'certif',
|
||||||
|
'support', 'type', 'lang', 'price', 'distance', 'duration']
|
||||||
|
incom_keys = diction.keys()
|
||||||
|
for val in incom_keys:
|
||||||
|
if val not in field_list:
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas, recherche annulée")
|
||||||
|
return False, " Le champ '" + val + "' n'existe pas, recherche annulée", None
|
||||||
|
|
||||||
|
'''
|
||||||
|
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
|
||||||
|
On controle que les champs obligatoires sont presents dans la liste
|
||||||
|
'''
|
||||||
|
field_list_obligatoire = ['search_text', 'token']
|
||||||
|
|
||||||
|
for val in field_list_obligatoire:
|
||||||
|
if val not in diction:
|
||||||
|
mycommon.myprint(" : La valeur '" + val + "' n'est pas presente dans liste ")
|
||||||
|
return False, " : La valeur '" + val + "' n'est pas presente dans liste ", None
|
||||||
|
|
||||||
|
|
||||||
|
# recuperation des paramettre
|
||||||
|
mydata = {}
|
||||||
|
mydata_id = ""
|
||||||
|
my_token = ""
|
||||||
|
|
||||||
|
if ("search_text" in diction.keys()):
|
||||||
|
if diction['search_text']:
|
||||||
|
mydata['search_text'] = diction['search_text']
|
||||||
|
|
||||||
|
|
||||||
|
if ("user_mail" in diction.keys()):
|
||||||
|
if diction['user_recid']:
|
||||||
|
mydata['user_recid'] = diction['user_recid']
|
||||||
|
|
||||||
|
if ("token" in diction.keys()):
|
||||||
|
if diction['token']:
|
||||||
|
my_token = diction['token']
|
||||||
|
|
||||||
|
'''# Recuperation du recid de l'utilisateur
|
||||||
|
user_recid = mycommon.get_user_recid_from_token(my_token)
|
||||||
|
if user_recid is False:
|
||||||
|
mycommon.myprint(" Impossible d'enregistrer la recherche de utilisateur")
|
||||||
|
return False, " Impossible d'enregistrer la recherche de utilisateur"
|
||||||
|
'''
|
||||||
|
mydata['user_recid'] = user_recid
|
||||||
|
mydata['document_recherche'] = "articles_avis"
|
||||||
|
|
||||||
|
if ("source" in diction.keys()):
|
||||||
|
if diction['source']:
|
||||||
|
mydata['source'] = diction['source']
|
||||||
|
|
||||||
|
if ("name" in diction.keys()):
|
||||||
|
if diction['name']:
|
||||||
|
mydata['name'] = diction['name']
|
||||||
|
|
||||||
|
|
||||||
|
if ("id" in diction.keys()):
|
||||||
|
if diction['id']:
|
||||||
|
mydata_id = diction['id']
|
||||||
|
|
||||||
|
mydata['date_update'] = str(datetime.now())
|
||||||
|
|
||||||
|
mydata['valide'] = "1" # By default
|
||||||
|
if ("valide" in diction.keys()):
|
||||||
|
if diction['valide']:
|
||||||
|
mydata['valide'] = diction['valide']
|
||||||
|
|
||||||
|
|
||||||
|
coll_name = dbname['user_recherche']
|
||||||
|
|
||||||
|
# Si le champ "id" est renseigné, il s'agit d'une mis jour
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " on va stocker "+str(mydata)+" id = "+str(mydata_id))
|
||||||
|
|
||||||
|
if( len(str(mydata_id)) > 0 ):
|
||||||
|
ret_val = coll_name.find_one_and_update({'_id': ObjectId(str(mydata_id)), 'valide': '1'},
|
||||||
|
{"$set": mydata},
|
||||||
|
return_document=ReturnDocument.AFTER
|
||||||
|
)
|
||||||
|
|
||||||
|
if (ret_val and ret_val['_id']):
|
||||||
|
nb_doc = str(ret_val['_id'])
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " La recherche a bien été mise à jour . Le Doc Id = "+str(nb_doc))
|
||||||
|
return True, "La recherche a bien été mise à jour", ret_val['_id']
|
||||||
|
|
||||||
|
else:
|
||||||
|
return False, "Impossible de mettre à jour a la recherche", None
|
||||||
|
|
||||||
|
else:
|
||||||
|
ret_val = coll_name.insert_one(mydata)
|
||||||
|
|
||||||
|
if ret_val and ret_val.inserted_id:
|
||||||
|
nb_doc = ret_val.inserted_id
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " La recherche a été bien enregistrée. Id = '" + str(nb_doc)+"' ")
|
||||||
|
return True, "La recherche a bien été mise à jour", nb_doc
|
||||||
|
else:
|
||||||
|
mycommon.myprint(
|
||||||
|
str(inspect.stack()[0][3]) + "Impossible d'enregistrer la recherche")
|
||||||
|
return False, "Impossible d'enregistrer la recherche ", None
|
||||||
|
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False, "Impossible d'enregistrer la recherche", None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
,index,mots,occurence,moyenne,id_formation,source_field
|
,index,mots,occurence,moyenne,id_formation,source_field
|
||||||
0,0,mot,2,0.33,AUTO_CH03,default
|
0,0,formation4,0,0.0,formation4,default
|
||||||
1,1,recherch,4,0.67,AUTO_CH03,default
|
|
||||||
|
|
|
|
@ -168,7 +168,6 @@ def ela_index_class(external_code="", source_field = ""):
|
||||||
La fonction "ela_index_all_classes" va aller chercher chaque cours dans la BDD
|
La fonction "ela_index_all_classes" va aller chercher chaque cours dans la BDD
|
||||||
et créer les mots clées qui sont ensuite enregister dans la table "elaindex"
|
et créer les mots clées qui sont ensuite enregister dans la table "elaindex"
|
||||||
'''
|
'''
|
||||||
|
|
||||||
def ela_index_all_classes():
|
def ela_index_all_classes():
|
||||||
# Making a Connection with MongoClient
|
# Making a Connection with MongoClient
|
||||||
try:
|
try:
|
||||||
|
@ -531,3 +530,153 @@ def ela_recherche_tokens_source_field(sentence, source_fied=""):
|
||||||
|
|
||||||
return tab_training_id
|
return tab_training_id
|
||||||
|
|
||||||
|
''''
|
||||||
|
Cette fonction indexe les articles et avis.
|
||||||
|
important : se ra indexé que le titre de la formation.
|
||||||
|
apres avoir été indexés la champs "indexed" passe à 1
|
||||||
|
'''
|
||||||
|
def ela_index_all_articles_avis():
|
||||||
|
# Making a Connection with MongoClient
|
||||||
|
try:
|
||||||
|
# collection
|
||||||
|
collection = db["articles_avis"]
|
||||||
|
nb_class_indexed = 0
|
||||||
|
for doc in collection.find({'indexed': '0'}):
|
||||||
|
if ("title_formation" in doc.keys()):
|
||||||
|
chaine = doc["title_formation"]
|
||||||
|
mycommon.myprint(" Debut indexation de l'article : "+chaine)
|
||||||
|
retval = ela_index_articles_avis(str(doc["title_formation"]))
|
||||||
|
print(" apres : ela_index_class retval = " + str(retval))
|
||||||
|
|
||||||
|
if (retval is False):
|
||||||
|
mycommon.myprint("IMPOSSIBLE d'indexer la formation = " + str(doc["external_code"]))
|
||||||
|
else:
|
||||||
|
nb_class_indexed = nb_class_indexed + 1
|
||||||
|
|
||||||
|
# retval = ls.ela_index_record_field(chaine, str(doc["external_code"]))
|
||||||
|
|
||||||
|
mycommon.myprint(str(nb_class_indexed) + " ont été indexes")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return True, str(nb_class_indexed) + " articles ont été indexes "
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False, "Impossible d'indexer les articles et avis ==> KO"
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Cette fonction indexe un article / avis
|
||||||
|
Par defaut sont pris en compte :
|
||||||
|
- le titre de la formation
|
||||||
|
'''
|
||||||
|
def ela_index_articles_avis(titre_formation="", source_field = ""):
|
||||||
|
try:
|
||||||
|
|
||||||
|
collection = db["articles_avis"]
|
||||||
|
|
||||||
|
if( len(str(source_field)) == 0):
|
||||||
|
source_field = 'default'
|
||||||
|
|
||||||
|
for doc in collection.find({"title_formation":titre_formation, "valide":"1"}):
|
||||||
|
|
||||||
|
# Indexation par defaut : champs TITRE FORMATION
|
||||||
|
if ( str(source_field) == "default" ):
|
||||||
|
chaine = doc["title_formation"]
|
||||||
|
#mycommon.myprint(" external_code = "+str(doc["external_code"])+" ==> "+str(chaine))
|
||||||
|
retval = ls.ela_index_article_avis_record_field(chaine, str(doc["title_formation"]), source_field)
|
||||||
|
|
||||||
|
'''
|
||||||
|
# Apres indexation, on met a jour la formation pour
|
||||||
|
# mettre le champ "indexe" a 1.
|
||||||
|
'''
|
||||||
|
if( retval ):
|
||||||
|
# mise à jour du champ "indexed"
|
||||||
|
myobjectif = {}
|
||||||
|
myobjectif['indexed'] = '1'
|
||||||
|
|
||||||
|
ret_val2 = collection.find_and_modify(query={"title_formation":titre_formation, "valide":"1"},
|
||||||
|
update={"$set": myobjectif}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (ret_val2 and ret_val2['_id']):
|
||||||
|
mycommon.myprint("L'article indexé (champs par defaut) =" + str(ret_val2['_id']))
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Cette fonction recherche une chaine de caractère
|
||||||
|
dans la table des articles et avis.
|
||||||
|
|
||||||
|
Elle retourne le title de la formation
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
def ela_recherche_article_avis_tokens(sentence):
|
||||||
|
tab_training_id = []
|
||||||
|
tab_tokens = ls.Ela_Tokenize(sentence)
|
||||||
|
tab_tokens2 = ls.Ela_remove_stop_words(tab_tokens)
|
||||||
|
tab_tokens3 = ls.Ela_remove_pronoun(tab_tokens2)
|
||||||
|
'''
|
||||||
|
note : 26/03 : Faire evolution la fonction ici pour
|
||||||
|
gerer les mots qui ne doivent pas etre racinisé comme le cas du mot "Responsive"
|
||||||
|
|
||||||
|
De manière plus globale, il faudrait exclure certains mot de la racinisation.
|
||||||
|
|
||||||
|
'''
|
||||||
|
print(" VERIF : " + str(tab_tokens3))
|
||||||
|
tab_corrected_word = []
|
||||||
|
for mot in tab_tokens3:
|
||||||
|
mycommon.recherche_check_word_in_fr_dict(str(mot))
|
||||||
|
val = ls.correct_fr_word(str(mot))
|
||||||
|
if (val):
|
||||||
|
tab_corrected_word.append(str(val))
|
||||||
|
|
||||||
|
print("corrected word = " + str(tab_corrected_word))
|
||||||
|
|
||||||
|
tab_tokens4 = ls.Ela_stemmize(tab_corrected_word)
|
||||||
|
|
||||||
|
print(" VERIF APRES STEMISATION : " + str(tab_tokens4))
|
||||||
|
|
||||||
|
tab_tokens4.sort()
|
||||||
|
|
||||||
|
'''
|
||||||
|
tab_tokens4 contient la liste des mots à rechercher.
|
||||||
|
En suite pour chaque mot de "tab_tokens4" on regarde dans la table "elaindex"
|
||||||
|
a quoi cela pourrait correspondre.
|
||||||
|
'''
|
||||||
|
|
||||||
|
# collection
|
||||||
|
collection = db["elaindex_article_avis"]
|
||||||
|
|
||||||
|
print(" mot recherché tab_tokens4 = " + str(tab_tokens4))
|
||||||
|
|
||||||
|
pipe2 = [{'$match': {'mots': {'$in': tab_tokens4}}},
|
||||||
|
{'$group': {
|
||||||
|
'_id': "$id_article_avis",
|
||||||
|
'count_class': {'$sum': 1},
|
||||||
|
'sum_occurence': {'$sum': '$occurence'}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{'$sort': {'count_class': -1, 'sum_occurence': -1}}
|
||||||
|
]
|
||||||
|
|
||||||
|
for result in collection.aggregate(pipe2):
|
||||||
|
tab_training_id.append(str(result["_id"]))
|
||||||
|
# print(result)
|
||||||
|
|
||||||
|
print("resultat tab_training_id = " + str(tab_training_id))
|
||||||
|
|
||||||
|
return tab_training_id
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
mots occurence moyenne id_formation source_field
|
mots occurence moyenne id_formation source_field
|
||||||
0 mot 2 0.33 AUTO_CH03 default
|
0 formation4 0 0.0 formation4 default
|
||||||
1 recherch 4 0.67 AUTO_CH03 default
|
|
27
main.py
27
main.py
|
@ -878,6 +878,33 @@ def add_articles_avis():
|
||||||
return jsonify(status=status, message=retval)
|
return jsonify(status=status, message=retval)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Cette API indexe les articles et avis postés
|
||||||
|
'''
|
||||||
|
|
||||||
|
@app.route('/myclass/api/ela_index_all_articles_avis/', methods=['POST','GET'])
|
||||||
|
@crossdomain(origin='*')
|
||||||
|
def ela_index_all_articles_avis():
|
||||||
|
# On recupere le corps (payload) de la requete
|
||||||
|
payload = request.form.to_dict()
|
||||||
|
print(" ### payload = ",payload)
|
||||||
|
status, retval = ela_index_class.ela_index_all_articles_avis()
|
||||||
|
return jsonify(status=status, message=retval)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Cette API recherche un articles ou un avis en se basant sur le
|
||||||
|
titre de la formation'''
|
||||||
|
@app.route('/myclass/api/recherche_articles_avis/', methods=['GET','POST'])
|
||||||
|
@crossdomain(origin='*')
|
||||||
|
def recherche_articles_avis():
|
||||||
|
# On recupere le corps (payload) de la requete
|
||||||
|
payload = request.form.to_dict()
|
||||||
|
print(" ### payload = ", payload)
|
||||||
|
status, result = aa.recherche_articles_avis(payload)
|
||||||
|
return jsonify(status=status, message=result)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print(" debut api")
|
print(" debut api")
|
||||||
|
|
||||||
|
|
|
@ -503,10 +503,7 @@ def recherche_text_simple(diction):
|
||||||
|
|
||||||
coll_name = dbname['myclass']
|
coll_name = dbname['myclass']
|
||||||
|
|
||||||
print(" Dans la recherch, les critère = "+str(certif_crit)+" la langue = "+str(lang_crit)+
|
|
||||||
" price = "+str(price_crit)+" Duration = "+str(duration_crit))
|
|
||||||
|
|
||||||
#ici ajouter tous les critère comme ci-dessous avec le support et le certif
|
|
||||||
'''
|
'''
|
||||||
la valeur nb_result permettra de savoir si la requete a donnée un resultat.
|
la valeur nb_result permettra de savoir si la requete a donnée un resultat.
|
||||||
si ce n'est pas le cas, il faudra à la fin enregistrer la requete avec un result a vide'''
|
si ce n'est pas le cas, il faudra à la fin enregistrer la requete avec un result a vide'''
|
||||||
|
@ -529,7 +526,6 @@ def recherche_text_simple(diction):
|
||||||
if ("_id" in mydict_combined.keys()):
|
if ("_id" in mydict_combined.keys()):
|
||||||
mydict_combined['class_id'] = mydict_combined.pop('_id')
|
mydict_combined['class_id'] = mydict_combined.pop('_id')
|
||||||
|
|
||||||
#mycommon.myprint("COMBINED = " + str(mydict_combined))
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Statistique : Insertion du recherche - resultat '''
|
Statistique : Insertion du recherche - resultat '''
|
||||||
|
@ -662,6 +658,7 @@ def store_recherche(diction, user_recid=""):
|
||||||
return False, " Impossible d'enregistrer la recherche de utilisateur"
|
return False, " Impossible d'enregistrer la recherche de utilisateur"
|
||||||
'''
|
'''
|
||||||
mydata['user_recid'] = user_recid
|
mydata['user_recid'] = user_recid
|
||||||
|
mydata['document_recherche'] = "formation"
|
||||||
|
|
||||||
if ("type" in diction.keys()):
|
if ("type" in diction.keys()):
|
||||||
if diction['type']:
|
if diction['type']:
|
||||||
|
|
Loading…
Reference in New Issue