def ngramme_fit(year): Nb_rows = fonctions_bdd.count_rows_where(name_bdd,'billets'," where jours IN ('" + "','".join(list(map(str,year))) + "') ") #Nb_rows = fonctions_bdd.count_rows(name_bdd,'billets') Nb_auteurs = fonctions_bdd.count_rows(name_bdd,'auteurs') size_seq = 1000 nb_sequences = Nb_rows/size_seq billets_id=[] ngramme_billets_fit=[] ngrammes_auteurs_fit={} formes_fit={} #for x in range(nb_sequences+1): for x in range(nb_sequences+1): lim_d = str(size_seq*x) if x<nb_sequences: duration = str(size_seq) else: duration = str(size_seq) where = " jours IN ('" + "','".join(list(map(str,year))) + "') " sample = '1000000000' contenu = fonctions_bdd.select_bdd_table_where_limite(name_bdd,'billets','id,content_lemmatise,content,auteur_id',sample,requete,where,lim_d+','+duration,Nb_rows) #on indexe chaque billet et on recupere un triplet qui donne: la liste des ngrammes pour chaque billet, la liste des index des ngrammes pour chaque billet, et l'id des billets - ce script permet egalement de calculer les formes des n-lemmes. include=1 #le parametre include permet d'activer ou non l'overlap de lemmes dans le comptage: si 1, les nicolas sarkozy ne forment pas de sarkozy ngramme_billets_fit_x,billets_id_x,formes_x,ngrammes_auteurs_fit_x = text_processing.indexer_billet(contenu,ngrammes,maxTermLength,include) billets_id = billets_id + billets_id_x ngramme_billets_fit = ngramme_billets_fit + ngramme_billets_fit_x formes_fit=fonctions_lib.merge(formes_fit, formes_x, lambda x,y: fonctions_lib.merge(x,y,lambda x,y:x+y)) ngrammes_auteurs_fit=fonctions_lib.merge(ngrammes_auteurs_fit,ngrammes_auteurs_fit_x,lambda x,y : extension(x,y)) print " + billets numéros "+ str(int(lim_d)+1)+ " à "+ str(int(lim_d)+int(duration)) +" indexés (sur "+ str(Nb_rows) +")" return ngrammes_auteurs_fit, ngramme_billets_fit,formes_fit
def freq_comp(year): y=years.index(year) #for y,year in enumerate(years): #on construit la liste des index des concepts dans l'ordre ngrammes_fit_index=[] Nb_auteurs = fonctions_bdd.count_rows(name_bdd,'auteurs') ngramme_billets_fit =ngramme_billets_fit_year[y] ngrammes_auteurs_fit=ngrammes_auteurs_fit_year[y] #on calcule nos stats à l'échelle des auteurs aussi, freq = nombre de blogs parlant d'un terme dictionnaire_frequence_exact_auteur={} dictionnaire_frequence_exact={} N = fonctions_bdd.count_rows_where(name_bdd,'billets'," where jours IN ('" + "','".join(list(map(str,year))) + "') ") for terme in liste_concepts: dictionnaire_frequence_exact[terme[0]]=0 dictionnaire_frequence_exact_auteur[terme[0]]=0 for clique in ngramme_billets_fit: clique_index=[] for terme in set(clique): clique_index.append(liste_concepts_dico[terme]) dictionnaire_frequence_exact[terme]=dictionnaire_frequence_exact[terme]+1 ngrammes_fit_index.append(clique_index) print " + liste des index des concepts creee" for aut,clique in ngrammes_auteurs_fit.iteritems(): for terme in set(clique): dictionnaire_frequence_exact_auteur[terme]=dictionnaire_frequence_exact_auteur[terme]+1 print " + liste des index des concepts creee" file_freq_exact = path_req +'years/'+ requete +str(year) + '_' + 'frequences_exactes.csv' fichier_out =file(file_freq_exact,'w') def format(value): return "%.9f" % value for x in dictionnaire_frequence_exact: # print str(x) + '\t' + str(correspondance_lemme_forme[x]) +'\t' + (str(format(float(dictionnaire_frequence_exact[x])/N))).replace('.',',') +'\t' + (str(format(float(dictionnaire_frequence_exact_auteur[x])/float(Nb_auteurs)))).replace('.',',')+ '\n' fichier_out.write(str(x) + '\t' + str(correspondance_lemme_forme[x]) +'\t' + (str(format(float(dictionnaire_frequence_exact[x])/N))).replace('.',',') +'\t' + (str(format(float(dictionnaire_frequence_exact_auteur[x])/float(Nb_auteurs)))).replace('.',',')+ '\n') print " + frequences exactes calculees "+ file_freq_exact
for y,x in enumerate(pool_outputs): dictionnaire_gramme_year[y]=x fonctions_lib.dumpingin(dictionnaire_gramme_year,name_export_pkl,requete) #decoupage par periode: print dictionnaire_gramme_year.keys() #puis on itere annee par annee try: os.mkdir(path_req +'years/') except: pass for y,year in enumerate(years): #on trie par fréquence et on exporte le lexique final avec les occurrences print '\n' print year dico_final = misc.freq_tri(dictionnaire_gramme_year[y],freqmin,int(math.floor(top*1.1)),language,ng_filter)#on effectue le tri de notre dictionnaire filename = path_req +'years/'+ requete + '_' + str(freqmin) + '_' +str(year) + '_'+ 'liste_n-grammes_freq_divers.csv' filename_redond = path_req +'years/'+ requete + '_' + str(freqmin) +str(year) + '_'+ 'liste_n-grammes_freq_divers_noredond.csv' filename_redond_leven = path_req +'years/'+ requete + '_' + str(freqmin)+str(year) + '_' 'liste_n-grammes_freq_divers_leven_noredond.csv' misc.ecrire_liste_lemmes_freq(dico_final,Nb_rows,filename,lemme_maj,freqmin,ng_filter)#on ecrit la liste precedente dans un fichier filename print "\n+++"+str(len(dico_final))+" n-lemmes crees." #leven.pack_rendondance(filename,filename_redond,maxTermLength,freqmin,language,redondance_manuelle,ng_filter,user_interface) leven.pack_rendondance_exact(filename,filename_redond,maxTermLength,freqmin,language,ng_filter,user_interface) print "\n" Nb_rows = fonctions_bdd.count_rows_where(name_bdd,'billets'," where jours IN ('" + "','".join(list(map(str,year))) + "') ") print Nb_rows leven.pack_leven(filename_redond,filename_redond_leven,language,user_interface,freqmin,Nb_rows) fusion_years.fusion('redond')