# PROGRAMS
P=python src/paradigms.py
PP=python printwordforms.py
E=./extract.perl -u
EVAL=python src/eval.py

# DATA
WIKISV=data/wikipedia/stats_sv.txt
WIKIDE=data/wikipedia/stats_de.txt
WIKIES=data/wikipedia/stats_es.txt
WIKIFI=data/wikipedia/stats_fi.txt

SV-INFL-NOUN=data/saldo/saldo_noun_paradigms.txt

DE-INFL-NOUN=data/wiktionary-morphology-1.1/inflections_de_noun.csv
DE-INFL-VERB=data/wiktionary-morphology-1.1/inflections_de_verb.csv
ES-INFL-VERB=data/wiktionary-morphology-1.1/inflections_es_verb.csv
FI-INFL-NOUNADJ=data/wiktionary-morphology-1.1/inflections_fi_nounadj.csv
FI-INFL-VERB=data/wiktionary-morphology-1.1/inflections_fi_verb.csv

DE-NOUN-TRAIN=data/wiktionary-morphology-1.1/base_forms_de_noun_train_dev.txt
DE-VERB-TRAIN=data/wiktionary-morphology-1.1/base_forms_de_verb_train_dev.txt
ES-VERB-TRAIN=data/wiktionary-morphology-1.1/base_forms_es_verb_train_dev.txt
FI-VERB-TRAIN=data/wiktionary-morphology-1.1/base_forms_fi_verb_train_dev.txt
FI-NOUNADJ-TRAIN=data/wiktionary-morphology-1.1/base_forms_fi_nounadj_train_dev.txt

SV-NOUN-DEV=data/saldo/saldo_baseforms.txt

# dev has been replaced by test
DE-NOUN-DEV=data/wiktionary-morphology-1.1/base_forms_de_noun_test.txt
DE-VERB-DEV=data/wiktionary-morphology-1.1/base_forms_de_verb_test.txt
ES-NOUN-DEV=data/wiktionary-morphology-1.1/base_forms_es_noun_test.txt
ES-VERB-DEV=data/wiktionary-morphology-1.1/base_forms_es_verb_test.txt
FI-VERB-DEV=data/wiktionary-morphology-1.1/base_forms_fi_verb_test.txt
FI-NOUNADJ-DEV=data/wiktionary-morphology-1.1/base_forms_fi_nounadj_test.txt

# PARADIGMS
P-SV-NOUN-TRAIN=paradigms/se_nouns_train.para
P-DE-NOUNS-TRAIN=paradigms/de_nouns_train.para
P-DE-VERBS-TRAIN=paradigms/de_verbs_train.para
P-ES-VERBS-TRAIN=paradigms/es_verbs_train.para
P-FI-VERBS-TRAIN=paradigms/fi_verbs_train.para
P-FI-NOUNADJS-TRAIN=paradigms/fi_nounadj_train.para

# EVAL: SE
SV-C-NOUN=output/sv_c_nouns.txt
SV-NC-NOUN=output/sv_nc_nouns.txt

# EVAL: DE
DE-C-NOUNS-RESULT=output/de_c_nouns_result.txt
DE-NC-NOUNS-RESULT=output/de_nc_nouns_result.txt
DE-C-VERBS-RESULT=output/de_c_verbs_result.txt
DE-NC-VERBS-RESULT=output/de_nc_verbs_result.txt
DE-C-NOUNS-ERR=output/de_c_nouns_err.txt
DE-NC-NOUNS-ERR=output/de_nc_nouns_err.txt
DE-C-VERBS-ERR=output/de_c_verbs_err.txt
DE-NC-VERBS-ERR=output/de_nc_verbs_err.txt

DE-C-NOUNS=output/de_c_nouns.txt
DE-NC-NOUNS=output/de_nc_nouns.txt
DE-C-VERBS=output/de_c_verbs.txt
DE-NC-VERBS=output/de_nc_verbs.txt

# EVAL: ES
ES-C-VERBS-RESULT=output/es_c_verbs_result.txt
ES-NC-VERBS-RESULT=output/es_nc_verbs_result.txt
ES-C-VERBS-ERR=output/es_c_verbs_err.txt
ES-NC-VERBS-ERR=output/es_nc_verbs_err.txt

ES-C-VERBS=output/es_c_verbs.txt
ES-NC-VERBS=output/es_nc_verbs.txt

# EVAL: FI
FI-C-NOUNADJS-RESULT=output/fi_c_nounadjs_result.txt
FI-NC-NOUNADJS-RESULT=output/fi_nc_nounadjs_result.txt
FI-C-VERBS-RESULT=output/fi_c_verbs_result.txt
FI-NC-VERBS-RESULT=output/fi_nc_verbs_result.txt
FI-C-NOUNADJS-ERR=output/fi_c_nounadjs_err.txt
FI-NC-NOUNADJS-ERR=output/fi_nc_nounadjs_err.txt
FI-C-VERBS-ERR=output/fi_c_verbs_err.txt
FI-NC-VERBS-ERR=output/fi_nc_verbs_err.txt

FI-C-NOUNADJS=output/fi_c_nounadjs.txt
FI-NC-NOUNADJS=output/fi_nc_nounadjs.txt
FI-C-VERBS=output/fi_c_verbs.txt
FI-NC-VERBS=output/fi_nc_verbs.txt

eval:${DE-C-NOUNS-RESULT} ${DE-C-VERBS-RESULT} ${DE-NC-NOUNS-RESULT} ${DE-NC-VERBS-RESULT} ${ES-C-VERBS-RESULT} ${ES-NC-VERBS-RESULT} ${FI-C-NOUNADJS-RESULT} ${FI-NC-NOUNADJS-RESULT} ${FI-C-VERBS-RESULT} ${FI-NC-VERBS-RESULT} ${SV-C-NOUN} ${SV-NC-NOUN}


	python src/eval_compilation.py

evalsv: 
	python src/eval_swedish.py 1000

extract: ${P-DE-NOUNS-TRAIN} ${P-DE-VERBS-TRAIN} ${P-ES-VERBS-TRAIN} ${P-FI-VERBS-TRAIN} ${P-FI-NOUNADJS-TRAIN}

ncclean:
	rm -f output/*nc*.txt
clean:
	rm -f output/*.txt

# DE

${DE-C-NOUNS-RESULT}:${P-DE-NOUNS-TRAIN} 
	cat ${DE-NOUN-DEV} | ${P} ${WIKIDE} ${P-DE-NOUNS-TRAIN} -v -b > ${DE-C-NOUNS}
	cat ${DE-C-NOUNS} | ${EVAL} ${DE-INFL-NOUN} ${DE-C-NOUNS-RESULT} > ${DE-C-NOUNS-ERR}

${DE-NC-NOUNS-RESULT}: ${P-DE-NOUNS-TRAIN}
	cat ${DE-NOUN-DEV} | ${P} ${P-DE-NOUNS-TRAIN} -n -v > ${DE-NC-NOUNS}
	cat ${DE-NC-NOUNS} | ${EVAL} ${DE-INFL-NOUN} ${DE-NC-NOUNS-RESULT} > ${DE-NC-NOUNS-ERR} 

${DE-C-VERBS-RESULT}: ${P-DE-VERBS-TRAIN}
	cat ${DE-VERB-DEV} | ${P} ${WIKIDE} ${P-DE-VERBS-TRAIN} -b -v > ${DE-C-VERBS}
	cat ${DE-C-VERBS} | ${EVAL} ${DE-INFL-VERB} ${DE-C-VERBS-RESULT} > ${DE-C-VERBS-ERR}

${DE-NC-VERBS-RESULT}: ${P-DE-VERBS-TRAIN}
	cat ${DE-VERB-DEV} | ${P} ${P-DE-VERBS-TRAIN} -v -n > ${DE-NC-VERBS}
	cat ${DE-NC-VERBS} | ${EVAL} ${DE-INFL-VERB}  ${DE-NC-VERBS-RESULT} > ${DE-NC-VERBS-ERR}

# ES

${ES-C-VERBS-RESULT}: ${P-ES-VERBS-TRAIN}
	cat ${ES-VERB-DEV} | ${P} ${WIKIES} ${P-ES-VERBS-TRAIN} -v -b > ${ES-C-VERBS}
	cat ${ES-C-VERBS} | ${EVAL} ${ES-INFL-VERB}  ${ES-C-VERBS-RESULT} > ${ES-C-VERBS-ERR}

${ES-NC-VERBS-RESULT}: ${P-ES-VERBS-TRAIN}
	cat ${ES-VERB-DEV} | ${P} ${P-ES-VERBS-TRAIN} -v -n > ${ES-NC-VERBS}
	cat ${ES-NC-VERBS} | ${EVAL} ${ES-INFL-VERB} ${ES-NC-VERBS-RESULT} > ${ES-NC-VERBS-ERR}

${FI-C-NOUNADJS-RESULT}: ${P-FI-NOUNADJS-TRAIN}
	cat ${FI-NOUNADJ-DEV} | ${P} ${WIKIFI} ${P-FI-NOUNADJS-TRAIN} -v -b > ${FI-C-NOUNADJS}
	cat ${FI-C-NOUNADJS} | ${EVAL} ${FI-INFL-NOUNADJ} ${FI-C-NOUNADJS-RESULT} > ${FI-C-NOUNADJS-ERR}

${FI-NC-NOUNADJS-RESULT}: ${P-FI-NOUNADJS-TRAIN}
	cat ${FI-NOUNADJ-DEV} | ${P} ${P-FI-NOUNADJS-TRAIN} -v -n > ${FI-NC-NOUNADJS}
	cat ${FI-NC-NOUNADJS} | ${EVAL} ${FI-INFL-NOUNADJ} ${FI-NC-NOUNADJS-RESULT} > ${FI-NC-NOUNADJS-ERR}

${FI-C-VERBS-RESULT}: ${P-FI-VERBS-TRAIN}
	cat ${FI-VERB-DEV} | ${P} ${WIKIFI} ${P-FI-VERBS-TRAIN} -v -b > ${FI-C-VERBS}
	cat ${FI-C-VERBS} | ${EVAL} ${FI-INFL-VERB} ${FI-C-VERBS-RESULT} > ${FI-C-VERBS-ERR}

${FI-NC-VERBS-RESULT}: ${P-FI-VERBS-TRAIN}
	cat ${FI-VERB-DEV} | ${P} ${P-FI-VERBS-TRAIN} -v -n > ${FI-NC-VERBS} 
	cat ${FI-NC-VERBS} | ${EVAL} ${FI-INFL-VERB} ${FI-NC-VERBS-RESULT} > ${FI-NC-VERBS-ERR}

${SV-C-NOUN}: ${P-SV-NOUN-TRAIN}
	cut -f 1 ${SV-NOUN-DEV} | ${P} ${WIKISV} ${P-SV-NOUN-TRAIN} -b > ${SV-C-NOUN}

${SV-NC-NOUN}: ${P-SV-NOUN-TRAIN}
	cut -f 1 ${SV-NOUN-DEV} | ${P} ${P-SV-NOUN-TRAIN} -n > ${SV-NC-NOUN} 

# EXTRACT

# DE
${P-DE-NOUNS-TRAIN}: ${DE-INFL-NOUN} ${DE-NOUN-TRAIN}
	cd src ; cat ../${DE-INFL-NOUN} | ${PP} ../${DE-NOUN-TRAIN} | ${E} > ../${P-DE-NOUNS-TRAIN}
${DE-INFL-NOUN}:
${DE-NOUN-TRAIN}:

${P-DE-VERBS-TRAIN}: ${DE-INFL-VERB} ${DE-VERB-TRAIN}
	cd src ; cat ../${DE-INFL-VERB} | ${PP} ../${DE-VERB-TRAIN} | ${E} > ../${P-DE-VERBS-TRAIN}
${DE-INFL-VERB}:
${DE-VERB-TRAIN}:

# ES
${P-ES-VERBS-TRAIN}: ${ES-INFL-VERB} ${ES-VERB-TRAIN}
	cd src ; cat ../${ES-INFL-VERB} | ${PP} ../${ES-VERB-TRAIN} | ${E} > ../${P-ES-VERBS-TRAIN}
${ES-INFL-VERB}:
${ES-VERB-TRAIN}:

# FI
${P-FI-VERBS-TRAIN}: ${FI-INFL-VERB} ${FI-VERB-TRAIN}
	cd src ; cat ../${FI-INFL-VERB} | ${PP} ../${FI-VERB-TRAIN} | ${E} > ../${P-FI-VERBS-TRAIN}
${FI-INFL-VERB}:
${FI-VERB-TRAIN}:

${P-FI-NOUNADJS-TRAIN}: ${FI-INFL-NOUNADJS} ${FI-NOUNADJS-TRAIN}
	cd src ; cat ../${FI-INFL-NOUNADJS} | ${PP} ../${FI-NOUNADJS-TRAIN} | ${E} > ../${P-FI-NOUNADJS-TRAIN}
${FI-INFL-NOUNADJS}:
${FI-NOUNADJS-TRAIN}:

${P-SV-NOUN-TRAIN}: ${SV-INFL-NOUN}
	cd src ; cat ../${SV-INFL-NOUN} | ${E} > ../${P-SV-NOUN-TRAIN}
${SV-INFL-NOUN}:

# FSV
extract_fsvnoun:
	cd src ; cat ../data/fsv/fsv_noun.txt | ${E} > ../paradigms/fsv_nouns_train.para
extract_fsvadj:
	cd src ; cat ../data/fsv/fsv_adj.txt | ${E} > ../paradigms/fsv_adj_train.para
extract_fsvverb:
	cd src ; cat ../data/fsv/fsv_verb.txt | ${E} > ../paradigms/sv_verbs_train.para

fuzzy_fsvverb:
	cat data/fsv/baselist4_fsv.txt | ${P} data/fsv/baselist4_fsv.txt paradigms/fsv_verbs_train.para data/fsv/insert.d05.noending.rules -f -b > output/fsv_c_verbs_result.txt