Implemented interlinguality and fixed some bugs"

This commit is contained in:
Luka 2018-12-13 08:35:36 +01:00
parent ca83cb023b
commit 5e686ff681
24 changed files with 2039 additions and 660 deletions

View File

@ -1026,7 +1026,6 @@ public class XML_processing {
} //else {
// System.out.println("Error");
// }
}
}
@ -1068,10 +1067,22 @@ public class XML_processing {
// add sentence to corpus if it passes filters
if (includeFile && !ValidationUtil.isEmpty(sentence)) {
// for(Word w : sentence) {
// if (w.getW1().equals("")) {
// System.out.println("HERE!!!");
// }
// }
sentence = runFilters(sentence, stats.getFilter());
// for(Word w : sentence) {
// if (w.getW1().equals("")) {
// System.out.println("HERE!!!");
// }
// }
corpus.add(new Sentence(sentence, currentFiletaxonomy));
}
wordIndex = 0;

View File

@ -236,9 +236,10 @@ public class Ngrams {
.collect(Collectors.toList()));
return StringUtils.join(candidate, " ");
case WORD_TYPE:
//'/' has to be a possiblility for when i.e. msd in GOS equals anon
candidate.addAll(ngramCandidate
.stream()
.map(w -> Character.toString(w.getMsd(wordParts).charAt(0)))
.map(w -> Character.toString(w.getMsd(wordParts).length() > 0 ? w.getMsd(wordParts).charAt(0) : '/'))
.collect(Collectors.toList()));
// candidate.addAll(ngramCandidate
// .stream()

View File

@ -1,14 +1,34 @@
package data;
import gui.I18N;
public enum CalculateFor {
WORD("različnica"),
NORMALIZED_WORD("normalizirana različnica"),
LEMMA("lema"),
MORPHOSYNTACTIC_SPECS("oblikoskladenjska oznaka"),
MORPHOSYNTACTIC_PROPERTY("oblikoskladenjska lastnost"),
WORD_TYPE("besedna vrsta"),
DIST_WORDS("različnica"),
DIST_LEMMAS("lema");
// calculateFor.WORD=word
// calculateFor.NORMALIZED_WORD=normalized word
// calculateFor.LEMMA=lemma
// calculateFor.MORPHOSYNTACTIC_SPECS=msd
// calculateFor.MORPHOSYNTACTIC_PROPERTY=oblikoskladenjska lastnost
// calculateFor.WORD_TYPE=besedna vrsta
// calculateFor.DIST_WORDS=različnica
// calculateFor.DIST_LEMMAS=lema
// WORD("različnica"),
// NORMALIZED_WORD("normalizirana različnica"),
// LEMMA("lema"),
// MORPHOSYNTACTIC_SPECS("oblikoskladenjska oznaka"),
// MORPHOSYNTACTIC_PROPERTY("oblikoskladenjska lastnost"),
// WORD_TYPE("besedna vrsta"),
// DIST_WORDS("različnica"),
// DIST_LEMMAS("lema");
WORD("calculateFor.WORD"),
NORMALIZED_WORD("calculateFor.NORMALIZED_WORD"),
LEMMA("calculateFor.LEMMA"),
MORPHOSYNTACTIC_SPECS("calculateFor.MORPHOSYNTACTIC_SPECS"),
MORPHOSYNTACTIC_PROPERTY("calculateFor.MORPHOSYNTACTIC_PROPERTY"),
WORD_TYPE("calculateFor.WORD_TYPE"),
DIST_WORDS("calculateFor.DIST_WORDS"),
DIST_LEMMAS("calculateFor.DIST_LEMMAS");
private final String name;
@ -18,11 +38,12 @@ public enum CalculateFor {
}
public String toString() {
return this.name;
return I18N.get(this.name);
}
public static CalculateFor factory(String cf) {
if (cf != null) {
// String name = I18N.findI18NString(cf, "calculateFor");
if (WORD.toString().equals(cf)) {
return WORD;
}
@ -49,42 +70,42 @@ public enum CalculateFor {
if (ngram == 0) {
switch (this) {
case WORD:
return "Skupna vsota vseh črkovnih nizov različnic:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.word");
case NORMALIZED_WORD:
return "Skupna vsota vseh črkovnih nizov normaliziranih različnic:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.normalizedWord");
case LEMMA:
return "Skupna vsota vseh črkovnih nizov lem:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.lemma");
case MORPHOSYNTACTIC_SPECS:
return "Skupna vsota vseh črkovnih nizov oblikoskladenjskih oznak:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.msd");
case MORPHOSYNTACTIC_PROPERTY:
return "Skupna vsota vseh črkovnih nizov oblikoskladenjskih lastnosti:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.msdProperty");
case WORD_TYPE:
return "Skupna vsota vseh črkovnih nizov besednih vrst:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.wordType");
case DIST_WORDS:
return "Skupna vsota vseh črkovnih nizov različnic:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.word");
case DIST_LEMMAS:
return "Skupna vsota vseh črkovnih nizov lem:";
return I18N.get("exportTable.part.totalSumLetters") + " " + I18N.get("exportTable.part.lemma");
default:
return null;
}
} else if (ngram >= 1) {
switch (this) {
case WORD:
return "Skupna vsota vseh različnic:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.word");
case NORMALIZED_WORD:
return "Skupna vsota vseh normaliziranih različnic:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.normalizedWord");
case LEMMA:
return "Skupna vsota vseh lem:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.lemma");
case MORPHOSYNTACTIC_SPECS:
return "Skupna vsota vseh oblikoskladenjskih oznak:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.msd");
case MORPHOSYNTACTIC_PROPERTY:
return "Skupna vsota vseh oblikoskladenjskih lastnosti:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.msdProperty");
case WORD_TYPE:
return "Skupna vsota vseh besednih vrst:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.wordType");
case DIST_WORDS:
return "Skupna vsota vseh različnic:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.word");
case DIST_LEMMAS:
return "Skupna vsota vseh lem:";
return I18N.get("exportTable.part.totalSumString") + " " + I18N.get("exportTable.part.lemma");
default:
return null;
}
@ -96,42 +117,42 @@ public enum CalculateFor {
if (ngram == 0) {
switch (this) {
case WORD:
return "Skupna vsota vseh najdenih črkovnih nizov različnic:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.word");
case NORMALIZED_WORD:
return "Skupna vsota vseh najdenih črkovnih nizov normaliziranih različnic:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.normalizedWord");
case LEMMA:
return "Skupna vsota vseh najdenih črkovnih nizov lem:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.lemma");
case MORPHOSYNTACTIC_SPECS:
return "Skupna vsota vseh najdenih črkovnih nizov oblikoskladenjskih oznak:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.msd");
case MORPHOSYNTACTIC_PROPERTY:
return "Skupna vsota vseh najdenih črkovnih nizov oblikoskladenjskih lastnosti:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.msdProperty");
case WORD_TYPE:
return "Skupna vsota vseh najdenih črkovnih nizov besednih vrst:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.wordType");
case DIST_WORDS:
return "Skupna vsota vseh najdenih črkovnih nizov različnic:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.word");
case DIST_LEMMAS:
return "Skupna vsota vseh najdenih črkovnih nizov lem:";
return I18N.get("exportTable.part.totalFoundLetters") + " " + I18N.get("exportTable.part.lemma");
default:
return null;
}
} else if (ngram >= 1) {
switch (this) {
case WORD:
return "Skupna vsota vseh najdenih različnic:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.word");
case NORMALIZED_WORD:
return "Skupna vsota vseh najdenih normaliziranih različnic:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.normalizedWord");
case LEMMA:
return "Skupna vsota vseh najdenih lem:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.lemma");
case MORPHOSYNTACTIC_SPECS:
return "Skupna vsota vseh najdenih oblikoskladenjskih oznak:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.msd");
case MORPHOSYNTACTIC_PROPERTY:
return "Skupna vsota vseh najdenih oblikoskladenjskih lastnosti:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.msdProperty");
case WORD_TYPE:
return "Skupna vsota vseh najdenih besednih vrst:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.wordType");
case DIST_WORDS:
return "Skupna vsota vseh najdenih različnic:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.word");
case DIST_LEMMAS:
return "Skupna vsota vseh najdenih lem:";
return I18N.get("exportTable.part.totalFound") + " " + I18N.get("exportTable.part.lemma");
default:
return null;
}
@ -142,25 +163,25 @@ public enum CalculateFor {
public String totalAbsoluteFrequencyString(int ngram) {
if (ngram == 0) {
return "Skupna absolutna pogostost črkovnega niza";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.letterSet");
}
switch(this){
case WORD:
return "Skupna absolutna pogostost različnice";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.word2");
case NORMALIZED_WORD:
return "Skupna absolutna pogostost normalizirane različnice";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.normalizedWord2");
case LEMMA:
return "Skupna absolutna pogostost leme";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.lemma2");
case MORPHOSYNTACTIC_SPECS:
return "Skupna absolutna pogostost oblikoskladenjske oznake";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.msd2");
case MORPHOSYNTACTIC_PROPERTY:
return "Skupna absolutna pogostost oblikoskladenjske lastnosti";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.msdProperty2");
case WORD_TYPE:
return "Skupna absolutna pogostost besedne vrste";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.wordType2");
case DIST_WORDS:
return "Skupna absolutna pogostost različnice";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.word2");
case DIST_LEMMAS:
return "Skupna absolutna pogostost leme";
return I18N.get("exportTable.part.absoluteFrequency") + " " + I18N.get("exportTable.part.lemma2");
default:
return null;
}
@ -168,25 +189,25 @@ public enum CalculateFor {
public String shareOfTotalString(int ngram) {
if (ngram == 0) {
return "Delež glede na skupno vsoto vseh najdenih črkovnih nizov";
return I18N.get("exportTable.part.letterSet2");
}
switch(this){
case WORD:
return "Delež glede na vse najdene različnice";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.word2");
case NORMALIZED_WORD:
return "Delež glede na vse najdene normalizirane različnice";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.normalizedWord2");
case LEMMA:
return "Delež glede na vse najdene leme";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.lemma2");
case MORPHOSYNTACTIC_SPECS:
return "Delež glede na vse najdene oblikoskladenjske oznake";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.msd2");
case MORPHOSYNTACTIC_PROPERTY:
return "Delež glede na vse najdene oblikoskladenjske lastnosti";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.msdProperty2");
case WORD_TYPE:
return "Delež glede na vse najdene besedne vrste";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.wordType2");
case DIST_WORDS:
return "Delež glede na vse najdene različnice";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.word2");
case DIST_LEMMAS:
return "Delež glede na vse najdene leme";
return I18N.get("exportTable.part.share") + " " + I18N.get("exportTable.part.lemma2");
default:
return null;
}
@ -194,25 +215,23 @@ public enum CalculateFor {
public String toHeaderString(int ngram) {
if (ngram == 0) {
return "Črkovni niz";
return I18N.get("exportTable.part.letterSet3");
} else if (ngram == 1) {
switch (this) {
case WORD:
return "Različnica";
case NORMALIZED_WORD:
return "Normalizirana različnica";
case LEMMA:
return "Lema";
case MORPHOSYNTACTIC_SPECS:
return "Oblikoskladenjska oznaka";
case MORPHOSYNTACTIC_PROPERTY:
return "Oblikoskladenjska lastnost";
case WORD_TYPE:
return "Besedna vrsta";
case DIST_WORDS:
return "Različnica";
return I18N.get("exportTable.part.word3");
case NORMALIZED_WORD:
return I18N.get("exportTable.part.normalizedWord3");
case LEMMA:
case DIST_LEMMAS:
return "Lema";
return I18N.get("exportTable.part.lemma3");
case MORPHOSYNTACTIC_SPECS:
return I18N.get("exportTable.part.msd3");
case MORPHOSYNTACTIC_PROPERTY:
return I18N.get("exportTable.part.msdProperty3");
case WORD_TYPE:
return I18N.get("exportTable.part.wordType3");
default:
return null;
}
@ -220,18 +239,18 @@ public enum CalculateFor {
switch (this) {
case WORD:
case DIST_WORDS:
return "Različnica niza";
return I18N.get("exportTable.part.word3") + " " + I18N.get("exportTable.part.set");
case NORMALIZED_WORD:
return "Normalizirana različnica niza";
return I18N.get("exportTable.part.normalizedWord3") + " " + I18N.get("exportTable.part.set");
case LEMMA:
case DIST_LEMMAS:
return "Lema niza";
return I18N.get("exportTable.part.lemma3") + " " + I18N.get("exportTable.part.set");
case MORPHOSYNTACTIC_SPECS:
return "Oblikoskladenjska oznaka niza";
return I18N.get("exportTable.part.msd3") + " " + I18N.get("exportTable.part.set");
case MORPHOSYNTACTIC_PROPERTY:
return "Oblikoskladenjska lastnost niza";
return I18N.get("exportTable.part.msdProperty3") + " " + I18N.get("exportTable.part.set");
case WORD_TYPE:
return "Besedna vrsta niza";
return I18N.get("exportTable.part.wordType3") + " " + I18N.get("exportTable.part.set");
default:
return null;
}

View File

@ -8,6 +8,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import gui.I18N;
import javafx.collections.FXCollections;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@ -136,15 +137,15 @@ public class Corpus {
public boolean validate() {
if (corpusType == null) {
validationErrors.add(LABEL_RESULTS_CORPUS_TYPE_NOT_SET);
validationErrors.add(I18N.get("message.LABEL_RESULTS_CORPUS_TYPE_NOT_SET"));
}
if (chosenCorpusLocation == null) {
validationErrors.add(LABEL_CORPUS_LOCATION_NOT_SET);
validationErrors.add(I18N.get("message.LABEL_CORPUS_LOCATION_NOT_SET"));
}
if (chosenResultsLocation == null) {
validationErrors.add(LABEL_RESULTS_LOCATION_NOT_SET);
validationErrors.add(I18N.get("message.LABEL_RESULTS_LOCATION_NOT_SET"));
}
if (!headerRead && corpusType != null) {

View File

@ -12,6 +12,7 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import gui.I18N;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
@ -112,7 +113,7 @@ public class StatisticsNew {
if(ngramLevel == 0) {
sb.append(corpus.getCorpusType().toString())
.append(separator)
.append("crke")
.append(I18N.get("exportFileName.letters"))
.append(separator)
.append(filter.getCalculateFor())
.append(separator);
@ -120,30 +121,30 @@ public class StatisticsNew {
if (filter.getSuffixLength() != null && filter.getSuffixList() != null && filter.getPrefixLength() != null && filter.getPrefixList() != null) {
sb.append(corpus.getCorpusType().toString())
.append(separator)
.append("besedni-deli")
.append(I18N.get("exportFileName.wordParts"))
.append(separator)
.append(filter.getCalculateFor())
.append(separator);
} else {
sb.append(corpus.getCorpusType().toString())
.append(separator)
.append("besede")
.append(I18N.get("exportFileName.words"))
.append(separator)
.append(filter.getCalculateFor())
.append(separator);
}
}
else {
sb.append(filter.getAl().toString())
sb.append(corpus.getCorpusType().toString())
.append(separator)
.append(corpus.getCorpusType().toString())
.append(I18N.get("exportFileName.wordSets"))
.append(separator);
sb.append(filter.getCalculateFor().toString())
.append(separator);
// ngram value
sb.append(filter.getNgramValue()).append("-gram")
sb.append(filter.getNgramValue()).append(I18N.get("exportFileName.gram"))
.append(separator);
sb.append(filter.getSkipValue()).append("-preskok")
sb.append(filter.getSkipValue()).append(I18N.get("exportFileName.skip"))
.append(separator);
}
// TODO: assure skip is not null but zero
@ -229,6 +230,9 @@ public class StatisticsNew {
db.delete();
}
removeMinimalOccurrences(filter.getMinimalOccurrences());
removeMinimalTaxonomy(taxonomyResult, filter.getMinimalTaxonomy());
// if no results and nothing to save, return false
if (!(taxonomyResult.get(Taxonomy.TOTAL).size() > 0)) {
analysisProducedResults = false;
@ -237,8 +241,6 @@ public class StatisticsNew {
analysisProducedResults = true;
}
removeMinimalOccurrences(filter.getMinimalOccurrences());
removeMinimalTaxonomy(taxonomyResult, filter.getMinimalTaxonomy());
stats.add(ImmutablePair.of(resultTitle, getSortedResult(taxonomyResult.get(Taxonomy.TOTAL), Util.getValidInt(limit))));
Export.SetToCSV(stats, corpus.getChosenResultsLocation(), headerInfoBlock(), this, filter);
return true;
@ -465,40 +467,40 @@ public class StatisticsNew {
private LinkedHashMap<String, String> headerInfoBlock() {
LinkedHashMap<String, String> info = new LinkedHashMap<>();
info.put("Korpus:", corpus.getCorpusType().toString());
info.put(I18N.get("exportHeader.corpus"), corpus.getCorpusType().toString());
setTimeEnding();
info.put("Datum:", timeEnding.format(DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm")));
info.put(I18N.get("exportHeader.date"), timeEnding.format(DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm")));
// time elapsed
long seconds = ChronoUnit.MILLIS.between(timeBeginning, timeEnding) / 1000;
info.put("Čas izvajanja:", String.valueOf(seconds) + " s");
info.put(I18N.get("exportHeader.executionTime"), String.valueOf(seconds) + " s");
if (filter.getAl() == AnalysisLevel.STRING_LEVEL) {
Integer ngramLevel = filter.getNgramValue();
if (ngramLevel == 0)
info.put("Analiza:", "črke");
info.put(I18N.get("exportHeader.analysis"), I18N.get("exportHeader.analysis.letters"));
else if (ngramLevel == 1) {
// if suffixes or prefixes are not null print word parts
if (filter.getSuffixLength() != null || filter.getSuffixList() != null || filter.getPrefixLength() != null || filter.getPrefixList() != null) {
info.put("Analiza:", "besedni deli");
info.put(I18N.get("exportHeader.analysis"), I18N.get("exportHeader.analysis.wordParts"));
} else {
info.put("Analiza:", "besede");
info.put(I18N.get("exportHeader.analysis"), I18N.get("exportHeader.analysis.words"));
}
} else
info.put("Analiza:", filter.getAl().toString());
info.put(I18N.get("exportHeader.analysis"), I18N.get("exportHeader.analysis.wordSets"));
} else {
info.put("Analiza:", filter.getAl().toString());
info.put(I18N.get("exportHeader.analysis"), filter.getAl().toString());
}
// if (filter.getAl() == AnalysisLevel.STRING_LEVEL) {
Integer ngramLevel = filter.getNgramValue();
if (ngramLevel == 0){
info.put("Število črk:", filter.getStringLength().toString());
info.put(I18N.get("exportHeader.numberLetters"), filter.getStringLength().toString());
}
// calculate for
info.put("Izračunaj za:", filter.getCalculateFor().toString());
info.put(I18N.get("exportHeader.calculateFor"), filter.getCalculateFor().toString());
// also write
if (ngramLevel > 0) {
@ -508,34 +510,34 @@ public class StatisticsNew {
for (CalculateFor s : filter.getMultipleKeys()) {
mk.append(s.toString()).append("; ");
}
info.put("Upoštevaj tudi: ", String.join("; ", mk.substring(0, mk.length() - 2)));
info.put(I18N.get("exportHeader.alsoFilter"), String.join("; ", mk.substring(0, mk.length() - 2)));
} else {
info.put("Upoštevaj tudi: ", "");
info.put(I18N.get("exportHeader.alsoFilter"), "");
}
}
// data limitations
if (filter.getDisplayTaxonomy()){
info.put("Izpiši taksonomije: ", "da");
info.put(I18N.get("exportHeader.displayTaxonomies"), I18N.get("exportHeader.yes"));
} else {
info.put("Izpiši taksonomije: ", "ne");
info.put(I18N.get("exportHeader.displayTaxonomies"), I18N.get("exportHeader.no"));
}
// n.gram nivo
if (ngramLevel > 1) {
info.put("N-gram nivo:", String.valueOf(ngramLevel));
info.put(I18N.get("exportHeader.ngramLevel"), String.valueOf(ngramLevel));
}
// skip
if (ngramLevel > 1)
info.put("Preskok besed:", isNotEmpty(filter.getSkipValue()) ? filter.getSkipValue().toString() : "0");
info.put(I18N.get("exportHeader.skipValue"), isNotEmpty(filter.getSkipValue()) ? filter.getSkipValue().toString() : "0");
// note punctuations - ngram > 1
if(ngramLevel > 1) {
if (filter.getNotePunctuations()) {
info.put("Upoštevaj ločila: ", "da");
info.put(I18N.get("exportHeader.notePunctuations"), I18N.get("exportHeader.yes"));
} else {
info.put("Upoštevaj ločila: ", "ne");
info.put(I18N.get("exportHeader.notePunctuations"), I18N.get("exportHeader.no"));
}
}
@ -546,28 +548,28 @@ public class StatisticsNew {
for (Collocability s : filter.getCollocability()) {
mk.append(s.toString()).append("; ");
}
info.put("Kolokabilnost: ", String.join("; ", mk.substring(0, mk.length() - 2)));
info.put(I18N.get("exportHeader.collocability"), String.join("; ", mk.substring(0, mk.length() - 2)));
} else {
info.put("Kolokabilnost: ", "");
info.put(I18N.get("exportHeader.collocability"), "");
}
}
// fragmented MSD - n-gram = 1
if (info.get("Analiza:").equals("besede")){
if (info.get(I18N.get("exportHeader.analysis")).equals(I18N.get("exportHeader.analysis.words"))){
if (filter.getWriteMsdAtTheEnd()){
info.put("Izpiši razbit MSD: ", "da");
info.put(I18N.get("exportHeader.writeMSDAtTheEnd"), I18N.get("exportHeader.yes"));
} else {
info.put("Izpiši razbit MSD: ", "ne");
info.put(I18N.get("exportHeader.writeMSDAtTheEnd"), I18N.get("exportHeader.no"));
}
}
if (filter.getSuffixLength() != null || filter.getSuffixList() != null || filter.getPrefixLength() != null || filter.getPrefixList() != null) {
if (filter.getPrefixLength() > 0 || filter.getSuffixLength() > 0) {
info.put("Dolžina predpone: ", String.valueOf(filter.getPrefixLength()));
info.put("Dolžina pripone: ", String.valueOf(filter.getSuffixLength()));
info.put(I18N.get("exportHeader.prefixLength"), String.valueOf(filter.getPrefixLength()));
info.put(I18N.get("exportHeader.suffixLength"), String.valueOf(filter.getSuffixLength()));
} else {
info.put("Seznam predpon: ", String.join("; ", filter.getPrefixList()));
info.put("Seznam pripon: ", String.join("; ", filter.getSuffixList()));
info.put(I18N.get("exportHeader.prefixList"), String.join("; ", filter.getPrefixList()));
info.put(I18N.get("exportHeader.suffixList"), String.join("; ", filter.getSuffixList()));
}
}
@ -578,15 +580,15 @@ public class StatisticsNew {
msdPattern.append(pattern.toString()).append(" ");
}
info.put("Oznaka MSD:", msdPattern.toString());
info.put(I18N.get("exportHeader.msd"), msdPattern.toString());
} else {
info.put("Oznaka MSD:", "");
info.put(I18N.get("exportHeader.msd"), "");
}
// }
info.put("Taksonomija: ", "");
info.put(I18N.get("exportHeader.taxonomy"), "");
if (isNotEmpty(filter.getTaxonomy()) && Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType()) || filter.getDisplayTaxonomy()) {
ArrayList<String> tax = Tax.getTaxonomyForInfo(corpus.getCorpusType(), filter.getTaxonomy());
@ -631,14 +633,14 @@ public class StatisticsNew {
}
info.put("Min. št. pojavitev: ", String.valueOf(filter.getMinimalOccurrences()));
info.put("Min. št. taksonomij: ", String.valueOf(filter.getMinimalTaxonomy()));
info.put(I18N.get("exportHeader.minOccurrences"), String.valueOf(filter.getMinimalOccurrences()));
info.put(I18N.get("exportHeader.minTaxonomies"), String.valueOf(filter.getMinimalTaxonomy()));
if (corpus.getCorpusType() == CorpusType.SOLAR) {
HashMap<String, ObservableList<String>> filters = corpus.getSolarFilters();
if (!isEmpty(filters)) {
info.put("Dodatni filtri: ", "");
info.put(I18N.get("exportHeader.additionalFilters"), "");
for (Map.Entry<String, ObservableList<String>> f : filters.entrySet()) {
info.put(f.getKey(), StringUtils.join(f.getValue(), ", "));

View File

@ -5,6 +5,7 @@ import static gui.ValidationUtil.*;
import java.util.ArrayList;
import java.util.regex.Pattern;
import gui.I18N;
import org.apache.commons.lang3.StringUtils;
import gui.Messages;
@ -17,12 +18,12 @@ public class Validation {
// should not be null, error if null, because init failed
if (filter.getNgramValue() == null) {
errors.add(Messages.MISSING_NGRAM_LEVEL);
errors.add(I18N.get("message.MISSING_NGRAM_LEVEL"));
}
// should not be null, error if null, because init failed
if (filter.getCalculateFor() == null) {
errors.add(Messages.MISSING_CALCULATE_FOR);
errors.add(I18N.get("message.MISSING_CALCULATE_FOR"));
}
if (filter.getSkipValue() == null) {
@ -32,20 +33,20 @@ public class Validation {
if (filter.getNgramValue() != null && ValidationUtil.isEmpty(filter.getMsd()) &&
(filter.getMsd().size() != filter.getNgramValue())) {
if (!(filter.getMsd().size() == 1 && filter.getNgramValue() == 0) && !ValidationUtil.isEmpty(filter.getMsd()))
errors.add(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES);
errors.add(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"));
}
Integer ngramValue = filter.getNgramValue();
ArrayList<Pattern> msd = filter.getMsd();
if (ngramValue > 0 && !ValidationUtil.isEmpty(msd) && ngramValue != msd.size()) {
errors.add(String.format(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES, ngramValue, msd.size()));
errors.add(String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), ngramValue, msd.size()));
}
if (filter.getNgramValue() != null && filter.getNgramValue() == 0 && isEmpty(filter.getStringLength())) {
// if count letters, make sure that the length is given
// TODO: check that words we're adding in xml reader are longer than this value
errors.add(Messages.MISSING_STRING_LENGTH);
errors.add(I18N.get("message.MISSING_STRING_LENGTH"));
}
return isEmpty(errors) ? null : StringUtils.join(errors, ", \n");

View File

@ -2,6 +2,7 @@ package gui;
import data.*;
import javafx.application.HostServices;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
@ -35,6 +36,31 @@ public class CharacterAnalysisTab {
@FXML
public Label selectedFiltersLabel;
@FXML
public Label stringLengthL;
@FXML
public Label calculateForL;
@FXML
public Label displayTaxonomyL;
@FXML
public Label dataLimitL;
@FXML
public Label msdL;
@FXML
public Label taxonomyL;
@FXML
public Label minimalOccurrencesL;
@FXML
public Label minimalTaxonomyL;
@FXML
public Label solarFilters;
@ -90,6 +116,9 @@ public class CharacterAnalysisTab {
@FXML
private Button cancel;
@FXML
private Button changeLanguageB;
@FXML
public ProgressBar ngramProgressBar;
@FXML
@ -109,8 +138,12 @@ public class CharacterAnalysisTab {
private Filter filter;
private boolean useDb;
private HostServices hostService;
private ListChangeListener<String> taxonomyListener;
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("različnica", "lema");
private static final String [] N_GRAM_COMPUTE_FOR_LETTERS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_LETTERS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_LETTERS_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("različnica", "lema");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
@ -123,6 +156,8 @@ public class CharacterAnalysisTab {
characterAnalysisTab.getStylesheets().add("style.css");
characterAnalysisTab.getStyleClass().add("root");
manageTranslations();
currentMode = MODE.LETTER;
toggleMode(currentMode);
@ -138,8 +173,13 @@ public class CharacterAnalysisTab {
// });
calculateForCB.valueProperty().addListener((observable, oldValue, newValue) -> {
if(newValue == null){
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_LETTERS);
calculateForCB.getSelectionModel().select(newValue);
}
// System.out.println(oldValue);
// System.out.println(newValue);
calculateFor = CalculateFor.factory(newValue);
logger.info("calculateForCB:", calculateFor.toString());
});
@ -157,7 +197,7 @@ public class CharacterAnalysisTab {
int nOfRequiredMsdTokens = 1;
if (msdTmp.size() != nOfRequiredMsdTokens) {
String msg = String.format(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES, nOfRequiredMsdTokens, msdTmp.size());
String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size());
logAlert(msg);
showAlert(Alert.AlertType.ERROR, msg);
}
@ -181,10 +221,11 @@ public class CharacterAnalysisTab {
// taxonomy
if (Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType())) {
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
if (taxonomyListener != null){
taxonomyCCB.getCheckModel().getCheckedItems().removeListener(taxonomyListener);
}
taxonomyListener = new ListChangeListener<String>() {
boolean changing = true;
@Override
@ -211,8 +252,13 @@ public class CharacterAnalysisTab {
logger.info(String.format("Selected taxonomy: %s", StringUtils.join(checkedItems, ",")));
}
}
});
};
taxonomyCCB.getCheckModel().clearChecks();
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(taxonomyListener);
} else {
taxonomyCCB.setDisable(true);
}
@ -235,7 +281,7 @@ public class CharacterAnalysisTab {
logger.info("display taxonomy: ", displayTaxonomy);
});
displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB));
displayTaxonomyChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readDisplayTaxonomyChB")));
} else {
displayTaxonomyChB.setDisable(true);
}
@ -254,14 +300,14 @@ public class CharacterAnalysisTab {
String value = stringLengthTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("stringlengthTf: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("stringlengthTf: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
}
stringLength = Integer.parseInt(value);
} else {
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_MISSING_STRING_LENGTH);
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_MISSING_STRING_LENGTH"));
stringLengthTF.setText("1");
logAlert(WARNING_MISSING_STRING_LENGTH);
logAlert(I18N.get("message.WARNING_MISSING_STRING_LENGTH"));
}
}
});
@ -281,8 +327,8 @@ public class CharacterAnalysisTab {
String value = minimalOccurrencesTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalOccurrencesTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalOccurrences = Integer.parseInt(value);
}
@ -299,8 +345,8 @@ public class CharacterAnalysisTab {
String value = minimalTaxonomyTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalTaxonomyTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalTaxonomy = Integer.parseInt(value);
}
@ -316,6 +362,18 @@ public class CharacterAnalysisTab {
logger.info("compute button");
});
changeLanguageB.setOnAction(e -> {
if (I18N.getLocale() == new Locale.Builder().setLanguage("sl").setRegion("SI").build()){
I18N.setLocale(Locale.ENGLISH);
} else {
I18N.setLocale(new Locale.Builder().setLanguage("sl").setRegion("SI").build());
}
Messages.reload();
Messages.updateChooseCorpusL();
logger.info("change language");
});
helpH.setOnAction(e -> openHelpWebsite());
cancel.setVisible(false);
@ -412,6 +470,27 @@ public class CharacterAnalysisTab {
//
// }
private void manageTranslations(){
helpH.textProperty().bind(I18N.createStringBinding("hyperlink.help"));
changeLanguageB.textProperty().bind(I18N.createStringBinding("button.language"));
computeNgramsB.textProperty().bind(I18N.createStringBinding("button.computeNgrams"));
cancel.textProperty().bind(I18N.createStringBinding("button.cancel"));
stringLengthL.textProperty().bind(I18N.createStringBinding("label.stringLength"));
calculateForL.textProperty().bind(I18N.createStringBinding("label.calculateFor"));
displayTaxonomyL.textProperty().bind(I18N.createStringBinding("label.displayTaxonomy"));
dataLimitL.textProperty().bind(I18N.createStringBinding("label.dataLimit"));
msdL.textProperty().bind(I18N.createStringBinding("label.msd"));
taxonomyL.textProperty().bind(I18N.createStringBinding("label.taxonomy"));
minimalOccurrencesL.textProperty().bind(I18N.createStringBinding("label.minimalOccurrences"));
minimalTaxonomyL.textProperty().bind(I18N.createStringBinding("label.minimalTaxonomy"));
solarFilters.textProperty().bind(I18N.createStringBinding("label.solarFilters"));
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_LETTERS));
}
/**
* Toggles visibility for panes which hold fields for skipgram value (not applicable when calculating for letters) etc.,
* sets combobox values to what is applicable ...
@ -533,11 +612,11 @@ public class CharacterAnalysisTab {
readXML(f.toString(), statistic);
i++;
if (isCancelled()) {
updateMessage(CANCELING_NOTIFICATION);
updateMessage(I18N.get("message.CANCELING_NOTIFICATION"));
break;
}
this.updateProgress(i, corpusFiles.size());
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
return null;
@ -551,12 +630,12 @@ public class CharacterAnalysisTab {
try {
boolean successullySaved = statistic.saveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
}
@ -568,7 +647,7 @@ public class CharacterAnalysisTab {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
@ -579,7 +658,7 @@ public class CharacterAnalysisTab {
});
task.setOnCancelled(e -> {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_CANCLED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED"));
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
ngramProgressBar.setStyle(Settings.FX_ACCENT_OK);

View File

@ -6,10 +6,7 @@ import static gui.Messages.*;
import static util.Util.*;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.*;
import javafx.scene.layout.AnchorPane;
import org.apache.commons.io.FileUtils;
@ -57,6 +54,9 @@ public class CorpusTab {
@FXML
private Button chooseResultsLocationB;
@FXML
private Button changeLanguageB;
@FXML
private Label chooseCorpusL;
private String chooseCorpusLabelContent;
@ -91,6 +91,9 @@ public class CorpusTab {
private WordLevelTab wlController;
private HostServices hostService;
private String corpusLocation;
private String corpusFilesSize;
public void initialize() {
// add CSS style
@ -99,16 +102,18 @@ public class CorpusTab {
stage = new Stage();
manageTranslations();
// add listeners
chooseCorpusLocationB.setOnAction(e -> chooseCorpusLocation());
chooseCorpusLocationB.setTooltip(new Tooltip(TOOLTIP_chooseCorpusLocationB));
chooseCorpusLocationB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_chooseCorpusLocationB")));
helpH.setOnAction(e -> openHelpWebsite());
readHeaderInfoChB.selectedProperty().addListener((observable, oldValue, newValue) -> {
readHeaderInfo = newValue;
logger.info("read headers: ", readHeaderInfo);
});
readHeaderInfoChB.setTooltip(new Tooltip(TOOLTIP_readHeaderInfoChB));
readHeaderInfoChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readHeaderInfoChB")));
// gosUseOrthChB.selectedProperty().addListener((observable, oldValue, newValue) -> {
// gosUseOrth = newValue;
@ -123,18 +128,52 @@ public class CorpusTab {
chooseResultsLocationB.setOnAction(e -> chooseResultsLocation(null));
changeLanguageB.setOnAction(e -> {
if (I18N.getLocale() == new Locale.Builder().setLanguage("sl").setRegion("SI").build()){
I18N.setLocale(Locale.ENGLISH);
} else {
I18N.setLocale(new Locale.Builder().setLanguage("sl").setRegion("SI").build());
}
Messages.reload();
// StringBuilder sb = new StringBuilder();
// sb.append(corpusLocation)
// .append("\n")
// .append(String.format(I18N.get("message.NOTIFICATION_FOUND_X_FILES"), corpusFilesSize))
// .append("\n")
// .append(String.format(I18N.get("message.NOTIFICATION_CORPUS"), corpusType.toString()));
//
// chooseCorpusLabelContent = sb.toString();
// chooseCorpusL.textProperty().unbind();
// chooseCorpusL.setText(chooseCorpusLabelContent);
Messages.updateChooseCorpusL();
logger.info("change language");
});
// set labels and toggle visibility
// toggleGosChBVisibility();
chooseCorpusLabelContent = Messages.LABEL_CORPUS_LOCATION_NOT_SET;
chooseCorpusL.setText(chooseCorpusLabelContent);
chooseResultsLabelContent = Messages.LABEL_RESULTS_LOCATION_NOT_SET;
chooseResultsL.setText(chooseResultsLabelContent);
// chooseCorpusLabelContent = Messages.LABEL_CORPUS_LOCATION_NOT_SET;
// chooseCorpusL.setText(chooseCorpusLabelContent);
//
// chooseResultsLabelContent = Messages.LABEL_RESULTS_LOCATION_NOT_SET;
// chooseResultsL.setText(chooseResultsLabelContent);
togglePiAndSetCorpusWrapper(false);
}
private void manageTranslations(){
chooseCorpusLocationB.textProperty().bind(I18N.createStringBinding("button.setCorpusLocation"));
readHeaderInfoChB.textProperty().bind(I18N.createStringBinding("checkBox.readHeaderInfo"));
chooseResultsLocationB.textProperty().bind(I18N.createStringBinding("button.chooseResultsLocation"));
helpH.textProperty().bind(I18N.createStringBinding("hyperlink.help"));
changeLanguageB.textProperty().bind(I18N.createStringBinding("button.language"));
chooseCorpusL.textProperty().bind(I18N.createStringBinding("message.LABEL_CORPUS_LOCATION_NOT_SET"));
chooseResultsL.textProperty().bind(I18N.createStringBinding("message.LABEL_RESULTS_LOCATION_NOT_SET"));
}
private void togglePiAndSetCorpusWrapper(boolean piIsActive) {
locationScanPI.setVisible(piIsActive);
setCorpusWrapperP.setLayoutX(piIsActive ? 100.0 : 10.0);
@ -166,18 +205,23 @@ public class CorpusTab {
// scan for xml files
Collection<File> corpusFiles = FileUtils.listFiles(selectedDirectory, FileFilterUtils.suffixFileFilter("xml", IOCase.INSENSITIVE), TrueFileFilter.INSTANCE);
corpusLocation = selectedDirectory.getAbsolutePath();
corpusFilesSize = String.valueOf(corpusFiles.size());
Messages.setChooseCorpusProperties(corpusLocation, corpusFilesSize, corpusType != null ? corpusType.toString() : null);
// make sure there are corpus files in selected directory or notify the user about it
if (corpusFiles.size() == 0) {
logger.info("alert: ", WARNING_CORPUS_NOT_FOUND);
showAlert(Alert.AlertType.ERROR, WARNING_CORPUS_NOT_FOUND, null);
logger.info("alert: ", I18N.get("message.WARNING_CORPUS_NOT_FOUND"));
showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_CORPUS_NOT_FOUND"), null);
} else {
String chooseCorpusLabelContentTmp = detectCorpusType(corpusFiles, selectedDirectory.getAbsolutePath());
String chooseCorpusLabelContentTmp = detectCorpusType(corpusFiles);
if (chooseCorpusLabelContentTmp == null) {
logger.info("alert: ", WARNING_CORPUS_NOT_FOUND);
showAlert(Alert.AlertType.ERROR, WARNING_CORPUS_NOT_FOUND, null);
logger.info("alert: ", I18N.get("message.WARNING_CORPUS_NOT_FOUND"));
showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_CORPUS_NOT_FOUND"), null);
} else {
initNewCorpus(selectedDirectory, corpusFiles);
Messages.setChooseCorpusProperties(corpusLocation, corpusFilesSize, corpusType.toString());
corpus.setChosenCorpusLocation(selectedDirectory);
corpus.setDetectedCorpusFiles(corpusFiles);
@ -221,11 +265,12 @@ public class CorpusTab {
File chosenResultsLocationTmp = new File(resultsLocationPath);
if (!ValidationUtil.isValidDirectory(chosenResultsLocationTmp)) {
showAlert(Alert.AlertType.ERROR, WARNING_RESULTS_DIR_NOT_VALID);
logger.info("alert: ", WARNING_RESULTS_DIR_NOT_VALID);
showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_RESULTS_DIR_NOT_VALID"));
logger.info("alert: ", I18N.get("message.WARNING_RESULTS_DIR_NOT_VALID"));
} else {
corpus.setChosenResultsLocation(chosenResultsLocationTmp);
chooseResultsLabelContent = corpus.getChosenResultsLocation().getAbsolutePath();
chooseResultsL.textProperty().unbind();
chooseResultsL.setText(chooseResultsLabelContent);
logger.info("results dir: " + chooseResultsLabelContent);
}
@ -241,14 +286,15 @@ public class CorpusTab {
String defaultResultsLocationPath = corpus.getChosenCorpusLocation().getAbsolutePath();
logger.info("setting default results location to: ", defaultResultsLocationPath);
chooseCorpusL.setText(chooseCorpusLabelContent);
Messages.setChooseCorpusL(chooseCorpusL, chooseCorpusLabelContent);
}
private void readHeaderInfo() {
CorpusType corpusType = corpus.getCorpusType();
Collection<File> corpusFiles = corpus.getDetectedCorpusFiles();
togglePiAndSetCorpusWrapper(true);
chooseCorpusL.setText(LABEL_SCANNING_CORPUS);
chooseCorpusL.textProperty().unbind();
chooseCorpusL.setText(I18N.get("message.LABEL_SCANNING_CORPUS"));
logger.info("reading header data for ", corpusType.toString());
@ -270,6 +316,8 @@ public class CorpusTab {
i++;
if (corpusIsSplit) {
// System.out.println(i);
// System.out.println(corpusFiles.size());
updateProgress(i, corpusFiles.size());
}
}
@ -287,12 +335,12 @@ public class CorpusTab {
if (ValidationUtil.isEmpty(readTaxonomy)) {
// if no taxonomy found alert the user and keep other tabs disabled
logger.info("No taxonomy found in headers.");
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_NO_TAXONOMY_FOUND);
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_NO_TAXONOMY_FOUND"));
} else {
// set taxonomy, update label
corpus.setTaxonomy(readTaxonomy);
corpus.setHeaderRead(true);
chooseCorpusL.setText(chooseCorpusLabelContent);
Messages.setChooseCorpusL(chooseCorpusL, chooseCorpusLabelContent);
setResults();
setCorpusForAnalysis();
}
@ -353,14 +401,14 @@ public class CorpusTab {
if (ValidationUtil.isEmpty(values)) {
// if no taxonomy found alert the user and keep other tabs disabled
logger.info("No solar filters found in headers.");
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_NO_SOLAR_FILTERS_FOUND);
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_NO_SOLAR_FILTERS_FOUND"));
} else {
HashMap<String, ObservableList<String>> filtersForComboBoxes = SolarFilters.getFiltersForComboBoxes(values);
// set taxonomy, update label
corpus.setSolarFiltersForXML(values);
corpus.setSolarFilters(filtersForComboBoxes);
corpus.setHeaderRead(true);
chooseCorpusL.setText(chooseCorpusLabelContent);
Messages.setChooseCorpusL(chooseCorpusL, chooseCorpusLabelContent);
setResults();
setCorpusForAnalysis();
}
@ -432,7 +480,7 @@ public class CorpusTab {
// gosUseOrthChB.setVisible(corpus != null && corpus.getCorpusType() != null && corpus.getCorpusType() == CorpusType.GOS);
// }
private String detectCorpusType(Collection<File> corpusFiles, String corpusLocation) {
private String detectCorpusType(Collection<File> corpusFiles) {
// check that we recognize this corpus
// read first file only, maybe later do all, if toll on resources is acceptable
File f = corpusFiles.iterator().next();
@ -460,12 +508,14 @@ public class CorpusTab {
} else {
corpus.setCorpusType(corpusType);
Messages.setChooseCorpusProperties(corpusLocation, corpusFilesSize, corpusType.toString());
StringBuilder sb = new StringBuilder();
sb.append(corpusLocation)
.append("\n")
.append(String.format(NOTIFICATION_FOUND_X_FILES, corpusFiles.size()))
.append(String.format(I18N.get("message.NOTIFICATION_FOUND_X_FILES"), corpusFiles.size()))
.append("\n")
.append(String.format("Korpus: %s", corpusType.toString()));
.append(String.format(I18N.get("message.NOTIFICATION_CORPUS"), corpusType.toString()));
String result = sb.toString();

View File

@ -2,6 +2,7 @@ package gui;
import java.io.IOException;
import javafx.beans.binding.StringBinding;
import javafx.scene.layout.AnchorPane;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -82,9 +83,25 @@ public class GUIController extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
// File fileDir = new File("message_sl_unicode.properties");
//
// BufferedReader in = new BufferedReader(
// new InputStreamReader(
// new FileInputStream(fileDir), "UTF8"));
//
// String str;
//
// while ((str = in.readLine()) != null) {
// System.out.println(str);
// }
//
// in.close();
Parent root = FXMLLoader.load(getClass().getResource("/GUI.fxml"));
// Parent root = FXMLLoader.load(ResourceLookup.resources.url("GUI.fxml"));
primaryStage.setTitle("GUI");
// primaryStage.setTitle("Luščilnik");
// StringBinding a = I18N.createStringBinding("window.title");
primaryStage.titleProperty().bind(I18N.createStringBinding("window.title"));
Scene scene = new Scene(root, 800, 600);
// https://github.com/dicolar/jbootx
// scene.getStylesheets().add(GUIController.class.getResource("bootstrap3.css").toExternalForm())
@ -103,6 +120,8 @@ public class GUIController extends Application {
gui.getStyleClass().add("root");
corpus = new Corpus();
manageTranslations();
ctController.setCorpus(corpus);
ctController.setFilterTab(filterTab);
ctController.setStringLevelTabNew2(StringLevelTabNew2);
@ -146,6 +165,15 @@ public class GUIController extends Application {
tabPane.getTabs().removeAll(filterTab);
}
private void manageTranslations(){
corpusTab.textProperty().bind(I18N.createStringBinding("tab.corpusTab"));
filterTab.textProperty().bind(I18N.createStringBinding("tab.filterTab"));
CharacterLevelTabNew.textProperty().bind(I18N.createStringBinding("tab.characterLevelTabNew"));
wordLevelTab.textProperty().bind(I18N.createStringBinding("tab.wordLevelTab"));
OneWordAnalysisTab.textProperty().bind(I18N.createStringBinding("tab.oneWordAnalysisTab"));
StringLevelTabNew2.textProperty().bind(I18N.createStringBinding("tab.stringLevelTabNew2"));
}
static void showAlert(Alert.AlertType alertType, String headerText, String contentText) {
Alert alert = new Alert(alertType);
alert.setTitle(Messages.windowTitles.get(alertType));

230
src/main/java/gui/I18N.java Normal file
View File

@ -0,0 +1,230 @@
package gui;
import com.sun.javafx.collections.ObservableListWrapper;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.Callable;
public final class I18N {
private static final ObjectProperty<Locale> locale;
static {
locale = new SimpleObjectProperty<>(getDefaultLocale());
locale.addListener((observable, oldValue, newValue) -> Locale.setDefault(newValue));
}
/**
* get the supported Locales.
*
* @return List of Locale objects.
*/
public static List<Locale> getSupportedLocales() {
return new ArrayList<>(Arrays.asList(new Locale.Builder().setLanguage("sl").setRegion("SI").build(), Locale.ENGLISH));
}
/**
* get the default locale. This is the systems default if contained in the supported locales, english otherwise.
*
* @return
*/
public static Locale getDefaultLocale() {
Locale sysDefault = Locale.getDefault();
return getSupportedLocales().contains(sysDefault) ? sysDefault : new Locale.Builder().setLanguage("sl").setRegion("SI").build();
}
public static Locale getLocale() {
return locale.get();
}
public static void setLocale(Locale locale) {
localeProperty().set(locale);
Locale.setDefault(locale);
}
public static ObjectProperty<Locale> localeProperty() {
return locale;
}
/**
* gets the string with the given key from the resource bundle for the current locale and uses it as first argument
* to MessageFormat.format, passing in the optional args and returning the result.
*
* @param key
* message key
* @param args
* optional arguments for the message
* @return localized formatted string
*/
public static String get(final String key, final Object... args) {
ResourceBundle bundle = ResourceBundle.getBundle("message", getLocale());
String val = bundle.getString(key);
try {
return MessageFormat.format(new String(val.getBytes("ISO-8859-1"), "UTF-8"), args);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return val;
// return MessageFormat.format(bundle.getString(key), args);
}
public static ObservableList<String> getObject(final ArrayList<String> keys, final Object... args) {
ResourceBundle bundle = ResourceBundle.getBundle("message", getLocale());
ArrayList<String> results = new ArrayList<>();
for(String key : keys){
String val = bundle.getString(key);
try {
results.add(MessageFormat.format(new String(val.getBytes("ISO-8859-1"), "UTF-8"), args));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return FXCollections.observableArrayList(results);
}
/**
* creates a String binding to a localized String for the given message bundle key
*
* @param key
* key
* @return String binding
*/
public static StringBinding createStringBinding(final String key, Object... args) {
return Bindings.createStringBinding(() -> get(key, args), locale);
}
// public static ObservableValue<ObservableList<String>> createListStringBinding(final String key, Object... args) {
// ObservableList<StringBinding> r = (ObservableList<StringBinding>) new ArrayList<StringBinding>();
// r.add(Bindings.createStringBinding(() -> get(key, args), locale));
// return r;
// }
/**
* creates a Object Binding to a localized Object that is computed by calling the given func
*
* @param func
* function called on every change
* @return StringBinding
*/
public static StringBinding createStringBinding(Callable<String> func) {
return Bindings.createStringBinding(func, locale);
}
/**
* creates a String binding to a localized String for the given message bundle key
*
* @param keys
* key
* @return ObjectBinding
*/
public static ObjectBinding createObjectBinding(final ArrayList<String> keys, Object... args) {
return Bindings.createObjectBinding(() -> getObject(keys, args), locale);
}
// public static ObservableValue<ObservableList<String>> createListStringBinding(final String key, Object... args) {
// ObservableList<StringBinding> r = (ObservableList<StringBinding>) new ArrayList<StringBinding>();
// r.add(Bindings.createStringBinding(() -> get(key, args), locale));
// return r;
// }
/**
* creates a String Binding to a localized String that is computed by calling the given func
*
* @param func
* function called on every change
* @return ObjectBinding
*/
public static ObjectBinding createObjectBinding(Callable<String> func) {
return Bindings.createObjectBinding(func, locale);
}
public static String getIndependent(final String key, Locale locale, final Object... args) {
ResourceBundle bundle = ResourceBundle.getBundle("message", locale);
String val = bundle.getString(key);
try {
return MessageFormat.format(new String(val.getBytes("ISO-8859-1"), "UTF-8"), args);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return val;
// return MessageFormat.format(bundle.getString(key), args);
}
public static String getTranslatedValue(String oldValue, ArrayList<String> nGramComputeForLetters) {
Locale loc;
if(getLocale().equals(Locale.ENGLISH)) {
loc = new Locale.Builder().setLanguage("sl").setRegion("SI").build();
} else {
loc = Locale.ENGLISH;
}
for (String el : nGramComputeForLetters){
if (oldValue.equals(getIndependent(el, loc))){
return get(el);
}
}
// in case translated language doesn't contain specified word, try original language
for (String el : nGramComputeForLetters){
if (oldValue.equals(get(el))){
return get(el);
}
}
return null;
}
/**
* Returns translated FXCollection
*
* @param words
* function called on every change
* @return ObjectBinding
*/
public static ObservableList<String> translatedObservableList(ArrayList<String> words){
ArrayList<String> translatedWords = new ArrayList<>();
for (String word : words){
translatedWords.add(get(word));
}
return FXCollections.observableArrayList(translatedWords);
}
/**
* DUPLICATE OF toString()
* searches for possible values in translations and returns key of the string
* == .toString()
*
* @param w, prefix
* function called on every change
* @return ObjectBinding
*/
public static String findI18NString(String w, String prefix){
ResourceBundle bundle = ResourceBundle.getBundle("message", getLocale());
for (String key : bundle.keySet()){
if(prefix.length() > key.length() || !key.substring(0, prefix.length()).equals(prefix)){
continue;
}
String val = bundle.getString(key);
try {
String newVal = new String(val.getBytes("ISO-8859-1"), "UTF-8");
if (newVal.equals(w)){
return key;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return null;
}
}

View File

@ -5,62 +5,65 @@ import static javafx.scene.control.Alert.AlertType.*;
import java.util.HashMap;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
public class Messages {
// warnings & errors
public static final String WARNING_CORPUS_NOT_FOUND = "V izbranem direktoriju ni ustreznih korpusnih datotek.";
public static final String WARNING_RESULTS_DIR_NOT_VALID = "Za dostop do izbranega direktorija nimate potrebnih pravic.";
public static final String WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS = "Izbran nivo ngramov in vpisano št. besed v filtru se ne ujemata.";
public static final String WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS_INFO = "Izberite drugo število ali popravite filter.";
public static final String WARNING_WORD_OR_LEMMA = "Izberite, če želite statistiko izračunati za besede ali leme.";
public static final String WARNING_ONLY_NUMBERS_ALLOWED = "Prosim vnesite veljavno število.";
public static final String WARNING_NUMBER_TOO_BIG = "Vnešeno število je večje od števila taksonomij.";
public static final String WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES = "Število za ngram (%d) in število msd oznak (%d) se morata ujemati.";
public static final String WARNING_MISSING_STRING_LENGTH = "Dolžina niza mora biti večja od 0. Vstavljena je privzeta vrednost (1).";
public static final String WARNING_NO_TAXONOMY_FOUND = "Iz korpusnih datotek ni bilo moč razbrati taksonomije. Prosim izberite drugo lokacijo ali korpus.";
public static final String WARNING_NO_SOLAR_FILTERS_FOUND = "Iz korpusnih datotek ni bilo moč razbrati filtrov. Prosim izberite drugo lokacijo ali korpus.";
public static final String ERROR_WHILE_EXECUTING = "Prišlo je do napake med izvajanjem.";
public static final String ERROR_WHILE_SAVING_RESULTS_TO_CSV = "Prišlo je do napake med shranjevanje rezultatov.";
public static final String ERROR_NOT_ENOUGH_MEMORY= "Na voljo imate premalo pomnilnika (RAM-a) za analizo takšne količine podatkov.";
public static String WARNING_CORPUS_NOT_FOUND = I18N.get("message.WARNING_CORPUS_NOT_FOUND");
public static String WARNING_RESULTS_DIR_NOT_VALID = I18N.get("message.WARNING_RESULTS_DIR_NOT_VALID");
public static String WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS = I18N.get("message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS");
public static String WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS_INFO = I18N.get("message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS_INFO");
public static String WARNING_WORD_OR_LEMMA = I18N.get("message.WARNING_WORD_OR_LEMMA");
public static String WARNING_ONLY_NUMBERS_ALLOWED = I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED");
public static String WARNING_NUMBER_TOO_BIG = I18N.get("message.WARNING_NUMBER_TOO_BIG");
public static String WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES = I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES");
public static String WARNING_MISSING_STRING_LENGTH = I18N.get("message.WARNING_MISSING_STRING_LENGTH");
public static String WARNING_NO_TAXONOMY_FOUND = I18N.get("message.WARNING_NO_TAXONOMY_FOUND");
public static String WARNING_NO_SOLAR_FILTERS_FOUND = I18N.get("message.WARNING_NO_SOLAR_FILTERS_FOUND");
public static String ERROR_WHILE_EXECUTING = I18N.get("message.ERROR_WHILE_EXECUTING");
public static String ERROR_WHILE_SAVING_RESULTS_TO_CSV = I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV");
public static String ERROR_NOT_ENOUGH_MEMORY= I18N.get("message.ERROR_NOT_ENOUGH_MEMORY");
// missing
public static final String MISSING_NGRAM_LEVEL = "N-gram nivo";
public static final String MISSING_CALCULATE_FOR = "Izračunaj za";
public static final String MISSING_SKIP = "";
public static final String MISSING_STRING_LENGTH = "Dolžina niza";
public static final String MISMATCHED_STRING_LENGTH_AND_MSD_REGEX = "Neujemajoča dolžina niza in regex filter";
public static String MISSING_NGRAM_LEVEL = I18N.get("message.MISSING_NGRAM_LEVEL");
public static String MISSING_CALCULATE_FOR = I18N.get("message.MISSING_CALCULATE_FOR");
public static String MISSING_SKIP = I18N.get("message.MISSING_SKIP");
public static String MISSING_STRING_LENGTH = I18N.get("message.MISSING_STRING_LENGTH");
public static String MISMATCHED_STRING_LENGTH_AND_MSD_REGEX = I18N.get("message.MISMATCHED_STRING_LENGTH_AND_MSD_REGEX");
// general notifications - static content/set only once
public static final String NOTIFICATION_FOUND_X_FILES = "Št. najdenih datotek: %d";
public static final String NOTIFICATION_ANALYSIS_COMPLETED = "Analiza je zaključena, rezultati so shranjeni.";
public static final String NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS = "Analiza je zaključena, vendar ni bilo moč izračunati statistike, ki bi ustrezala vsem navedenim pogojem.";
public static final String RESULTS_PATH_SET_TO_DEFAULT = "Lokacija za shranjevanje rezultatov je nastavljena na lokacijo korpusa.";
public static final String NOTIFICATION_ANALYSIS_CANCLED = "Analiziranje je bilo prekinjeno.";
public static String NOTIFICATION_FOUND_X_FILES = I18N.get("message.NOTIFICATION_FOUND_X_FILES");
public static String NOTIFICATION_ANALYSIS_COMPLETED = I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED");
public static String NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS = I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS");
public static String RESULTS_PATH_SET_TO_DEFAULT = I18N.get("message.RESULTS_PATH_SET_TO_DEFAULT");
public static String NOTIFICATION_ANALYSIS_CANCLED = I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED");
// ongoing notifications - displayed while processing, dynamically changing
public static final String ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y = "Analiziram datoteko %d od %d (%s)";
public static final String CANCELING_NOTIFICATION = "Prekinjeno";
public static String ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y = I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y");
public static String CANCELING_NOTIFICATION = I18N.get("message.CANCELING_NOTIFICATION");
// Labels
public static final String LABEL_CORPUS_LOCATION_NOT_SET = "Lokacija korpusa ni nastavljena";
public static final String LABEL_RESULTS_LOCATION_NOT_SET = "Lokacija za shranjevanje rezultatov ni nastavljena";
public static final String LABEL_RESULTS_CORPUS_TYPE_NOT_SET = "Vrsta korpusa ni nastavljena";
public static String LABEL_CORPUS_LOCATION_NOT_SET = I18N.get("message.LABEL_CORPUS_LOCATION_NOT_SET");
public static String LABEL_RESULTS_LOCATION_NOT_SET = I18N.get("message.LABEL_RESULTS_LOCATION_NOT_SET");
public static String LABEL_RESULTS_CORPUS_TYPE_NOT_SET = I18N.get("message.LABEL_RESULTS_CORPUS_TYPE_NOT_SET");
public static final String LABEL_SCANNING_CORPUS = "Iskanje in analiza korpusnih datotek...";
public static final String LABEL_SCANNING_SINGLE_FILE_CORPUS = "Analiza vnosa ";
public static final String COMPLETED = "končano";
public static final String TOOLTIP_chooseCorpusLocationB = "Izberite mapo v kateri se nahaja korpus. Program izbrano mapo preišče rekurzivno, zato bodite pozorni, da ne izberete mape z več korpusi ali z mnogo datotekami, ki niso del korpusa.";
public static final String TOOLTIP_readHeaderInfoChB = "Če izberete to opcijo, se bo iz headerjev korpusa prebrala razpoložljiva taksonomija oz. filtri (korpus Šolar). Ta operacija lahko traja dlje časa, sploh če je korpus združen v eni sami datoteki.";
public static final String TOOLTIP_readNotePunctuationsChB = "Ločila med povedmi se upoštevajo v vsakem primeru.";
public static final String TOOLTIP_readDisplayTaxonomyChB = "V izhodni datoteki bodo prikazane tudi statistike po taksonomijah.";
public static String LABEL_SCANNING_CORPUS = I18N.get("message.LABEL_SCANNING_CORPUS");
public static String LABEL_SCANNING_SINGLE_FILE_CORPUS = I18N.get("message.LABEL_SCANNING_SINGLE_FILE_CORPUS");
public static String COMPLETED = I18N.get("message.COMPLETED");
public static String TOOLTIP_chooseCorpusLocationB = I18N.get("message.TOOLTIP_chooseCorpusLocationB");
public static String TOOLTIP_readHeaderInfoChB = I18N.get("message.TOOLTIP_readHeaderInfoChB");
public static String TOOLTIP_readNotePunctuationsChB = I18N.get("message.TOOLTIP_readNotePunctuationsChB");
public static String TOOLTIP_readDisplayTaxonomyChB = I18N.get("message.TOOLTIP_readDisplayTaxonomyChB");
private static Label chooseCorpusL;
private static String chooseCorpusLabelContent;
private static String[] chooseCorpusLabelProperties;
// Not properly to be here. TODO move somewhere else in future
public static final String HELP_URL = "http://slovnica.ijs.si/";
public static String HELP_URL = "http://slovnica.ijs.si/";
// helper maps
/**
@ -73,8 +76,46 @@ public class Messages {
static {
// automatically set window's title
windowTitles.put(ERROR, "Napaka");
windowTitles.put(WARNING, "Opozorilo");
windowTitles.put(CONFIRMATION, "Potrdilo");
windowTitles.put(ERROR, I18N.get("windowTitles.error"));
windowTitles.put(WARNING, I18N.get("windowTitles.warning"));
windowTitles.put(CONFIRMATION, I18N.get("windowTitles.confirmation"));
}
public static void reload(){
LABEL_CORPUS_LOCATION_NOT_SET = I18N.createStringBinding("message.LABEL_CORPUS_LOCATION_NOT_SET").get();
windowTitles = new HashMap<>();
windowTitles.put(ERROR, I18N.get("windowTitles.error"));
windowTitles.put(WARNING, I18N.get("windowTitles.warning"));
windowTitles.put(CONFIRMATION, I18N.get("windowTitles.confirmation"));
}
public static void setChooseCorpusL(Label chooseCorpus, String chooseCorpusLabel){
chooseCorpusL = chooseCorpus;
chooseCorpusLabelContent = chooseCorpusLabel;
chooseCorpusL.textProperty().unbind();
chooseCorpusL.setText(chooseCorpusLabelContent);
}
public static void setChooseCorpusProperties(String corpusLoc, String corpusFilesSi, String corpusName){
chooseCorpusLabelProperties = new String[3];
chooseCorpusLabelProperties[0] = corpusLoc;
chooseCorpusLabelProperties[1] = corpusFilesSi;
chooseCorpusLabelProperties[2] = corpusName;
}
public static void updateChooseCorpusL(){
if (chooseCorpusLabelProperties != null && chooseCorpusLabelProperties[0] != null && chooseCorpusLabelProperties[1] != null && chooseCorpusLabelProperties[2] != null) {
StringBuilder sb = new StringBuilder();
sb.append(chooseCorpusLabelProperties[0])
.append("\n")
.append(String.format(I18N.get("message.NOTIFICATION_FOUND_X_FILES"), chooseCorpusLabelProperties[1]))
.append("\n")
.append(String.format(I18N.get("message.NOTIFICATION_CORPUS"), chooseCorpusLabelProperties[2]));
chooseCorpusLabelContent = sb.toString();
chooseCorpusL.textProperty().unbind();
chooseCorpusL.setText(chooseCorpusLabelContent);
}
}
}

View File

@ -2,6 +2,8 @@ package gui;
import data.*;
import javafx.application.HostServices;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
@ -36,9 +38,37 @@ public class OneWordAnalysisTab {
@FXML
public Label selectedFiltersLabel;
@FXML
public Label solarFilters;
@FXML
public Label calculateForL;
@FXML
public Label alsoVisualizeL;
@FXML
public Label displayTaxonomyL;
@FXML
public Label writeMsdAtTheEndL;
@FXML
public Label dataLimitL;
@FXML
public Label msdL;
@FXML
public Label taxonomyL;
@FXML
public Label minimalOccurrencesL;
@FXML
public Label minimalTaxonomyL;
@FXML
private TextField msdTF;
private ArrayList<Pattern> msd;
@ -75,6 +105,9 @@ public class OneWordAnalysisTab {
@FXML
private Button computeNgramsB;
@FXML
private Button changeLanguageB;
@FXML
private Button cancel;
@ -98,17 +131,49 @@ public class OneWordAnalysisTab {
private Filter filter;
private boolean useDb;
private HostServices hostService;
private ListChangeListener<String> taxonomyListener;
private ListChangeListener<String> alsoVisualizeListener;
private ChangeListener<String> calculateForListener;
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica");
// private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
// private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
// private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY = {"calculateFor.WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "normalizirana različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA", "calculateFor.MORPHOSYNTACTIC_SPECS", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY = {"calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_LEMMA = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS_GOS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final String [] ALSO_VISUALIZE_ITEMS_MSD_ARRAY = {"calculateFor.WORD_TYPE"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_MSD = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_MSD_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
private static final String [] ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY = {};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_EMPTY = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY));
// TODO: pass observables for taxonomy based on header scan
// after header scan
@ -120,51 +185,112 @@ public class OneWordAnalysisTab {
oneWordAnalysisTabPane.getStylesheets().add("style.css");
oneWordAnalysisTabPane.getStyleClass().add("root");
manageTranslations();
currentMode = MODE.WORD;
toggleMode(currentMode);
AtomicBoolean writeMsdAtTheEndEnableCalculateFor = new AtomicBoolean(false);
// calculateForCB
calculateForCB.valueProperty().addListener((observable, oldValue, newValue) -> {
calculateFor = CalculateFor.factory(newValue);
alsoVisualizeCCB.getItems().removeAll();
if(newValue.equals("lema")){
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
} else if(newValue.equals("različnica")) {
if (corpus.getCorpusType() == CorpusType.GOS)
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWordGos);
else
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWord);
} else if(newValue.equals("normalizirana različnica")) {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsNormalizedWord);
} else if(newValue.equals("oblikoskladenjska oznaka")) {
writeMsdAtTheEndEnableCalculateFor.set(true);
writeMsdAtTheEndChB.setDisable(false);
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsMsd);
}else {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsEmpty);
if (calculateForListener != null){
calculateForCB.valueProperty().removeListener(calculateForListener);
}
if (!newValue.equals("oblikoskladenjska oznaka")){
// calculateForCB
calculateForListener = new ChangeListener<String>() {
boolean ignoreCode = false;
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (ignoreCode) {
return;
}
boolean languageChanged = newValue == null;
ArrayList<Integer> checkedIndices = new ArrayList<>();
checkedIndices.addAll(alsoVisualizeCCB.getCheckModel().getCheckedIndices());
if (languageChanged) {
ignoreCode = true;
if (corpus.getCorpusType() == CorpusType.GOS) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_GOS);
calculateForCB.getSelectionModel().select(newValue);
} else {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS);
calculateForCB.getSelectionModel().select(newValue);
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.getSelectionModel().select(newValue);
}
ignoreCode = false;
}
calculateFor = CalculateFor.factory(newValue);
if (alsoVisualizeListener != null) {
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
if (newValue.equals(CalculateFor.LEMMA.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
} else if (newValue.equals(CalculateFor.WORD.toString())) {
if (corpus.getCorpusType() == CorpusType.GOS)
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS_GOS));
else
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS));
} else if (newValue.equals(CalculateFor.NORMALIZED_WORD.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS));
} else if (newValue.equals(CalculateFor.MORPHOSYNTACTIC_SPECS.toString())) {
writeMsdAtTheEndEnableCalculateFor.set(true);
writeMsdAtTheEndChB.setDisable(false);
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_MSD));
} else {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_EMPTY));
}
if (!newValue.equals(CalculateFor.MORPHOSYNTACTIC_SPECS.toString())) {
writeMsdAtTheEnd = false;
writeMsdAtTheEndChB.setSelected(false);
writeMsdAtTheEndChB.setDisable(true);
writeMsdAtTheEndEnableCalculateFor.set(false);
}
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
if (checkedItems.contains(CalculateFor.MORPHOSYNTACTIC_SPECS.toString()) || writeMsdAtTheEndEnableCalculateFor.get()) {
writeMsdAtTheEndChB.setDisable(false);
} else {
writeMsdAtTheEnd = false;
writeMsdAtTheEndChB.setSelected(false);
writeMsdAtTheEndChB.setDisable(true);
}
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
alsoVisualizeCCB.getCheckModel().clearChecks();
}
};
// alsoVisualizeCCB.getCheckModel().clearChecks();
// alsoVisualizeCCB.getItems().removeAll();
// alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
if (languageChanged) {
for (int i : checkedIndices) {
alsoVisualizeCCB.getCheckModel().check(i);
}
}
logger.info("calculateForCB:", calculateFor.toString());
});
}
};
calculateForCB.valueProperty().addListener(calculateForListener);
calculateForCB.getSelectionModel().select(0);
@ -180,7 +306,7 @@ public class OneWordAnalysisTab {
int nOfRequiredMsdTokens = 1;
if (msdTmp.size() != nOfRequiredMsdTokens) {
String msg = String.format(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES, nOfRequiredMsdTokens, msdTmp.size());
String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size());
logAlert(msg);
showAlert(Alert.AlertType.ERROR, msg);
}
@ -202,9 +328,13 @@ public class OneWordAnalysisTab {
msdTF.setText("");
msd = new ArrayList<>();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
if (alsoVisualizeListener != null){
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
@ -216,16 +346,21 @@ public class OneWordAnalysisTab {
writeMsdAtTheEndChB.setDisable(true);
}
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
}
};
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
// taxonomy
if (Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType())) {
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
if (taxonomyListener != null){
taxonomyCCB.getCheckModel().getCheckedItems().removeListener(taxonomyListener);
}
ListChangeListener<String> listener = new ListChangeListener<String>() {
taxonomyListener = new ListChangeListener<String>() {
public boolean changing = true;
@Override
@ -254,14 +389,12 @@ public class OneWordAnalysisTab {
}
};
// taxonomyCCB.getCheckModel().getCheckedItems().removeListener(listener);
// System.out.println("THIS WORKS!!!!");
taxonomyCCB.getCheckModel().clearChecks();
// System.out.println("YES???");
taxonomyCCB.getCheckModel().getCheckedItems().addListener(listener);
// taxonomyCCB.setCheckModel(null);
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
// taxonomyCCB.getCheckModel().clearChecks();
taxonomyCCB.getCheckModel().getCheckedItems().addListener(taxonomyListener);
} else {
taxonomyCCB.setDisable(true);
}
@ -283,7 +416,7 @@ public class OneWordAnalysisTab {
}
logger.info("display taxonomy: ", displayTaxonomy);
});
displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB));
displayTaxonomyChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readDisplayTaxonomyChB")));
} else {
displayTaxonomyChB.setDisable(true);
}
@ -312,8 +445,8 @@ public class OneWordAnalysisTab {
String value = minimalOccurrencesTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalOccurrencesTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalOccurrences = Integer.parseInt(value);
}
@ -330,8 +463,8 @@ public class OneWordAnalysisTab {
String value = minimalTaxonomyTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalTaxonomyTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalTaxonomy = Integer.parseInt(value);
}
@ -342,6 +475,17 @@ public class OneWordAnalysisTab {
}
});
changeLanguageB.setOnAction(e -> {
if (I18N.getLocale() == new Locale.Builder().setLanguage("sl").setRegion("SI").build()){
I18N.setLocale(Locale.ENGLISH);
} else {
I18N.setLocale(new Locale.Builder().setLanguage("sl").setRegion("SI").build());
}
Messages.reload();
Messages.updateChooseCorpusL();
logger.info("change language");
});
computeNgramsB.setOnAction(e -> {
compute();
logger.info("compute button");
@ -429,6 +573,25 @@ public class OneWordAnalysisTab {
// taxonomyCCB.getItems().addAll(taxonomyCCBValues);
//
// }
private void manageTranslations(){
helpH.textProperty().bind(I18N.createStringBinding("hyperlink.help"));
changeLanguageB.textProperty().bind(I18N.createStringBinding("button.language"));
computeNgramsB.textProperty().bind(I18N.createStringBinding("button.computeNgrams"));
cancel.textProperty().bind(I18N.createStringBinding("button.cancel"));
calculateForL.textProperty().bind(I18N.createStringBinding("label.calculateFor"));
alsoVisualizeL.textProperty().bind(I18N.createStringBinding("label.alsoVisualize"));
displayTaxonomyL.textProperty().bind(I18N.createStringBinding("label.displayTaxonomy"));
writeMsdAtTheEndL.textProperty().bind(I18N.createStringBinding("label.writeMsdAtTheEnd"));
dataLimitL.textProperty().bind(I18N.createStringBinding("label.dataLimit"));
msdL.textProperty().bind(I18N.createStringBinding("label.msd"));
taxonomyL.textProperty().bind(I18N.createStringBinding("label.taxonomy"));
minimalOccurrencesL.textProperty().bind(I18N.createStringBinding("label.minimalOccurrences"));
minimalTaxonomyL.textProperty().bind(I18N.createStringBinding("label.minimalTaxonomy"));
solarFilters.textProperty().bind(I18N.createStringBinding("label.solarFilters"));
}
/**
* Toggles visibility for panes which hold fields for skipgram value (not applicable when calculating for letters) etc.,
@ -444,25 +607,18 @@ public class OneWordAnalysisTab {
logger.info("mode: ", mode.toString());
if (mode == MODE.WORD) {
if (corpus.getCorpusType() == CorpusType.GOS)
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS);
else
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS);
} else if (mode == MODE.LETTER) {
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_LETTERS);
// if calculateFor was selected for something other than a word or a lemma -> reset
if (!(calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LEMMA)) {
// if the user selected something else before selecting ngram for letters, reset that choice
calculateFor = CalculateFor.WORD;
calculateForCB.getSelectionModel().select("različnica");
if (corpus.getCorpusType() == CorpusType.GOS) {
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_GOS));
} else {
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS));
}
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_ORTH));
msdTF.setDisable(true);
} else {
msdTF.setDisable(false);
@ -549,11 +705,11 @@ public class OneWordAnalysisTab {
readXML(f.toString(), statistic);
i++;
if (isCancelled()) {
updateMessage(CANCELING_NOTIFICATION);
updateMessage(I18N.get("message.CANCELING_NOTIFICATION"));
break;
}
this.updateProgress(i, corpusFiles.size());
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
return null;
@ -567,12 +723,12 @@ public class OneWordAnalysisTab {
try {
boolean successullySaved = statistic.saveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
}
@ -584,7 +740,7 @@ public class OneWordAnalysisTab {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
@ -595,7 +751,7 @@ public class OneWordAnalysisTab {
});
task.setOnCancelled(e -> {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_CANCLED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED"));
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
ngramProgressBar.setStyle(Settings.FX_ACCENT_OK);

View File

@ -13,6 +13,8 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Pattern;
import javafx.application.HostServices;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.layout.AnchorPane;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.StringUtils;
@ -38,9 +40,53 @@ public class StringAnalysisTabNew2 {
@FXML
public Label selectedFiltersLabel;
@FXML
public Label solarFilters;
@FXML
public Label calculateForL;
@FXML
public Label alsoVisualizeL;
@FXML
public Label displayTaxonomyL;
@FXML
public Label dataLimitL;
@FXML
public Label msdL;
@FXML
public Label taxonomyL;
@FXML
public Label minimalOccurrencesL;
@FXML
public Label minimalTaxonomyL;
@FXML
public Label skipValueL;
@FXML
public Label slowSpeedWarning1L;
@FXML
public Label slowSpeedWarning2L;
@FXML
public Label ngramValueL;
@FXML
public Label notePunctuationsL;
@FXML
public Label collocabilityL;
@FXML
private TextField msdTF;
private ArrayList<Pattern> msd;
@ -103,6 +149,9 @@ public class StringAnalysisTabNew2 {
@FXML
private Button computeNgramsB;
@FXML
private Button changeLanguageB;
@FXML
private Button cancel;
@ -126,19 +175,50 @@ public class StringAnalysisTabNew2 {
private Filter filter;
private boolean useDb;
private HostServices hostService;
private ListChangeListener<String> taxonomyListener;
private ListChangeListener<String> alsoVisualizeListener;
private ListChangeListener<String> collocabilityListener;
private ChangeListener<String> calculateForListener;
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
// private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
// private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
// private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final ObservableList<String> COLLOCABILITY_ITEMS = FXCollections.observableArrayList("Dice", "t-score", "MI", "MI3", "logDice", "simple LL");
private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
// private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY = {"calculateFor.WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "normalizirana različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA", "calculateFor.MORPHOSYNTACTIC_SPECS", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY = {"calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_LEMMA = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS_GOS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final String [] ALSO_VISUALIZE_ITEMS_MSD_ARRAY = {"calculateFor.WORD_TYPE"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_MSD = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_MSD_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
private static final String [] ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY = {};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_EMPTY = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY));
// TODO: pass observables for taxonomy based on header scan
@ -151,6 +231,8 @@ public class StringAnalysisTabNew2 {
stringAnalysisTabPaneNew2.getStylesheets().add("style.css");
stringAnalysisTabPaneNew2.getStyleClass().add("root");
manageTranslations();
currentMode = MODE.WORD;
toggleMode(currentMode);
@ -195,7 +277,7 @@ public class StringAnalysisTabNew2 {
notePunctuations = newValue;
logger.info("note punctuations: ", notePunctuations);
});
notePunctuationsChB.setTooltip(new Tooltip(TOOLTIP_readNotePunctuationsChB));
notePunctuationsChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readNotePunctuationsChB")));
displayTaxonomy = false;
displayTaxonomyChB.setSelected(false);
@ -215,48 +297,111 @@ public class StringAnalysisTabNew2 {
}
logger.info("display taxonomy: ", displayTaxonomy);
});
displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB));
displayTaxonomyChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readDisplayTaxonomyChB")));
} else {
displayTaxonomyChB.setDisable(true);
}
if (calculateForListener != null){
calculateForCB.valueProperty().removeListener(calculateForListener);
}
// calculateForCB
calculateForCB.valueProperty().addListener((observable, oldValue, newValue) -> {
calculateForListener = new ChangeListener<String>() {
boolean ignoreCode = false;
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (ignoreCode) {
return;
}
boolean languageChanged = newValue == null;
ArrayList<Integer> checkedIndices = new ArrayList<>();
checkedIndices.addAll(alsoVisualizeCCB.getCheckModel().getCheckedIndices());
if (languageChanged) {
ignoreCode = true;
if (corpus.getCorpusType() == CorpusType.GOS) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_GOS);
calculateForCB.getSelectionModel().select(newValue);
} else {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS);
calculateForCB.getSelectionModel().select(newValue);
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.getSelectionModel().select(newValue);
}
ignoreCode = false;
}
calculateFor = CalculateFor.factory(newValue);
alsoVisualizeCCB.getItems().removeAll();
if(newValue.equals("lema")){
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
} else if(newValue.equals("različnica")) {
if (corpus.getCorpusType() == CorpusType.GOS)
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWordGos);
else
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWord);
} else if(newValue.equals("normalizirana različnica")) {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsNormalizedWord);
}else if(newValue.equals("oblikoskladenjska oznaka")) {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsMsd);
}else {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsEmpty);
if (alsoVisualizeListener != null) {
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
if (newValue.equals(CalculateFor.LEMMA.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
} else if (newValue.equals(CalculateFor.WORD.toString())) {
if (corpus.getCorpusType() == CorpusType.GOS)
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS_GOS));
else
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS));
} else if (newValue.equals(CalculateFor.NORMALIZED_WORD.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS));
} else if (newValue.equals(CalculateFor.MORPHOSYNTACTIC_SPECS.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_MSD));
} else {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_EMPTY));
}
// alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
// alsoVisualize = new ArrayList<>();
// ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
// alsoVisualize.addAll(checkedItems);
// logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
// });
// alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
alsoVisualizeCCB.getCheckModel().clearChecks();
}
};
// alsoVisualizeCCB.getCheckModel().clearChecks();
// alsoVisualizeCCB.getItems().removeAll();
// alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
if (languageChanged) {
for (int i : checkedIndices) {
alsoVisualizeCCB.getCheckModel().check(i);
}
}
logger.info("calculateForCB:", calculateFor.toString());
});
}
};
calculateForCB.valueProperty().addListener(calculateForListener);
calculateForCB.getSelectionModel().select(0);
// collocabilityCCB
collocabilityCCB.getItems().removeAll();
if (collocabilityListener != null){
collocabilityCCB.getCheckModel().getCheckedItems().removeListener(collocabilityListener);
}
collocabilityCCB.getItems().setAll(FXCollections.observableArrayList(COLLOCABILITY_ITEMS));
collocabilityCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
collocabilityListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
collocability = new ArrayList<>();
ObservableList<Collocability> checkedItems = FXCollections.observableArrayList();
for (String el : collocabilityCCB.getCheckModel().getCheckedItems()) {
@ -264,8 +409,24 @@ public class StringAnalysisTabNew2 {
}
collocability.addAll(checkedItems);
logger.info(String.format("Selected collocabilities: %s", StringUtils.join(collocabilityCCB.getCheckModel().getCheckedItems(), ",")));
});
}
};
collocabilityCCB.getCheckModel().clearChecks();
collocabilityCCB.getItems().removeAll();
collocabilityCCB.getItems().setAll(FXCollections.observableArrayList(COLLOCABILITY_ITEMS));
collocabilityCCB.getCheckModel().getCheckedItems().addListener(collocabilityListener);
// collocabilityCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
// collocability = new ArrayList<>();
// ObservableList<Collocability> checkedItems = FXCollections.observableArrayList();
// for (String el : collocabilityCCB.getCheckModel().getCheckedItems()) {
// checkedItems.add(Collocability.factory(el));
// }
// collocability.addAll(checkedItems);
// logger.info(String.format("Selected collocabilities: %s", StringUtils.join(collocabilityCCB.getCheckModel().getCheckedItems(), ",")));
// });
// msd
msdTF.focusedProperty().addListener((observable, oldValue, newValue) -> {
@ -279,7 +440,7 @@ public class StringAnalysisTabNew2 {
int nOfRequiredMsdTokens = ngramValue == 0 ? 1 : ngramValue;
if (msdTmp.size() != nOfRequiredMsdTokens) {
String msg = String.format(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES, nOfRequiredMsdTokens, msdTmp.size());
String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size());
logAlert(msg);
showAlert(Alert.AlertType.ERROR, msg);
}
@ -301,22 +462,32 @@ public class StringAnalysisTabNew2 {
msdTF.setText("");
msd = new ArrayList<>();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
if (alsoVisualizeListener != null){
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
}
};
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
// taxonomy
if (Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType())) {
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
if (taxonomyListener != null){
taxonomyCCB.getCheckModel().getCheckedItems().removeListener(taxonomyListener);
}
taxonomyListener = new ListChangeListener<String>() {
boolean changing = true;
@Override
@ -343,8 +514,13 @@ public class StringAnalysisTabNew2 {
logger.info(String.format("Selected taxonomy: %s", StringUtils.join(checkedItems, ",")));
}
}
});
};
taxonomyCCB.getCheckModel().clearChecks();
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(taxonomyListener);
} else {
taxonomyCCB.setDisable(true);
}
@ -373,14 +549,14 @@ public class StringAnalysisTabNew2 {
String value = stringLengthTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("stringlengthTf: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("stringlengthTf: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
}
stringLength = Integer.parseInt(value);
} else {
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_MISSING_STRING_LENGTH);
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_MISSING_STRING_LENGTH"));
stringLengthTF.setText("1");
logAlert(WARNING_MISSING_STRING_LENGTH);
logAlert(I18N.get("message.WARNING_MISSING_STRING_LENGTH"));
}
}
});
@ -391,8 +567,8 @@ public class StringAnalysisTabNew2 {
String value = minimalOccurrencesTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalOccurrencesTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalOccurrences = Integer.parseInt(value);
}
@ -409,8 +585,8 @@ public class StringAnalysisTabNew2 {
String value = minimalTaxonomyTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalTaxonomyTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalTaxonomy = Integer.parseInt(value);
}
@ -421,6 +597,17 @@ public class StringAnalysisTabNew2 {
}
});
changeLanguageB.setOnAction(e -> {
if (I18N.getLocale() == new Locale.Builder().setLanguage("sl").setRegion("SI").build()){
I18N.setLocale(Locale.ENGLISH);
} else {
I18N.setLocale(new Locale.Builder().setLanguage("sl").setRegion("SI").build());
}
Messages.reload();
Messages.updateChooseCorpusL();
logger.info("change language");
});
computeNgramsB.setOnAction(e -> {
compute();
logger.info("compute button");
@ -534,6 +721,32 @@ public class StringAnalysisTabNew2 {
//
// }
private void manageTranslations(){
helpH.textProperty().bind(I18N.createStringBinding("hyperlink.help"));
changeLanguageB.textProperty().bind(I18N.createStringBinding("button.language"));
computeNgramsB.textProperty().bind(I18N.createStringBinding("button.computeNgrams"));
cancel.textProperty().bind(I18N.createStringBinding("button.cancel"));
calculateForL.textProperty().bind(I18N.createStringBinding("label.calculateFor"));
alsoVisualizeL.textProperty().bind(I18N.createStringBinding("label.alsoVisualize"));
displayTaxonomyL.textProperty().bind(I18N.createStringBinding("label.displayTaxonomy"));
// writeMsdAtTheEndL.textProperty().bind(I18N.createStringBinding("label.writeMsdAtTheEnd"));
skipValueL.textProperty().bind(I18N.createStringBinding("label.skipValue"));
slowSpeedWarning1L.textProperty().bind(I18N.createStringBinding("label.slowSpeedWarning"));
slowSpeedWarning2L.textProperty().bind(I18N.createStringBinding("label.slowSpeedWarning"));
ngramValueL.textProperty().bind(I18N.createStringBinding("label.ngramValue"));
notePunctuationsL.textProperty().bind(I18N.createStringBinding("label.notePunctuations"));
collocabilityL.textProperty().bind(I18N.createStringBinding("label.collocability"));
dataLimitL.textProperty().bind(I18N.createStringBinding("label.dataLimit"));
msdL.textProperty().bind(I18N.createStringBinding("label.msd"));
taxonomyL.textProperty().bind(I18N.createStringBinding("label.taxonomy"));
minimalOccurrencesL.textProperty().bind(I18N.createStringBinding("label.minimalOccurrences"));
minimalTaxonomyL.textProperty().bind(I18N.createStringBinding("label.minimalTaxonomy"));
solarFilters.textProperty().bind(I18N.createStringBinding("label.solarFilters"));
}
/**
* Toggles visibility for panes which hold fields for skipgram value (not applicable when calculating for letters) etc.,
* sets combobox values to what is applicable ...
@ -553,36 +766,20 @@ public class StringAnalysisTabNew2 {
// if (corpus.getCorpusType() == CorpusType.GOS)
// calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS);
// else
if (corpus.getCorpusType() == CorpusType.GOS)
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS);
else
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS);
// calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS);
} else if (mode == MODE.LETTER) {
paneWords.setVisible(false);
paneLetters.setVisible(true);
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_LETTERS);
// populate with default cvv length value
if (stringLength == null) {
stringLengthTF.setText("1");
stringLength = 1;
if (corpus.getCorpusType() == CorpusType.GOS) {
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_GOS));
} else {
stringLengthTF.setText(String.valueOf(stringLength));
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS));
}
// if calculateFor was selected for something other than a word or a lemma -> reset
if (!(calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LEMMA)) {
// if the user selected something else before selecting ngram for letters, reset that choice
calculateFor = CalculateFor.WORD;
calculateForCB.getSelectionModel().select("različnica");
}
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_ORTH));
msdTF.setDisable(true);
} else {
msdTF.setDisable(false);
@ -676,9 +873,9 @@ public class StringAnalysisTabNew2 {
i++;
this.updateProgress(i, corpusFiles.size() * 2);
if (statistic.getFilter().getCollocability().size() > 0) {
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size() * 2, f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size() * 2, f.getName()));
} else {
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
}
@ -690,22 +887,21 @@ public class StringAnalysisTabNew2 {
progressLabel.textProperty().bind(task.messageProperty());
task.setOnSucceeded(e -> {
System.out.print("test");
try {
System.out.print(statistic);
// calculate_collocabilities(statistic, statisticsOneGrams);
statistic.updateCalculateCollocabilities(statisticsOneGrams);
boolean successullySaved = statistic.saveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
} catch (OutOfMemoryError e1) {
showAlert(Alert.AlertType.ERROR, ERROR_NOT_ENOUGH_MEMORY);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_NOT_ENOUGH_MEMORY"));
logger.error("Out of memory error", e1);
}
// try {
@ -731,7 +927,7 @@ public class StringAnalysisTabNew2 {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
@ -742,7 +938,7 @@ public class StringAnalysisTabNew2 {
});
task.setOnCancelled(e -> {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_CANCLED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED"));
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
ngramProgressBar.setStyle(Settings.FX_ACCENT_OK);
@ -778,15 +974,15 @@ public class StringAnalysisTabNew2 {
readXML(f.toString(), statistic);
i++;
if (isCancelled()) {
updateMessage(CANCELING_NOTIFICATION);
updateMessage(I18N.get("message.CANCELING_NOTIFICATION"));
break;
}
if (statistic.getFilter().getCollocability().size() > 0) {
this.updateProgress(i, corpusFiles.size() * 2);
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size() * 2, f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size() * 2, f.getName()));
} else {
this.updateProgress(i, corpusFiles.size());
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
// this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size() * 2, f.getName()));
}
@ -816,15 +1012,15 @@ public class StringAnalysisTabNew2 {
// System.out.print(statistics);
boolean successullySaved = statistic.saveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
} catch (OutOfMemoryError e1) {
showAlert(Alert.AlertType.ERROR, ERROR_NOT_ENOUGH_MEMORY);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_NOT_ENOUGH_MEMORY"));
logger.error("Out of memory error", e1);
}
ngramProgressBar.progressProperty().unbind();
@ -838,7 +1034,7 @@ public class StringAnalysisTabNew2 {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
@ -849,7 +1045,7 @@ public class StringAnalysisTabNew2 {
});
task.setOnCancelled(e -> {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_CANCLED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED"));
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
ngramProgressBar.setStyle(Settings.FX_ACCENT_OK);

View File

@ -99,8 +99,8 @@ public class WordFormationTab {
String value = minimalOccurrencesTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalOccurrencesTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalOccurrences = Integer.parseInt(value);
}
@ -117,8 +117,8 @@ public class WordFormationTab {
String value = minimalTaxonomyTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalTaxonomyTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalTaxonomy = Integer.parseInt(value);
}
@ -180,7 +180,7 @@ public class WordFormationTab {
readXML(f.toString(), statistic);
i++;
this.updateProgress(i, corpusFiles.size());
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
return null;
@ -196,12 +196,12 @@ public class WordFormationTab {
boolean successullySaved = statistic.recalculateAndSaveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
}
@ -212,7 +212,7 @@ public class WordFormationTab {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);

View File

@ -2,6 +2,8 @@ package gui;
import data.*;
import javafx.application.HostServices;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
@ -33,9 +35,52 @@ public class WordLevelTab {
@FXML
public Label selectedFiltersLabel;
@FXML
public Label solarFilters;
@FXML
public Label calculateForL;
@FXML
public Label alsoVisualizeL;
@FXML
public Label displayTaxonomyL;
@FXML
public Label lengthSearchL;
@FXML
public Label prefixLengthL;
@FXML
public Label suffixLengthL;
@FXML
public Label listSearchL;
@FXML
public Label prefixListL;
@FXML
public Label suffixListL;
@FXML
public Label dataLimitL;
@FXML
public Label msdL;
@FXML
public Label taxonomyL;
@FXML
public Label minimalOccurrencesL;
@FXML
public Label minimalTaxonomyL;
@FXML
private TextField msdTF;
private ArrayList<Pattern> msd;
@ -88,6 +133,9 @@ public class WordLevelTab {
@FXML
private Button computeNgramsB;
@FXML
private Button changeLanguageB;
@FXML
private Button cancel;
@ -111,17 +159,38 @@ public class WordLevelTab {
private Filter filter;
private boolean useDb;
private HostServices hostService;
private ListChangeListener<String> taxonomyListener;
private ListChangeListener<String> alsoVisualizeListener;
private ChangeListener<String> calculateForListener;
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS = FXCollections.observableArrayList("lema", "različnica");
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY = {"calculateFor.WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_ORTH = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_ORTH_ARRAY));
// private static final ObservableList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "normalizirana različnica");
private static final String [] N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY = {"calculateFor.WORD", "calculateFor.LEMMA", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> N_GRAM_COMPUTE_FOR_WORDS_GOS = new ArrayList<>(Arrays.asList(N_GRAM_COMPUTE_FOR_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY = {"calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_LEMMA = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_LEMMA_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica");
private static final String [] ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS", "calculateFor.NORMALIZED_WORD"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_WORDS_GOS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_WORDS_GOS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka");
private static final String [] ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY = {"calculateFor.LEMMA", "calculateFor.WORD_TYPE", "calculateFor.MORPHOSYNTACTIC_SPECS"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsMsd = FXCollections.observableArrayList("besedna vrsta");
private static final String [] ALSO_VISUALIZE_ITEMS_MSD_ARRAY = {"calculateFor.WORD_TYPE"};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_MSD = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_MSD_ARRAY));
// private static final ObservableList<String> alsoVisualizeItemsEmpty = FXCollections.observableArrayList();
private static final String [] ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY = {};
private static final ArrayList<String> ALSO_VISUALIZE_ITEMS_EMPTY = new ArrayList<>(Arrays.asList(ALSO_VISUALIZE_ITEMS_EMPTY_ARRAY));
// TODO: pass observables for taxonomy based on header scan
// after header scan
@ -133,32 +202,71 @@ public class WordLevelTab {
wordLevelAnalysisTabPane.getStylesheets().add("style.css");
wordLevelAnalysisTabPane.getStyleClass().add("root");
manageTranslations();
currentMode = MODE.WORD;
toggleMode(currentMode);
AtomicBoolean writeMsdAtTheEndEnableCalculateFor = new AtomicBoolean(false);
if (calculateForListener != null){
calculateForCB.valueProperty().removeListener(calculateForListener);
}
// calculateForCB
calculateForCB.valueProperty().addListener((observable, oldValue, newValue) -> {
calculateForListener = new ChangeListener<String>() {
boolean ignoreCode = false;
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (ignoreCode){
return;
}
boolean languageChanged = newValue == null;
ArrayList<Integer> checkedIndices = new ArrayList<>();
checkedIndices.addAll(alsoVisualizeCCB.getCheckModel().getCheckedIndices());
if (languageChanged) {
ignoreCode = true;
if (corpus.getCorpusType() == CorpusType.GOS) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_GOS);
calculateForCB.getSelectionModel().select(newValue);
} else {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS);
calculateForCB.getSelectionModel().select(newValue);
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
newValue = I18N.getTranslatedValue(oldValue, N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.getSelectionModel().select(newValue);
}
ignoreCode = false;
}
calculateFor = CalculateFor.factory(newValue);
if (alsoVisualizeListener != null) {
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
if(newValue.equals("lema")){
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
} else if(newValue.equals("različnica")) {
if (newValue.equals(CalculateFor.LEMMA.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
} else if (newValue.equals(CalculateFor.WORD.toString())) {
if (corpus.getCorpusType() == CorpusType.GOS)
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWordGos);
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS_GOS));
else
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsWord);
} else if(newValue.equals("normalizirana različnica")) {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsNormalizedWord);
} else if(newValue.equals("oblikoskladenjska oznaka")) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_WORDS));
} else if (newValue.equals(CalculateFor.NORMALIZED_WORD.toString())) {
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_NORMALIZED_WORDS));
} else if (newValue.equals(CalculateFor.MORPHOSYNTACTIC_SPECS.toString())) {
// writeMsdAtTheEndEnableCalculateFor.set(true);
// writeMsdAtTheEndChB.setDisable(false);
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsMsd);
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_MSD));
} else {
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsEmpty);
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_EMPTY));
}
// if (!newValue.equals("oblikoskladenjska oznaka")){
@ -168,16 +276,33 @@ public class WordLevelTab {
// writeMsdAtTheEndEnableCalculateFor.set(false);
// }
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
alsoVisualizeCCB.getCheckModel().clearChecks();
}
};
// alsoVisualizeCCB.getCheckModel().clearChecks();
// alsoVisualizeCCB.getItems().removeAll();
// alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
if (languageChanged) {
for (int i : checkedIndices) {
alsoVisualizeCCB.getCheckModel().check(i);
}
}
logger.info("calculateForCB:", calculateFor.toString());
});
}
};
calculateForCB.valueProperty().addListener(calculateForListener);
calculateForCB.getSelectionModel().select(0);
@ -302,7 +427,7 @@ public class WordLevelTab {
int nOfRequiredMsdTokens = 1;
if (msdTmp.size() != nOfRequiredMsdTokens) {
String msg = String.format(Messages.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES, nOfRequiredMsdTokens, msdTmp.size());
String msg = String.format(I18N.get("message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES"), nOfRequiredMsdTokens, msdTmp.size());
logAlert(msg);
showAlert(Alert.AlertType.ERROR, msg);
}
@ -324,29 +449,34 @@ public class WordLevelTab {
msdTF.setText("");
msd = new ArrayList<>();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma);
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener<String>) c -> {
if (alsoVisualizeListener != null){
alsoVisualizeCCB.getCheckModel().getCheckedItems().removeListener(alsoVisualizeListener);
}
alsoVisualizeListener = new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
alsoVisualize = new ArrayList<>();
ObservableList<String> checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems();
alsoVisualize.addAll(checkedItems);
// if (checkedItems.contains("oblikoskladenjska oznaka") || writeMsdAtTheEndEnableCalculateFor.get()){
// writeMsdAtTheEndChB.setDisable(false);
// } else {
// writeMsdAtTheEnd = false;
// writeMsdAtTheEndChB.setSelected(false);
// writeMsdAtTheEndChB.setDisable(true);
// }
logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ",")));
});
}
};
alsoVisualizeCCB.getCheckModel().clearChecks();
alsoVisualizeCCB.getItems().removeAll();
alsoVisualizeCCB.getItems().setAll(I18N.translatedObservableList(ALSO_VISUALIZE_ITEMS_LEMMA));
alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener(alsoVisualizeListener);
// taxonomy
if (Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType())) {
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
if (taxonomyListener != null){
taxonomyCCB.getCheckModel().getCheckedItems().removeListener(taxonomyListener);
}
taxonomyListener = new ListChangeListener<String>() {
boolean changing = true;
@Override
@ -373,8 +503,14 @@ public class WordLevelTab {
logger.info(String.format("Selected taxonomy: %s", StringUtils.join(checkedItems, ",")));
}
}
});
};
taxonomyCCB.getCheckModel().clearChecks();
taxonomyCCB.setDisable(false);
taxonomyCCB.getItems().removeAll();
taxonomyCCB.getItems().setAll(corpus.getTaxonomy());
taxonomyCCB.getCheckModel().getCheckedItems().addListener(taxonomyListener);
} else {
taxonomyCCB.setDisable(true);
}
@ -396,7 +532,7 @@ public class WordLevelTab {
}
logger.info("display taxonomy: ", displayTaxonomy);
});
displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB));
displayTaxonomyChB.setTooltip(new Tooltip(I18N.get("message.TOOLTIP_readDisplayTaxonomyChB")));
} else {
displayTaxonomyChB.setDisable(true);
}
@ -425,8 +561,8 @@ public class WordLevelTab {
String value = minimalOccurrencesTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalOccurrencesTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalOccurrencesTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalOccurrences = Integer.parseInt(value);
}
@ -443,8 +579,8 @@ public class WordLevelTab {
String value = minimalTaxonomyTF.getText();
if (!ValidationUtil.isEmpty(value)) {
if (!ValidationUtil.isNumber(value)) {
logAlert("minimalTaxonomyTF: " + WARNING_ONLY_NUMBERS_ALLOWED);
GUIController.showAlert(Alert.AlertType.ERROR, WARNING_ONLY_NUMBERS_ALLOWED);
logAlert("minimalTaxonomyTF: " + I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
GUIController.showAlert(Alert.AlertType.ERROR, I18N.get("message.WARNING_ONLY_NUMBERS_ALLOWED"));
} else {
minimalTaxonomy = Integer.parseInt(value);
}
@ -455,6 +591,17 @@ public class WordLevelTab {
}
});
changeLanguageB.setOnAction(e -> {
if (I18N.getLocale() == new Locale.Builder().setLanguage("sl").setRegion("SI").build()){
I18N.setLocale(Locale.ENGLISH);
} else {
I18N.setLocale(new Locale.Builder().setLanguage("sl").setRegion("SI").build());
}
Messages.reload();
Messages.updateChooseCorpusL();
logger.info("change language");
});
computeNgramsB.setDisable(true);
computeNgramsB.setOnAction(e -> {
@ -545,6 +692,32 @@ public class WordLevelTab {
//
// }
private void manageTranslations(){
helpH.textProperty().bind(I18N.createStringBinding("hyperlink.help"));
changeLanguageB.textProperty().bind(I18N.createStringBinding("button.language"));
computeNgramsB.textProperty().bind(I18N.createStringBinding("button.computeNgrams"));
cancel.textProperty().bind(I18N.createStringBinding("button.cancel"));
calculateForL.textProperty().bind(I18N.createStringBinding("label.calculateFor"));
alsoVisualizeL.textProperty().bind(I18N.createStringBinding("label.alsoVisualize"));
displayTaxonomyL.textProperty().bind(I18N.createStringBinding("label.displayTaxonomy"));
lengthSearchL.textProperty().bind(I18N.createStringBinding("label.lengthSearch"));
prefixLengthL.textProperty().bind(I18N.createStringBinding("label.prefixLength"));
suffixLengthL.textProperty().bind(I18N.createStringBinding("label.suffixLength"));
listSearchL.textProperty().bind(I18N.createStringBinding("label.listSearch"));
prefixListL.textProperty().bind(I18N.createStringBinding("label.prefixList"));
suffixListL.textProperty().bind(I18N.createStringBinding("label.suffixList"));
dataLimitL.textProperty().bind(I18N.createStringBinding("label.dataLimit"));
msdL.textProperty().bind(I18N.createStringBinding("label.msd"));
taxonomyL.textProperty().bind(I18N.createStringBinding("label.taxonomy"));
minimalOccurrencesL.textProperty().bind(I18N.createStringBinding("label.minimalOccurrences"));
minimalTaxonomyL.textProperty().bind(I18N.createStringBinding("label.minimalTaxonomy"));
solarFilters.textProperty().bind(I18N.createStringBinding("label.solarFilters"));
}
/**
* Toggles visibility for panes which hold fields for skipgram value (not applicable when calculating for letters) etc.,
* sets combobox values to what is applicable ...
@ -559,25 +732,22 @@ public class WordLevelTab {
logger.info("mode: ", mode.toString());
if (mode == MODE.WORD) {
if (corpus.getCorpusType() == CorpusType.GOS)
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS);
else
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS);
} else if (mode == MODE.LETTER) {
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_LETTERS);
// if calculateFor was selected for something other than a word or a lemma -> reset
if (!(calculateFor == CalculateFor.WORD || calculateFor == CalculateFor.LEMMA)) {
// if the user selected something else before selecting ngram for letters, reset that choice
calculateFor = CalculateFor.WORD;
calculateForCB.getSelectionModel().select("različnica");
if (corpus.getCorpusType() == CorpusType.GOS) {
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_GOS));
// calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS);
} else {
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS));
// calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS);
}
}
// override if orth mode, allow only word
if (corpus.isGosOrthMode()) {
calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_ORTH);
calculateForCB.itemsProperty().unbind();
calculateForCB.itemsProperty().bind(I18N.createObjectBinding(N_GRAM_COMPUTE_FOR_WORDS_ORTH));
// calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_ORTH);
msdTF.setDisable(true);
} else {
msdTF.setDisable(false);
@ -668,11 +838,11 @@ public class WordLevelTab {
readXML(f.toString(), statistic);
i++;
if (isCancelled()) {
updateMessage(CANCELING_NOTIFICATION);
updateMessage(I18N.get("message.CANCELING_NOTIFICATION"));
break;
}
this.updateProgress(i, corpusFiles.size());
this.updateMessage(String.format(ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y, i, corpusFiles.size(), f.getName()));
this.updateMessage(String.format(I18N.get("message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y"), i, corpusFiles.size(), f.getName()));
}
return null;
@ -686,12 +856,12 @@ public class WordLevelTab {
try {
boolean successullySaved = statistic.saveResultToDisk();
if (successullySaved) {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED"));
} else {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS"));
}
} catch (UnsupportedEncodingException e1) {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_SAVING_RESULTS_TO_CSV);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_SAVING_RESULTS_TO_CSV"));
logger.error("Error while saving", e1);
}
@ -703,7 +873,7 @@ public class WordLevelTab {
});
task.setOnFailed(e -> {
showAlert(Alert.AlertType.ERROR, ERROR_WHILE_EXECUTING);
showAlert(Alert.AlertType.ERROR, I18N.get("message.ERROR_WHILE_EXECUTING"));
logger.error("Error while executing", e);
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
@ -714,7 +884,7 @@ public class WordLevelTab {
});
task.setOnCancelled(e -> {
showAlert(Alert.AlertType.INFORMATION, Messages.NOTIFICATION_ANALYSIS_CANCLED);
showAlert(Alert.AlertType.INFORMATION, I18N.get("message.NOTIFICATION_ANALYSIS_CANCELED"));
ngramProgressBar.progressProperty().unbind();
ngramProgressBar.setProgress(0.0);
ngramProgressBar.setStyle(Settings.FX_ACCENT_OK);

View File

@ -10,6 +10,7 @@ import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicLong;
import data.*;
import gui.I18N;
import gui.ValidationUtil;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
@ -90,23 +91,23 @@ public class Export {
//CSV file header
if (!ValidationUtil.isEmpty(filter.getSkipValue()) && filter.getSkipValue() > 0) {
FILE_HEADER_AL.add("Izpuščene besede");
FILE_HEADER_AL.add(I18N.get("exportTable.skippedWords"));
}
FILE_HEADER_AL.add(filter.getCalculateFor().toHeaderString(filter.getNgramValue()));
if (filter.getCalculateFor().equals(CalculateFor.LEMMA)) {
if(filter.getNgramValue() == 0) {
FILE_HEADER_AL.add("Črkovni niz (male črke)");
FILE_HEADER_AL.add(I18N.get("exportTable.lettersSmall"));
} else if(filter.getNgramValue() >= 1) {
FILE_HEADER_AL.add("Lema (male črke)");
FILE_HEADER_AL.add(I18N.get("exportTable.wordsSmall"));
}
}
if (filter.getSuffixLength() != null && filter.getSuffixList() != null && filter.getPrefixLength() != null && filter.getPrefixList() != null) {
if (filter.getPrefixLength() > 0 || filter.getPrefixList().size() > 0) {
FILE_HEADER_AL.add("Začetni del besede");
FILE_HEADER_AL.add(I18N.get("exportTable.wordBeginning"));
}
FILE_HEADER_AL.add("Preostali del besede");
FILE_HEADER_AL.add(I18N.get("exportTable.wordRest"));
if (filter.getSuffixLength() > 0 || filter.getSuffixList().size() > 0) {
FILE_HEADER_AL.add("Končni del besede");
FILE_HEADER_AL.add(I18N.get("exportTable.wordEnding"));
}
}
@ -117,14 +118,14 @@ public class Export {
for (CalculateFor otherKey : filter.getMultipleKeys()) {
FILE_HEADER_AL.add(otherKey.toHeaderString(filter.getNgramValue()));
if (otherKey.equals(CalculateFor.LEMMA))
FILE_HEADER_AL.add("Lema (male črke)");
FILE_HEADER_AL.add(I18N.get("exportTable.wordsSmall"));
}
FILE_HEADER_AL.add(filter.getCalculateFor().totalAbsoluteFrequencyString(filter.getNgramValue()));
FILE_HEADER_AL.add(filter.getCalculateFor().shareOfTotalString(filter.getNgramValue()));
FILE_HEADER_AL.add("Skupna relativna pogostost (na milijon pojavitev)");
FILE_HEADER_AL.add(I18N.get("exportTable.totalRelativeFrequency"));
if (filter.getCollocability().size() > 0){
for (Collocability c : filter.getCollocability()) {
@ -134,9 +135,9 @@ public class Export {
for (Taxonomy key : taxonomyResults.keySet()) {
if(!key.equals(Taxonomy.TOTAL) && num_taxonomy_frequencies.containsKey(key) && num_taxonomy_frequencies.get(key).longValue() > 0) {
FILE_HEADER_AL.add("Absolutna pogostost [" + key.toString() + "]");
FILE_HEADER_AL.add("Delež [" + key.toString() + "]");
FILE_HEADER_AL.add("Relativna pogostost [" + key.toString() + "]");
FILE_HEADER_AL.add(I18N.get("exportTable.absoluteFrequency") + " [" + key.toString() + "]");
FILE_HEADER_AL.add(I18N.get("exportTable.percentage") + " [" + key.toString() + "]");
FILE_HEADER_AL.add(I18N.get("exportTable.relativeFrequency") + " [" + key.toString() + "]");
}
}
@ -150,7 +151,7 @@ public class Export {
}
}
for(int i = 0; i < maxMsdLength; i++){
FILE_HEADER_AL.add("msd" + String.format("%02d", i + 1));
FILE_HEADER_AL.add(I18N.get("exportTable.msd") + String.format("%02d", i + 1));
}
}

View File

@ -18,18 +18,18 @@
<?import java.lang.String?>
<AnchorPane fx:id="characterAnalysisTab" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.CharacterAnalysisTab">
<Pane>
<Label layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Število črk" />
<Label fx:id="stringLengthL" layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Število črk" />
<TextField fx:id="stringLengthTF" layoutX="185.0" layoutY="20.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Izračunaj za"/>
<ComboBox fx:id="calculateForCB" layoutX="185.0" layoutY="60.0" minWidth="180.0" prefWidth="150.0" promptText="izberi"
<Label fx:id="calculateForL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Izračunaj za"/>
<ComboBox fx:id="calculateForCB" layoutX="185.0" layoutY="60.0" minWidth="180.0" prefWidth="150.0"
visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
<String fx:value="lema"/>
<String fx:value="različnica"/>
</FXCollections>
</items>
<!--<items>-->
<!--<FXCollections fx:factory="observableArrayList">-->
<!--<String fx:value="lema"/>-->
<!--<String fx:value="različnica"/>-->
<!--</FXCollections>-->
<!--</items>-->
</ComboBox>
<!--<HBox layoutX="10.0" layoutY="60.0">-->
@ -42,7 +42,7 @@
<!--</children>-->
<!--</HBox>-->
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<Label fx:id="displayTaxonomyL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<CheckBox fx:id="displayTaxonomyChB" layoutX="263.0" layoutY="105.0" selected="false" />
<!--<Label layoutX="10.0" layoutY="160.0" prefHeight="25.0" text="Omejitev podatkov" />-->
@ -68,17 +68,17 @@
<Pane layoutX="400.0" prefHeight="480.0" prefWidth="380.0">
<!-- MSD and Taxonomy separated -->
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label fx:id="dataLimitL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<Label fx:id="msdL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<TextField fx:id="msdTF" layoutX="185.0" layoutY="100.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<Label fx:id="taxonomyL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<CheckComboBox fx:id="taxonomyCCB" layoutX="185.0" layoutY="140.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<Label fx:id="minimalOccurrencesL" layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<TextField fx:id="minimalOccurrencesTF" layoutX="185.0" layoutY="180.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<Label fx:id="minimalTaxonomyL" layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<TextField fx:id="minimalTaxonomyTF" layoutX="185.0" layoutY="220.0" prefWidth="180.0" />
@ -90,6 +90,7 @@
<!--<Label fx:id="selectedFiltersLabel" alignment="TOP_LEFT" layoutX="510.0" layoutY="45.0" prefHeight="540.0" prefWidth="275.0" text=" " wrapText="true" />-->
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="16.0" text="Pomoč" />
<Button fx:id="changeLanguageB" layoutX="710.0" layoutY="40.0" mnemonicParsing="false"/>
<Button fx:id="cancel" layoutX="540.0" layoutY="482.0" mnemonicParsing="false"
prefHeight="25.0" prefWidth="250.0" text="Prekini"/>

View File

@ -12,10 +12,8 @@
fx:controller="gui.CorpusTab">
<children>
<Pane/>
<Button fx:id="chooseCorpusLocationB" layoutX="10.0" layoutY="20.0" mnemonicParsing="false"
text="Nastavi lokacijo korpusa"/>
<CheckBox fx:id="readHeaderInfoChB" layoutX="185.0" layoutY="24.0" mnemonicParsing="false"
text="Preberi info iz headerjev"/>
<Button fx:id="chooseCorpusLocationB" layoutX="10.0" layoutY="20.0" mnemonicParsing="false"/>
<CheckBox fx:id="readHeaderInfoChB" layoutX="185.0" layoutY="24.0" mnemonicParsing="false"/>
<Pane fx:id="setCorpusWrapperP" layoutX="10.0" layoutY="60.0" prefHeight="118.0" prefWidth="683.0">
<children>
<Label fx:id="chooseCorpusL" prefHeight="70.0" prefWidth="704.0" text="Label"/>
@ -23,10 +21,10 @@
</children>
</Pane>
<ProgressIndicator fx:id="locationScanPI" layoutX="10.0" layoutY="60.0" prefHeight="50.0" progress="0.0"/>
<Button fx:id="chooseResultsLocationB" layoutX="10.0" layoutY="180.0" mnemonicParsing="false"
text="Nastavi lokacijo rezultatov"/>
<Button fx:id="chooseResultsLocationB" layoutX="10.0" layoutY="180.0" mnemonicParsing="false"/>
<Label fx:id="chooseResultsL" layoutX="10.0" layoutY="220.0" text="Label"/>
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="20.0" text="Pomoč"/>
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="20.0"/>
<Button fx:id="changeLanguageB" layoutX="710.0" layoutY="40.0" mnemonicParsing="false"/>
</children>
</AnchorPane>

View File

@ -16,7 +16,7 @@
<AnchorPane fx:id="oneWordAnalysisTabPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.111"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.OneWordAnalysisTab">
<Pane>
<Label layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za"/>
<Label fx:id="calculateForL" layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za"/>
<ComboBox fx:id="calculateForCB" layoutX="185.0" layoutY="20.0" minWidth="180.0" prefWidth="150.0" promptText="izberi"
visibleRowCount="5">
<items>
@ -30,14 +30,14 @@
</items>
</ComboBox>
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<Label fx:id="alsoVisualizeL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<CheckComboBox fx:id="alsoVisualizeCCB" layoutX="185.0" layoutY="60.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<Label fx:id="displayTaxonomyL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<CheckBox fx:id="displayTaxonomyChB" layoutX="263.0" layoutY="105.0" selected="false" />
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Izpiši razbit MSD" />
<Label fx:id="writeMsdAtTheEndL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Izpiši razbit MSD" />
<CheckBox fx:id="writeMsdAtTheEndChB" layoutX="263.0" layoutY="145.0" selected="false" />
<!-- MSD and Taxonomy separated -->
@ -60,17 +60,17 @@
<Pane layoutX="400.0" prefHeight="480.0" prefWidth="380.0">
<!-- MSD and Taxonomy separated -->
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label fx:id="dataLimitL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<Label fx:id="msdL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<TextField fx:id="msdTF" layoutX="185.0" layoutY="100.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<Label fx:id="taxonomyL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<CheckComboBox fx:id="taxonomyCCB" layoutX="185.0" layoutY="140.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<Label fx:id="minimalOccurrencesL" layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<TextField fx:id="minimalOccurrencesTF" layoutX="185.0" layoutY="180.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<Label fx:id="minimalTaxonomyL" layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<TextField fx:id="minimalTaxonomyTF" layoutX="185.0" layoutY="220.0" prefWidth="180.0" />
@ -84,6 +84,7 @@
<!--</Pane>-->
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="16.0" text="Pomoč" />
<Button fx:id="changeLanguageB" layoutX="710.0" layoutY="40.0" mnemonicParsing="false"/>
<Button fx:id="cancel" layoutX="540.0" layoutY="482.0" mnemonicParsing="false"
prefHeight="25.0" prefWidth="250.0" text="Prekini"/>

View File

@ -20,7 +20,7 @@
<Pane fx:id="paneWords">
<children>
<Label layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Preskok besed" />
<Label fx:id="skipValueL" layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Preskok besed" />
<ComboBox fx:id="skipValueCB" layoutX="185.0" layoutY="180.0" prefWidth="180.0" promptText="izberi" visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
@ -38,10 +38,10 @@
</children>
</Pane>
<Label layoutX="10.0" layoutY="210.0" prefHeight="10.0" text="* IZBIRA PREDHODNEGA FILTRA LAHKO MOČNO UPOČASNI DELOVANJE" styleClass="test"/>
<Label fx:id="slowSpeedWarning1L" layoutX="10.0" layoutY="210.0" prefHeight="10.0" text="* IZBIRA PREDHODNEGA FILTRA LAHKO MOČNO UPOČASNI DELOVANJE" styleClass="test"/>
<!-- for some reason following two ComboBoxes have to be below paneWords -->
<Label layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za" />
<Label fx:id="calculateForL" layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za" />
<ComboBox fx:id="calculateForCB" layoutX="185.0" layoutY="20.0" minWidth="180.0" prefWidth="180.0" promptText="izberi" visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
@ -54,15 +54,15 @@
</items>
</ComboBox>
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<Label fx:id="alsoVisualizeL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<CheckComboBox fx:id="alsoVisualizeCCB" layoutX="185.0" layoutY="60.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<Label fx:id="displayTaxonomyL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<CheckBox fx:id="displayTaxonomyChB" layoutX="263.0" layoutY="105.0" selected="false" />
<Label layoutX="10.0" layoutY="130.0" prefHeight="10.0" text="* IZBIRA PREDHODNEGA FILTRA LAHKO MOČNO UPOČASNI DELOVANJE" styleClass="test"/>
<Label fx:id="slowSpeedWarning2L" layoutX="10.0" layoutY="130.0" prefHeight="10.0" text="* IZBIRA PREDHODNEGA FILTRA LAHKO MOČNO UPOČASNI DELOVANJE" styleClass="test"/>
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="N-gram nivo" />
<Label fx:id="ngramValueL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="N-gram nivo" />
<ComboBox fx:id="ngramValueCB" layoutX="185.0" layoutY="140.0" prefHeight="25.0" prefWidth="180.0" promptText="izberi" visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
@ -75,10 +75,10 @@
</ComboBox>
<Label layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Upoštevaj ločila" />
<Label fx:id="notePunctuationsL" layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Upoštevaj ločila" />
<CheckBox fx:id="notePunctuationsChB" layoutX="263.0" layoutY="225.0" selected="false" />
<Label layoutX="10.0" layoutY="260.0" prefHeight="25.0" text="Kolokabilnost" />
<Label fx:id="collocabilityL" layoutX="10.0" layoutY="260.0" prefHeight="25.0" text="Kolokabilnost" />
<CheckComboBox fx:id="collocabilityCCB" layoutX="185.0" layoutY="260.0" prefHeight="25.0" prefWidth="180.0"/>
<!-- MSD and Taxonomy separated -->
@ -108,17 +108,17 @@
<Pane layoutX="400.0" prefHeight="480.0" prefWidth="380.0">
<!-- MSD and Taxonomy separated -->
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label fx:id="dataLimitL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<Label fx:id="msdL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<TextField fx:id="msdTF" layoutX="185.0" layoutY="100.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<Label fx:id="taxonomyL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<CheckComboBox fx:id="taxonomyCCB" layoutX="185.0" layoutY="140.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<Label fx:id="minimalOccurrencesL" layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<TextField fx:id="minimalOccurrencesTF" layoutX="185.0" layoutY="180.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<Label fx:id="minimalTaxonomyL" layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<TextField fx:id="minimalTaxonomyTF" layoutX="185.0" layoutY="220.0" prefWidth="180.0" />
@ -128,7 +128,7 @@
<Pane fx:id="paneLetters">
<children>
<CheckBox fx:id="calculatecvvCB" layoutX="10.0" layoutY="440.0" mnemonicParsing="false" prefHeight="25.0" text="Izračunaj za kombinacije samoglasnikov in soglasnikov" />
<Label layoutX="10.0" layoutY="400.0" prefHeight="25.0" text="Dolžina niza" />
<Label fx:id="stringLengthL" layoutX="10.0" layoutY="400.0" prefHeight="25.0" text="Dolžina niza" />
<TextField fx:id="stringLengthTF" layoutX="185.0" layoutY="400.0" prefWidth="180.0" />
</children>
</Pane>
@ -153,11 +153,11 @@
<!--</Pane>-->
<!--</Pane>-->
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="16.0" text="Pomoč" />
<Button fx:id="changeLanguageB" layoutX="710.0" layoutY="40.0" mnemonicParsing="false"/>
<Button fx:id="cancel" layoutX="540.0" layoutY="482.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="250.0" text="Prekini" />
<ProgressBar fx:id="ngramProgressBar" layoutX="10.0" layoutY="517.0" prefHeight="16.0" prefWidth="780.0" progress="0.0" />
<Label fx:id="progressLabel" layoutX="10.0" layoutY="541.0" prefHeight="25.0" prefWidth="780.0" />
</AnchorPane>

View File

@ -16,7 +16,7 @@
<AnchorPane fx:id="wordLevelAnalysisTabPane" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.111"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.WordLevelTab">
<Pane>
<Label layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za"/>
<Label fx:id="calculateForL" layoutX="10.0" layoutY="20.0" prefHeight="25.0" text="Izračunaj za"/>
<ComboBox fx:id="calculateForCB" layoutX="185.0" layoutY="20.0" minWidth="180.0" prefWidth="150.0" promptText="izberi"
visibleRowCount="5">
<items>
@ -30,20 +30,20 @@
</items>
</ComboBox>
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<Label fx:id="alsoVisualizeL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Upoštevaj tudi" />
<CheckComboBox fx:id="alsoVisualizeCCB" layoutX="185.0" layoutY="60.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<Label fx:id="displayTaxonomyL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Izpiši taksonomije" />
<CheckBox fx:id="displayTaxonomyChB" layoutX="263.0" layoutY="105.0" selected="false" />
<!--<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Izpiši razbit MSD" />-->
<!--<CheckBox fx:id="writeMsdAtTheEndChB" layoutX="263.0" layoutY="145.0" selected="false" />-->
<!-- MSD and Taxonomy separated -->
<Label layoutX="10.0" layoutY="160.0" prefHeight="25.0" text="Iskanje besednih delov preko podane dolžine" />
<Label fx:id="lengthSearchL" layoutX="10.0" layoutY="160.0" prefHeight="25.0" text="Iskanje besednih delov preko podane dolžine" />
<Label layoutX="10.0" layoutY="200.0" prefHeight="25.0" text="Predpona je dolga"/>
<Label fx:id="prefixLengthL" layoutX="10.0" layoutY="200.0" prefHeight="25.0" text="Predpona je dolga"/>
<ComboBox fx:id="prefixLengthCB" layoutX="185.0" layoutY="200.0" prefWidth="180.0" promptText="izberi" visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
@ -56,7 +56,7 @@
</FXCollections>
</items>
</ComboBox>
<Label layoutX="10.0" layoutY="240.0" prefHeight="25.0" text="Pripona je dolga"/>
<Label fx:id="suffixLengthL" layoutX="10.0" layoutY="240.0" prefHeight="25.0" text="Pripona je dolga"/>
<ComboBox fx:id="suffixLengthCB" layoutX="185.0" layoutY="240.0" prefWidth="180.0" promptText="izberi" visibleRowCount="5">
<items>
<FXCollections fx:factory="observableArrayList">
@ -70,12 +70,12 @@
</items>
</ComboBox>
<Label layoutX="10.0" layoutY="300.0" prefHeight="25.0" text="Iskanje besednih delov preko podanih predpon in pripon" />
<Label fx:id="listSearchL" layoutX="10.0" layoutY="300.0" prefHeight="25.0" text="Iskanje besednih delov preko podanih predpon in pripon" />
<Label layoutX="10.0" layoutY="340.0" prefHeight="25.0" text="Seznam predpon"/>
<Label fx:id="prefixListL" layoutX="10.0" layoutY="340.0" prefHeight="25.0" text="Seznam predpon"/>
<TextField fx:id="prefixListTF" layoutX="185.0" layoutY="340.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="380.0" prefHeight="25.0" text="Seznam pripon"/>
<Label fx:id="suffixListL" layoutX="10.0" layoutY="380.0" prefHeight="25.0" text="Seznam pripon"/>
<TextField fx:id="suffixListTF" layoutX="185.0" layoutY="380.0" prefWidth="180.0" />
@ -86,17 +86,17 @@
<Pane layoutX="400.0" prefHeight="480.0" prefWidth="380.0">
<!-- MSD and Taxonomy separated -->
<Label layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label fx:id="dataLimitL" layoutX="10.0" layoutY="60.0" prefHeight="25.0" text="Omejitev podatkov" />
<Label layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<Label fx:id="msdL" layoutX="10.0" layoutY="100.0" prefHeight="25.0" text="Oznaka MSD"/>
<TextField fx:id="msdTF" layoutX="185.0" layoutY="100.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<Label fx:id="taxonomyL" layoutX="10.0" layoutY="140.0" prefHeight="25.0" text="Taksonomija"/>
<CheckComboBox fx:id="taxonomyCCB" layoutX="185.0" layoutY="140.0" prefHeight="25.0" prefWidth="180.0"/>
<Label layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<Label fx:id="minimalOccurrencesL" layoutX="10.0" layoutY="180.0" prefHeight="25.0" text="Min. št. pojavitev" />
<TextField fx:id="minimalOccurrencesTF" layoutX="185.0" layoutY="180.0" prefWidth="180.0" />
<Label layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<Label fx:id="minimalTaxonomyL" layoutX="10.0" layoutY="220.0" prefHeight="25.0" text="Min. št. taksonomij" />
<TextField fx:id="minimalTaxonomyTF" layoutX="185.0" layoutY="220.0" prefWidth="180.0" />
@ -105,6 +105,7 @@
</Pane>
<Hyperlink fx:id="helpH" alignment="TOP_LEFT" layoutX="710.0" layoutY="16.0" text="Pomoč" />
<Button fx:id="changeLanguageB" layoutX="710.0" layoutY="40.0" mnemonicParsing="false"/>
<Button fx:id="cancel" layoutX="540.0" layoutY="482.0" mnemonicParsing="false"
prefHeight="25.0" prefWidth="250.0" text="Prekini"/>

View File

@ -0,0 +1,192 @@
# general
window.title=Corpus analyzer
hyperlink.help=Help
button.language=SL
button.computeNgrams=Calculate
button.cancel=Cancel
# template
tab.corpusTab=Corpus
tab.filterTab=Filter
tab.characterLevelTabNew=Characters
tab.wordLevelTab=Word parts
tab.oneWordAnalysisTab=Words
tab.stringLevelTabNew2=Word sets
# corpus tab
button.setCorpusLocation=Set corpus location
checkBox.readHeaderInfo=Read info from headers
button.chooseResultsLocation=Choose result location
# character analysis tab
label.stringLength=Number of letters
label.calculateFor=Calculate for
label.displayTaxonomy=Display taxonomies
label.dataLimit=Data limitations
label.msd=MSD
label.taxonomy=Taxonomy
label.minimalOccurrences=Min. n. occurrences
label.minimalTaxonomy=Min. n. taxonomies
label.solarFilters=Selected filters:
string.lemma=lemma
string.word=word
# word level tab
label.alsoVisualize=Also filter
label.lengthSearch=Search for word parts through specified length
label.prefixLength=Prefix length
label.suffixLength=Suffix length
label.listSearch=Search for word parts through specified prefixes and suffixes
label.prefixList=Prefix list
label.suffixList=Suffix list
label.writeMsdAtTheEnd=Write MSD at the end
# calculate for
calculateFor.WORD=word
calculateFor.NORMALIZED_WORD=normalized word
calculateFor.LEMMA=lemma
calculateFor.MORPHOSYNTACTIC_SPECS=msd
calculateFor.MORPHOSYNTACTIC_PROPERTY=oblikoskladenjska lastnost
calculateFor.WORD_TYPE=word type
calculateFor.DIST_WORDS=word
calculateFor.DIST_LEMMAS=lemma
# n-grams
label.skipValue=Skip value
label.slowSpeedWarning=* USAGE OF PREVIOUS FILTER MAY DECREASE ANALYZING SPEED
label.ngramValue=N-gram level
label.notePunctuations=Note punctuations
label.collocability=Collocability
# messages
message.WARNING_CORPUS_NOT_FOUND=In selected directory there are no suitable corpus files.
message.WARNING_RESULTS_DIR_NOT_VALID=You don't have correct permissions to access chosen directory.
message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS=Selected ngram level and number of entered words do not match.
message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS_INFO=Choose other number or modify filter.
message.WARNING_WORD_OR_LEMMA=Choose, if you want to calculate statistics for words or lemmas.
message.WARNING_ONLY_NUMBERS_ALLOWED=Please enter valid number.
message.WARNING_NUMBER_TOO_BIG=Entered number is bigger than the number of taxonomies.
message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES=Number for n-gram (%d) and number of msds included (%d) must match.
message.WARNING_MISSING_STRING_LENGTH=String length must be higher than 0. Length is set up at default value (1).
message.WARNING_NO_TAXONOMY_FOUND=We were unable to read taxonomy from corpus files. Please select other location or different corpus.
message.WARNING_NO_SOLAR_FILTERS_FOUND=We weren't able to read filters from corpus files. Please select other location or different corpus.
message.ERROR_WHILE_EXECUTING=Error in program execution.
message.ERROR_WHILE_SAVING_RESULTS_TO_CSV=Error while saving results.
message.ERROR_NOT_ENOUGH_MEMORY=You do not have sufficient RAM for analyzing such amount of data. You can try changing filters.
message.MISSING_NGRAM_LEVEL=N-gram level
message.MISSING_CALCULATE_FOR=Calculate for
message.MISSING_SKIP=""
message.MISSING_STRING_LENGTH=String length
message.MISMATCHED_STRING_LENGTH_AND_MSD_REGEX=String length and regex filter do not match.
message.NOTIFICATION_FOUND_X_FILES=Num. of found files: %s
message.NOTIFICATION_CORPUS=Corpus: %s
message.NOTIFICATION_ANALYSIS_COMPLETED=Analysis completed. Results are saved successfully.
message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS=Analysis completed, however no statistics created that would match filters.
message.RESULTS_PATH_SET_TO_DEFAULT=Save location is set on corpus location.
message.NOTIFICATION_ANALYSIS_CANCELED=Analysis was cancled.
message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y=Analyzing file %d of %d (%s)
message.CANCELING_NOTIFICATION=Canceled
message.LABEL_CORPUS_LOCATION_NOT_SET=Corpus location is not set
message.LABEL_RESULTS_LOCATION_NOT_SET=Result location is not set
message.LABEL_RESULTS_CORPUS_TYPE_NOT_SET=Corpus type is not set.
message.LABEL_SCANNING_CORPUS=Search and analysis of corpus files...
message.LABEL_SCANNING_SINGLE_FILE_CORPUS=Input analysis
message.COMPLETED=Completed
message.TOOLTIP_chooseCorpusLocationB=Select folder which contains corpus. The folder should only contain one corpus and should not contain too many files that are not part of corpus.
message.TOOLTIP_readHeaderInfoChB=If you select this option taxonomy will be read separately. This might take a while.
message.TOOLTIP_readNotePunctuationsChB=Punctuations in sentences are included in analysis
message.TOOLTIP_readDisplayTaxonomyChB=Output file will include statistics over taxonomies as well.
windowTitles.error=Error
windowTitles.warning=Warning
windowTitles.confirmation=Confirmation
# export header translations
exportHeader.corpus=Corpus:
exportHeader.date=Date:
exportHeader.executionTime=Execution time:
exportHeader.analysis=Analysis:
exportHeader.analysis.letters=letters
exportHeader.analysis.wordParts=word parts
exportHeader.analysis.words=words
exportHeader.analysis.wordSets=Word sets
exportHeader.numberLetters=Number of letters:
exportHeader.calculateFor=Calculate for:
exportHeader.alsoFilter=Also filter:
exportHeader.displayTaxonomies=Display taxonomies:
exportHeader.ngramLevel=N-gram level:
exportHeader.skipValue=Skip value:
exportHeader.notePunctuations=Note punctuations:
exportHeader.collocability=Collocability:
exportHeader.writeMSDAtTheEnd=Write MSD at the end:
exportHeader.prefixLength=Prefix length:
exportHeader.suffixLength=Suffix length:
exportHeader.prefixList=Prefix list:
exportHeader.suffixList=Suffix list:
exportHeader.msd=MSD:
exportHeader.taxonomy=Taxonomy:
exportHeader.minOccurrences=Min. n. occurrences:
exportHeader.minTaxonomies=Min. n. taxonomies:
exportHeader.additionalFilters=Additional filters:
exportHeader.yes=yes
exportHeader.no=no
# export table header translations
exportTable.skippedWords=Skipped words
exportTable.lettersSmall=Letters (small letters)
exportTable.wordsSmall=Lemma (small letters)
exportTable.wordBeginning=Word beginning
exportTable.wordEnding=Word ending
exportTable.wordRest=The rest of the word
exportTable.totalRelativeFrequency=Total relative frequency (over one million occurrences)
exportTable.absoluteFrequency=Absolute frequency
exportTable.percentage=Share
exportTable.relativeFrequency=Relative frequency
exportTable.msd=msd
# parts
exportTable.part.word=words:
exportTable.part.normalizedWord=normalized words:
exportTable.part.lemma=lemmas:
exportTable.part.msd=msd:
exportTable.part.msdProperty=msd property:
exportTable.part.wordType=word type:
exportTable.part.letterSet=letter set
exportTable.part.word2=word
exportTable.part.normalizedWord2=normalized word
exportTable.part.lemma2=lemma
exportTable.part.msd2=msd
exportTable.part.msdProperty2=msd property
exportTable.part.wordType2=word type
exportTable.part.letterSet2=Share of total sum of all letter sets
exportTable.part.letterSet3=Letter set
exportTable.part.word3=Word
exportTable.part.normalizedWord3=Normalized word
exportTable.part.lemma3=Lemma
exportTable.part.msd3=Msd
exportTable.part.msdProperty3=Msd property
exportTable.part.wordType3=Word type
exportTable.part.set=set
exportTable.part.share=Absolute share of
exportTable.part.absoluteFrequency=Absolute frequency of
exportTable.part.totalFound=Total sum of all
exportTable.part.totalFoundLetters=Total sum of all found letters of
exportTable.part.totalSumString=Total sum of
exportTable.part.totalSumLetters=Total sum of all letters of
# generated files names
exportFileName.letters=letters
exportFileName.wordParts=word-parts
exportFileName.words=words
exportFileName.wordSets=word-sets
exportFileName.gram=-gram
exportFileName.skip=-skip

View File

@ -0,0 +1,192 @@
# general
window.title=Luščilnik
hyperlink.help=Pomoč
button.language=EN
button.computeNgrams=Izračunaj
button.cancel=Prekini
# template
tab.corpusTab=Korpus
tab.filterTab=Filter
tab.characterLevelTabNew=Črke
tab.wordLevelTab=Besedni deli
tab.oneWordAnalysisTab=Besede
tab.stringLevelTabNew2=Besedni nizi
# corpus tab
button.setCorpusLocation=Nastavi lokacijo korpusa
checkBox.readHeaderInfo=Preberi info iz headerjev
button.chooseResultsLocation=Nastavi lokacijo rezultatov
# character analysis tab
label.stringLength=Število črk
label.calculateFor=Izračunaj za
label.displayTaxonomy=Izpiši taksonomije
label.dataLimit=Omejitev podatkov
label.msd=Oznaka MSD
label.taxonomy=Taksonomija
label.minimalOccurrences=Min. št. pojavitev
label.minimalTaxonomy=Min. št. taksonomij
label.solarFilters=Izbrani filtri:
string.lemma=lema
string.word=različnica
label.writeMsdAtTheEnd=Izpiši razbit MSD
# word level tab
label.alsoVisualize=Upoštevaj tudi
label.lengthSearch=Iskanje besednih delov preko podane dolžine
label.prefixLength=Predpona je dolga
label.suffixLength=Pripona je dolga
label.listSearch=Iskanje besednih delov preko podanih predpon in pripon
label.prefixList=Seznam predpon
label.suffixList=Seznam pripon
# calculate for
calculateFor.WORD=različnica
calculateFor.NORMALIZED_WORD=normalizirana različnica
calculateFor.LEMMA=lema
calculateFor.MORPHOSYNTACTIC_SPECS=oblikoskladenjska oznaka
calculateFor.MORPHOSYNTACTIC_PROPERTY=oblikoskladenjska lastnost
calculateFor.WORD_TYPE=besedna vrsta
calculateFor.DIST_WORDS=različnica
calculateFor.DIST_LEMMAS=lema
# n-grams
label.skipValue=Preskok besed
label.slowSpeedWarning=* IZBIRA PREDHODNEGA FILTRA LAHKO MOČNO UPOČASNI DELOVANJE
label.ngramValue=N-gram nivo
label.notePunctuations=Upoštevaj ločila
label.collocability=Kolokabilnost
# messages
message.WARNING_CORPUS_NOT_FOUND=V izbranem direktoriju ni ustreznih korpusnih datotek.
message.WARNING_RESULTS_DIR_NOT_VALID=Za dostop do izbranega direktorija nimate potrebnih pravic.
message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS=Izbran nivo ngramov in vpisano št. besed v filtru se ne ujemata.
message.WARNING_DIFFERING_NGRAM_LEVEL_AND_FILTER_TOKENS_INFO=Izberite drugo število ali popravite filter.
message.WARNING_WORD_OR_LEMMA=Izberite, če želite statistiko izračunati za besede ali leme.
message.WARNING_ONLY_NUMBERS_ALLOWED=Prosim vnesite veljavno število.
message.WARNING_NUMBER_TOO_BIG=Vnešeno število je večje od števila taksonomij.
message.WARNING_MISMATCHED_NGRAM_AND_TOKENS_VALUES=Število za ngram (%d) in število msd oznak (%d) se morata ujemati.
message.WARNING_MISSING_STRING_LENGTH=Dolžina niza mora biti večja od 0. Vstavljena je privzeta vrednost (1).
message.WARNING_NO_TAXONOMY_FOUND=Iz korpusnih datotek ni bilo moč razbrati taksonomije. Prosim izberite drugo lokacijo ali korpus.
message.WARNING_NO_SOLAR_FILTERS_FOUND=Iz korpusnih datotek ni bilo moč razbrati filtrov. Prosim izberite drugo lokacijo ali korpus.
message.ERROR_WHILE_EXECUTING=Prišlo je do napake med izvajanjem.
message.ERROR_WHILE_SAVING_RESULTS_TO_CSV=Prišlo je do napake med shranjevanje rezultatov.
message.ERROR_NOT_ENOUGH_MEMORY=Na voljo imate premalo pomnilnika (RAM-a) za analizo takšne količine podatkov.
message.MISSING_NGRAM_LEVEL=N-gram nivo
message.MISSING_CALCULATE_FOR=Izračunaj za
message.MISSING_SKIP=""
message.MISSING_STRING_LENGTH=Dolžina niza
message.MISMATCHED_STRING_LENGTH_AND_MSD_REGEX=Neujemajoča dolžina niza in regex filter
message.NOTIFICATION_FOUND_X_FILES=Št. najdenih datotek: %s
message.NOTIFICATION_CORPUS=Korpus: %s
message.NOTIFICATION_ANALYSIS_COMPLETED=Analiza je zaključena, rezultati so shranjeni.
message.NOTIFICATION_ANALYSIS_COMPLETED_NO_RESULTS=Analiza je zaključena, vendar ni bilo moč izračunati statistike, ki bi ustrezala vsem navedenim pogojem.
message.RESULTS_PATH_SET_TO_DEFAULT=Lokacija za shranjevanje rezultatov je nastavljena na lokacijo korpusa.
message.NOTIFICATION_ANALYSIS_CANCELED=Analiziranje je bilo prekinjeno.
message.ONGOING_NOTIFICATION_ANALYZING_FILE_X_OF_Y=Analiziram datoteko %d od %d (%s)
message.CANCELING_NOTIFICATION=Prekinjeno
message.LABEL_CORPUS_LOCATION_NOT_SET=Lokacija korpusa ni nastavljena
message.LABEL_RESULTS_LOCATION_NOT_SET=Lokacija za shranjevanje rezultatov ni nastavljena
message.LABEL_RESULTS_CORPUS_TYPE_NOT_SET=Vrsta korpusa ni nastavljena
message.LABEL_SCANNING_CORPUS=Iskanje in analiza korpusnih datotek...
message.LABEL_SCANNING_SINGLE_FILE_CORPUS=Analiza vnosa
message.COMPLETED=končano
message.TOOLTIP_chooseCorpusLocationB=Izberite mapo v kateri se nahaja korpus. Program izbrano mapo preišče rekurzivno, zato bodite pozorni, da ne izberete mape z več korpusi ali z mnogo datotekami, ki niso del korpusa.
message.TOOLTIP_readHeaderInfoChB=Če izberete to opcijo, se bo iz headerjev korpusa prebrala razpoložljiva taksonomija oz. filtri (korpus Šolar). Ta operacija lahko traja dlje časa, sploh če je korpus združen v eni sami datoteki.
message.TOOLTIP_readNotePunctuationsChB=Ločila med povedmi se upoštevajo v vsakem primeru.
message.TOOLTIP_readDisplayTaxonomyChB=V izhodni datoteki bodo prikazane tudi statistike po taksonomijah.
windowTitles.error=Napaka
windowTitles.warning=Opozorilo
windowTitles.confirmation=Potrdilo
# export header translations
exportHeader.corpus=Korpus:
exportHeader.date=Datum:
exportHeader.executionTime=Čas izvajanja:
exportHeader.analysis=Analiza:
exportHeader.analysis.letters=črke
exportHeader.analysis.wordParts=besedni deli
exportHeader.analysis.words=besede
exportHeader.analysis.wordSets=Besedni nizi
exportHeader.numberLetters=Število črk:
exportHeader.calculateFor=Izračunaj za:
exportHeader.alsoFilter=Upoštevaj tudi:
exportHeader.displayTaxonomies=Izpiši taksonomije:
exportHeader.ngramLevel=N-gram nivo:
exportHeader.skipValue=Preskok besed:
exportHeader.notePunctuations=Upoštevaj ločila:
exportHeader.collocability=Kolokabilnost:
exportHeader.writeMSDAtTheEnd=Izpiši razbit MSD:
exportHeader.prefixLength=Dolžina predpone:
exportHeader.suffixLength=Dolžina pripone:
exportHeader.prefixList=Seznam predpon:
exportHeader.suffixList=Seznam pripon:
exportHeader.msd=Oznaka MSD:
exportHeader.taxonomy=Taksonomija:
exportHeader.minOccurrences=Min. št. pojavitev:
exportHeader.minTaxonomies=Min. št. taksonomij:
exportHeader.additionalFilters=Dodatni filtri:
exportHeader.yes=da
exportHeader.no=ne
# export table header translations
exportTable.skippedWords=Izpuščene besede
exportTable.lettersSmall=Črkovni niz (male črke)
exportTable.wordsSmall=Lema (male črke)
exportTable.wordBeginning=Začetni del besede
exportTable.wordEnding=Končni del besede
exportTable.wordRest=Preostali del besede
exportTable.totalRelativeFrequency=Skupna relativna pogostost (na milijon pojavitev)
exportTable.absoluteFrequency=Absolutna pogostost
exportTable.percentage=Delež
exportTable.relativeFrequency=Relativna pogostost
exportTable.msd=msd
# parts
exportTable.part.word=različnic:
exportTable.part.normalizedWord=normaliziranih različnic:
exportTable.part.lemma=lem:
exportTable.part.msd=oblikoskladenjskih oznak:
exportTable.part.msdProperty=oblikoskladenjskih lastnosti:
exportTable.part.wordType=besednih vrst:
exportTable.part.letterSet=črkovnega niza
exportTable.part.word2=različnice
exportTable.part.normalizedWord2=normalizirane različnice
exportTable.part.lemma2=leme
exportTable.part.msd2=oblikoskladenjske oznake
exportTable.part.msdProperty2=oblikoskladenjske lastnosti
exportTable.part.wordType2=besedne vrste
exportTable.part.letterSet2=Delež glede na skupno vsoto vseh najdenih črkovnih nizov
exportTable.part.letterSet3=Črkovni niz
exportTable.part.word3=Različnica
exportTable.part.normalizedWord3=Normalizirana različnica
exportTable.part.lemma3=Lema
exportTable.part.msd3=Oblikoskladenjska oznaka
exportTable.part.msdProperty3=Oblikoskladenjska lastnost
exportTable.part.wordType3=Besedna vrsta
exportTable.part.set=niza
exportTable.part.share=Delež glede na vse najdene
exportTable.part.absoluteFrequency=Skupna absolutna pogostost
exportTable.part.totalFound=Skupna vsota vseh najdenih
exportTable.part.totalFoundLetters=Skupna vsota vseh najdenih črkovnih nizov
exportTable.part.totalSumString=Skupna vsota vseh
exportTable.part.totalSumLetters=Skupna vsota vseh črkovnih nizov
# generated files names
exportFileName.letters=crke
exportFileName.wordParts=besedni-deli
exportFileName.words=besede
exportFileName.wordSets=besedni-nizi
exportFileName.gram=-gram
exportFileName.skip=-preskok

View File

@ -7,3 +7,11 @@
-fx-font-weight: bold;
-fx-text-fill: red;
}
.progress-indicator .percentage {
-fx-fill:null;
}
.progress-indicator {
-fx-padding: 0 0 -16 0;
}