
#__________________________________________________________ BEWERKING __________________________________________________________#

from defwordfrequencies20 import wordfrequencies, DT0, DT1, DT2, DT3, DT4, DT5, DT6, DT7, DT8, DT9, DT10, DT11, DT12, other_standard_keywords, standard_variants

                                    #_______________ Keuzes randvoorwaarden _______________#

begindatum_dag = 1
begindatum_maand = 1
begindatum_jaar = 1830

einddatum_dag = 31
einddatum_maand = 12
einddatum_jaar = 1914

specifieke_wet="Nee" # Geef het jaartal waarin de specifieke wet werd afgekondigd (tussen aanhalingstekens), of "Nee" als geen specifieke wet bedoeld wordt.

handelingen_van_de_Kamer = "Ja"
handelingen_van_de_Senaat = "Ja"
extra_parlementaire_bronnen = "Nee"

teksten_van_parlementsleden = "Nee"
teksten_van_parlementsvoorzitters = "Nee"
teksten_van_verslaggevers = "Ja"
teksten_van_ministers = "Nee"

specifieke_personen = [] # Geef de achternamen van de personen waarin u geïnteresserd bent, zonder accenten en spaties, telkens tussen aanhalingstekens en gescheiden door een komma en spatie.

socialisten = "Ja"
leden_liberale_partij = "Ja"
leden_katholieke_partij = "Ja"
leden_meetingpartij = "Ja"
christendemocraten = "Ja"

vertegenwoordigers_van_vlaamse_arrondissementen = "Ja"
vertegenwoordigers_van_waalse_arrondissementen = "Ja"
vertegenwoordigers_van_brusselse_arrondissementen = "Ja"
vertegenwoordigers_van_duitse_arrondissementen = "Ja"
vertegenwoordigers_van_specifieke_arrondissementen = [] # Geef de namen van de arrondissementen waarin u in het bijzonder geïnteresseerd bent (in de taal die er gesproken wordt, zonder accenten), telkens tussen aanhalingstekens en gescheiden door een komma en spatie.


                                    #_______________ Keuzes voor de bewerking _______________#

woorden_om_centraal_te_stellen = standard_variants # Geef de termen op waarrond het programma de berekeningen moet doen, telkens tussen aanhalingstekens en gescheiden door een komma en spatie.
lijst_met_sleuteltermen = ["textes"]  # Geef de termen op waarin u in het bijzonder geïnteresseerd bent, telkens tussen aanhalingstekens en gescheiden door een komma en spatie.
centrale_termen_eveneens_tellen = "Nee"
aantal_woorden_voor_en_na_centrale_termen_in_rekening_te_brengen = 25 # Geheel getal onder 100, of 'alle'.
minimale_lengte_mee_te_tellen_woorden = 6
absolute_aantallen = "Ja"
relatieve_frequenties = "Nee" # Gelijk aan de absolute aantallen gedeeld door het totale aantal woorden dat in rekening is gebracht.


                                      #_______________ Keuzes voor output _______________#
                                      
volgorde = "Alfabetisch" # Mogelijkheden: "Van hoog naar laag" of "Alfabetisch"

aantal_cijfers_na_de_komma_bij_berekening_relatieve_frequenties = 3

lijst_genereren_met_aantallen_alle_woorden = "Nee"
lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen = "Ja"
lijst_genereren_met_aantal_instanties_van_discourstypes = "Nee"
lijst_met_centrale_termen_met_context_genereren_Antconcstijl = "Nee" # Opties: "Nee", "Ja, van alle centrale termen" of "Ja, waarin ook sleuteltermen voorkomen"

minimale_frequentie_woorden_in_lijst = 0
minimale_lengte_woorden_in_lijst = 1

grafische_weergave_discourstypes_genereren = "Nee"

output_hier_weergeven = "Ja"
output_opslaan_als_tekstbestand = "Nee"
opslaan_onder_bestandsnaam = "bestandsnaam" # Mag spaties, cijfers en hoofdletters bevatten, geen tekens die in Windows Verkenner geweigerd worden en geen extentie. Moet tussen aanhalingstekens.








#______________________________________________________________________________________________________________________________________________________#
#______________________________________________ Omvorming input voor uitvoering _________________________________________________________________#
#______________________________________________________________________________________________________________________________________________________#


printlist_2 = ""; printlist_3 = ""; relative_2 = ""
  
if specifieke_wet == "Nee":
    startdate = ""; enddate = ""; index = -1
    for date in [begindatum_jaar, begindatum_maand, begindatum_dag, einddatum_jaar, einddatum_maand, einddatum_dag]:
        index += 1; date = str(date)
        if len(date) < 2:
            date = "0" + str(date)
        if index <= 2:
            startdate += date
        else:
            enddate += date
else:
    if type(specifieke_wet) != str:
        print("Foute opgave: verifieer of het afkondigingsjaar van de gespecifieerde wet tussen aanhalingstekens staat.")
    else:
        if specifieke_wet == "1873":
            startdate="18730711"; enddate="18730805"
        elif specifieke_wet == "1889":
            startdate="18881122"; enddate="18881229"
        elif specifieke_wet == "1891":
            startdate="18910703"; enddate="18910807"
        elif specifieke_wet == "1898":
            startdate="18961118"; enddate="18980415"
        elif specifieke_wet == "1908":
            startdate="19071128"; enddate="19080212"
        else:
            print("Foutieve opgave: gelieve één van volgende afkondigingsjaren op te geven als 'specifieke_wet' (tussen aanhalingstekens): '1873', '1889', '1891', '1898', '1908', of een specifieke begin- en einddatum in te stellen.")
    
if handelingen_van_de_Kamer == "Ja":
    if handelingen_van_de_Senaat == "Ja":
        house = "both"
    else:
        house = "lower"
else:
    if handelingen_van_de_Senaat == "Ja":
        house = "upper"
    else:
        print("Voorlopig is door het programma nog niet in dit geval voorzien.")

job = []
if teksten_van_parlementsleden == "Ja":
    job.append("membre")
if teksten_van_parlementsvoorzitters == "Ja":
    job.append("president")
if teksten_van_verslaggevers == "Ja":
    job.append("rapporteur")
if teksten_van_ministers == "Ja":
    job.append("ministre")
if teksten_van_ministers == "Ja":
    job.append("ministre")
#if teksten_van_extraparlementaire_personen == "Ja":
#    job.append("otherjob")
if job == []:
    print("Foutieve opgave: tenminste één van de opgegeven beroepscategorieën moet in rekening gebracht worden.")

names = specifieke_personen
if names == []:
    names = "any"

party = []
if leden_liberale_partij == "Ja":
    party.append("LP")
if leden_katholieke_partij == "Ja":
    party.append("KP")
if leden_meetingpartij == "Ja":
    party.append("MEETING")
if christendemocraten == "Ja":
    party.append("CD")
if socialisten == "Ja":
    party.append("BWP")
if party == []:
    print("Foutieve opgave: tenminste één van de opgegeven partijen moet in rekening gebracht worden.")

districts = vertegenwoordigers_van_specifieke_arrondissementen
if districts != [] and any(vertegenwoordigers_van_vlaamse_arrondissementen == "Ja", vertegenwoordigers_van_waalse_arrondissementen == "Ja", vertegenwoordigers_van_brusselse_arrondissementen == "Ja"):
    print("Gelieve de lijst met specifieke personen leeg te laten indien gepijld wordt naar één of meerdere regio's, of geen enkele regio te selecteren indien gekozen wordt om één of meerdere namen op te geven.")
if vertegenwoordigers_van_vlaamse_arrondissementen == "Ja":
    districts.append("V")
if vertegenwoordigers_van_waalse_arrondissementen == "Ja":
    districts.append("W")
if vertegenwoordigers_van_brusselse_arrondissementen == "Ja":
    districts.append("B")
if vertegenwoordigers_van_duitse_arrondissementen == "Ja":
    districts.append("D")
if districts == []:
    print("Foutieve opgave: tenminste één van de opgegeven regio's moet in rekening gebracht worden.")

centerword_list = woorden_om_centraal_te_stellen
if centerword_list == []:
    print("Foutieve opgave: tenminste één woord moet worden opgegeven als centraal woord waarrond geteld moet worden.")

keyword_list = lijst_met_sleuteltermen
if keyword_list == []:
    keyword_list = standard_variants

if centrale_termen_eveneens_tellen == "Ja":
    includecenterwordsinkeywords = True
else:
    includecenterwordsinkeywords = False

if aantal_woorden_voor_en_na_centrale_termen_in_rekening_te_brengen == "alle":    
    contextrange = "all"
else:
    contextrange = aantal_woorden_voor_en_na_centrale_termen_in_rekening_te_brengen * 2

minwordlength = minimale_lengte_mee_te_tellen_woorden

minwordlengthlist = minimale_lengte_woorden_in_lijst

minfrequency = minimale_frequentie_woorden_in_lijst

if volgorde == "Van hoog naar laag":
    order = "freq"
elif volgorde == "Alfabetisch":
    order = "alph"
    
ndigits = aantal_cijfers_na_de_komma_bij_berekening_relatieve_frequenties

if absolute_aantallen == "Ja":
    relative = False
    if relatieve_frequenties == "Ja":
        relative_2 = True
elif relatieve_frequenties == "Ja":
    relative = True
else:
    print("Foutieve opgave: om output te kunnen genereren, moet gekozen worden voor absolute of relatieve frequencies, of beide.")

if lijst_met_centrale_termen_met_context_genereren_Antconcstijl == "Nee":
    printrange = False
elif lijst_met_centrale_termen_met_context_genereren_Antconcstijl == "Ja, van alle centrale termen":
    printrange = "all"
elif lijst_met_centrale_termen_met_context_genereren_Antconcstijl == "Ja, waarin ook sleuteltermen voorkomen":
    printrange = "keywords"
else:
    print("Foutieve opgave: lijst_met_centrale_termen_met_context_genereren_Antconcstijl moet gelijk zijn aan 'Nee', 'Ja, van alle centrale termen' of 'Ja, waarin ook sleuteltermen voorkomen'.")

if grafische_weergave_discourstypes_genereren == "Ja":
    lijst_genereren_met_aantal_instanties_van_discourstypes = "Ja"

printplot = False
if grafische_weergave_discourstypes_genereren == "Ja":
    printlist = "DTs"
    printplot = True
    if lijst_genereren_met_aantallen_alle_woorden == "Ja":
        printlist_2 = "all words"
        if lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
            printlist_3 = "keywords"
    elif lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
        printlist_2 = "keywords"
else:
    if lijst_genereren_met_aantal_instanties_van_discourstypes == "Ja":
        printlist = "DTs"
        if lijst_genereren_met_aantallen_alle_woorden == "Ja":
            printlist_2 = "all words"
            if lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
                printlist_3 = "keywords"
        elif lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
            printlist_2 = "keywords"
    else:
        if lijst_genereren_met_aantallen_alle_woorden == "Ja":
            printlist = "all words"
            if lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
                printlist_2 = "keywords"
        elif lijst_genereren_met_aantallen_van_opgegeven_sleuteltermen == "Ja":
            printlist = "keywords"
        else:
            if lijst_met_centrale_termen_met_context_genereren_Antconcstijl not in ["Ja, van alle centrale termen", "Ja, waarin ook sleuteltermen voorkomen"]:
                print("Foutieve opgave: om output te genereren moet tenminste één lijsttype of de context in Antconcstijl worden opgevraagd")
    
if output_hier_weergeven == "Nee" and output_opslaan_als_tekstbestand == "Nee":
    print("Foutieve opgave: om output te genereren moet output_hier_weergeven en/of output_opslaan_als_tekstbestand gelijk zijn aan 'Ja'.")
    
#_____________________________________________ Uitvoering berekeningen _________________________________________________________________________________________________________#

result_2 = ""; result_3 = ""

if relative_2 != "" and printlist_2 != "":
    print("Om te voorkomen dat te veel output tegelijk gegenereerd wordt, gelieve te kiezen tussen absolute en relatieve frequenties, of tussen het genereren van een lijst van alle woorden, de sleuteltermen of de discourstypes.")
    printplot = False
else:
    print("\n", "Berekeningen worden uitgevoerd. Een ogenblik geduld a.u.b. ...")
    print("")
    result_1 = wordfrequencies(startdate=startdate, enddate=enddate, house=house, job=job, names=names, party=party, districts=districts, centerword_list=centerword_list, keyword_list=keyword_list, includecenterwordsinkeywords=includecenterwordsinkeywords, relative=relative, printlist=printlist, order=order, printrange=printrange, printplot=printplot, contextrange=contextrange, minwordlength=minwordlength, minwordlengthlist=minwordlengthlist, minfrequency=minfrequency, ndigits=ndigits)    
    if printlist_2 != "":
        result_2 = wordfrequencies(startdate=startdate, enddate=enddate, house=house, job=job, names=names, party=party, districts=districts, centerword_list=centerword_list, keyword_list=keyword_list, includecenterwordsinkeywords=includecenterwordsinkeywords, relative=relative, printlist=printlist_2, order=order, printrange=printrange, printplot=printplot, contextrange=contextrange, minwordlength=minwordlength, minwordlengthlist=minwordlengthlist, minfrequency=minfrequency, ndigits=ndigits)
    if printlist_3 != "":
        result_3 = wordfrequencies(startdate=startdate, enddate=enddate, house=house, job=job, names=names, party=party, districts=districts, centerword_list=centerword_list, keyword_list=keyword_list, includecenterwordsinkeywords=includecenterwordsinkeywords, relative=relative, printlist=printlist_3, order=order, printrange=printrange, printplot=printplot, contextrange=contextrange, minwordlength=minwordlength, minwordlengthlist=minwordlengthlist, minfrequency=minfrequency, ndigits=ndigits)
    elif relative_2 != "":
        result_2 = wordfrequencies(startdate=startdate, enddate=enddate, house=house, job=job, names=names, party=party, districts=districts, centerword_list=centerword_list, keyword_list=keyword_list, includecenterwordsinkeywords=includecenterwordsinkeywords, relative=relative_2, printlist=printlist, order=order, printrange=printrange, printplot=printplot, contextrange=contextrange, minwordlength=minwordlength, minwordlengthlist=minwordlengthlist, minfrequency=minfrequency, ndigits=ndigits)

#_____________________________________________ Optimalisatie output _________________________________________________________________________________________________________#


if output_hier_weergeven == "Ja":
    for result in [result_1, result_2, result_3]:
        if result != "":
            print("")
            if type(result) in (list, tuple):
                for element in result:
                    if type(element) in (list, tuple):
                        for subelement in element:
                            if type(subelement) in (list, tuple):
                                print(subelement[0], subelement[1])
                            else:
                                print(subelement)
                    else:
                        print(element)
            else:
               print(result)

if output_opslaan_als_tekstbestand == "Ja":
    for forbiddencharacter in ("<", ">", ":", '"', "/", '|', '?', '*'): # Hier moet eigenlijk nog de backslash bij.
        if forbiddencharacter in opslaan_onder_bestandsnaam:
            print("")
            print("Probleem met opslaan als bestand: bestandsnaam mag geen van volgende karakters bevatten: <, >, :, /, \, |, ?, * of dubbele aanhalingstekens.")
            break
    with open("C:/Users/u0106296/Box Sync/Word frequency tool/Output/" + str(opslaan_onder_bestandsnaam) + ".txt", "w") as text_file:
        for result in [result_1, result_2, result_3]:
            if result != "":
                if type(result) in (list, tuple):
                    for element in result:
                        if type(element) in (list, tuple):
                            for subelement in element:
                                if type(subelement) in (list, tuple):
                                    text_file.write(str(subelement[0]) + " " + str(subelement[1]) + "\n")
                                    if ":" in str(subelement):
                                        text_file.write("\n")
                                else:
                                    text_file.write(str(subelement))
                                    if ":" in str(subelement):
                                        text_file.write("\n")
                        else:
                            text_file.write(str(element))
                            if ":" in str(element):
                                text_file.write("\n")
                else:
                    text_file.write(str(result))
                    if ":" in str(element):
                        text_file.write("\n")
        text_file.write(2*"\n" + "_____________________Opgegeven variabelen: _____________________" + 2*"\n" + "FILE SELECTION ARGUMENTS:" + "\n" + "startdate: " + str(startdate) + "\n" + "enddate: " + str(enddate) + "\n" + "house: " + str(house) + "\n" + "job: " + str(job) + "\n" + "names: " + str(names) + "\n" + "party: " + str(party) + "\n" + "districts: " + str(districts) + 2*"\n" + "COMPUTATION ARGUMENTS:" + "\n" + "centerword_list: " + str(centerword_list) + "\n" + "keyword_list: " + str(keyword_list) + "\n" + "includecenterwordsinkeywords: " + str(includecenterwordsinkeywords) + "\n" + "relative: " + str(relative) + "\n" + "contextrange: " + str(contextrange) + "\n" + "printlist: " + str(printlist) + "\n" + "order: " + str(order) + "\n" + "printrange: " + str(printrange) + "\n" + "minwordlength: " + str(minwordlength) + 2*"\n" + "OUTPUT ARGUMENTS:" + "\n" + "printplot: " + str(printplot) + "\n" + "minwordlength: " + str(minwordlength) + "\n" + "minwordlengthlist: " + str(minwordlengthlist) + "\n" + "minfrequency: " + str(minfrequency) + "\n" + "ndigits: " + str(ndigits) + "\n")

            
            
    
    