def select_query(query=[]): #on définit une nouvelle table et une table billets temporaires #specific_nlemmes est la requête de base issue de query.csv. if len(query)==0: specific_nlemme = misc.lire_dico_classes(path_req + 'query.csv',language) specific_nlemmes=[] for x in specific_nlemme: specific_nlemmes=specific_nlemmes+x.split('***') else: specific_nlemmes = query print specific_nlemmes print '\n' + str(len(specific_nlemmes)) +' terms in the query ' #on récupère les ids des concepts présents dans la requête dans query_ids query_ids =[] try: concepts = fonctions_bdd.select_bdd_table_champ_simple(name_bdd,'concepts','id,concepts') for con in concepts: if con[1] in specific_nlemmes: query_ids.append(con[0]) except: #il se peut que la base n'est jamais été indexée pass try: #tous les termes de la query ont déjà été indexés sous_corpus_idb_vect = fonctions_bdd.select_bdd_table_champ_simple(jesaispas,name_bdd,'concept2billets','id_b', ' where concept in '+ str(query_ids).replace('[','(').replace(']',')')) sous_corpus_idb=[] for x in sous_corpus_idb_vect: if not x[0] in sous_corpus_idb: sous_corpus_idb.append(x[0]) except: #tous les termes de la query n'ont pas encore été indexés, on passe à une méthode like. where_like = " where content_lemmatise like '%" where_like = where_like + " %' or content_lemmatise like '% ".join(specific_nlemmes) + " %'" print where_like sous_corpus_idb = fonctions_bdd.select_bdd_table_champ_simple(name_bdd,'billets','id',where_like ) print str(len(sous_corpus_idb)) +' documents retrieved \n' sql_where = " id in " + str(sous_corpus_idb).replace('[','(').replace(']',')') #print sql_where print 'creation de la nouvelle base de données ' + name_bdd_new shutil.copy(name_bdd, name_bdd_temp) try: fonctions_bdd.detruire_table(name_bdd,'billets2') except: pass try: fonctions_bdd.add_column(name_bdd,'billets','concepts_id','text')#et lui adjoindre le champ concepts_id except: pass try: fonctions_bdd.creer_table_billets(name_bdd,'billets2')#creer une table billet2 fonctions_bdd.add_column(name_bdd,'billets2','concepts_id','text')#et lui adjoindre le champ concepts_id except: pass fonctions_bdd.insert_select(name_bdd,'billets','billets2',sql_where) fonctions_bdd.detruire_table(name_bdd,'billets') fonctions_bdd.renommer_table(name_bdd,'billets2','billets') shutil.copy(name_bdd, name_bdd_new) shutil.copy(name_bdd_temp, name_bdd) os.remove(name_bdd_temp) return specific_nlemmes,fonctions_bdd.count_rows(name_bdd,'billets')
path_req = parameters.path_req user_interface=parameters.user_interface print "--- initialisations terminees...\n" print "+++ processing raw database \""+name_data+"\" into sql_where database file \""+name_bdd+"\"" sep = ' *** ' #on définit une nouvelle table et une table billets temporaires name_bdd_new = '.'.join(name_bdd.split('.')[:-2]) + '_new.' + '.'.join(name_bdd.split('.')[-2:]) name_bdd_temp = '.'.join(name_bdd.split('.')[:-2]) + '_temp.' +'.'.join(name_bdd.split('.')[-2:]) #on définit une série de nlemme qui forment la requête #specific_nlemmes=['NO_an AD_lors','NO_scène','NO_expert'] specific_nlemmes = misc.lire_dico_classes(path_req + 'query.csv',language) print specific_nlemmes #on récupère les ids des concepts présents dans la requête dans query_ids concepts = fonctions_bdd.select_bdd_table_champ_simple(name_bdd,'concepts','id,concepts') query_ids =[] for con in concepts: if con[1] in specific_nlemmes: query_ids.append(con[0]) print '\n' + str(len(query_ids)) + ' terms in the query.' sous_corpus_idb_vect = fonctions_bdd.select_bdd_table_champ_simple(name_bdd,'concept2billets','id_b', ' where concept in '+ str(query_ids).replace('[','(').replace(']',')')) sous_corpus_idb=[] for x in sous_corpus_idb_vect: if not x[0] in sous_corpus_idb: sous_corpus_idb.append(x[0])
# on indexe a partir de la liste des ngrammes tries filename = path_req + requete + '_' + str(freqmin) + '_' + 'liste_n-grammes_freq_comparatif' +'_trie' + '.csv' #fichier d'entree trie (rajouter _trie a la fin de la sortie standard) #print filename if os.path.isfile(filename) == 1: print '--- on indexe a partir du fichier \"' + filename+"\"" else: filename = path_req + 'concepts.csv' #fichier d'entree trie (rajouter _trie a la fin de la sortie standard) if not os.path.isfile(filename) == 1: filename_leven_redond = path_req + requete + '_' + str(freqmin) + '_' + 'liste_n-grammes_freq_divers_leven_noredond.csv' filename = filename_leven_redond print '--- on indexe a partir du fichier \"' + filename+"\"" #on lit le fichier des n-grammes a indexer ngrammes = misc.lire_dico_classes(filename,language) #pour plus de sûreté ngrammes = misc.lire_dico_classes(filename,language) #pour plus de sûreté ngrammes = misc.lire_dico_classes(filename,language) #affichage de la liste des 10 premiers concepts print "--- les 10 premiers concepts (sur " +str(len(ngrammes))+") : " for gra in ngrammes[:10]: try: print " ",str([gra]) except: print "encodage error" if len(ngrammes)>1000: