diff --git a/src/main/java/alg/ngram/Ngrams.java b/src/main/java/alg/ngram/Ngrams.java index df063c6..20a61ca 100755 --- a/src/main/java/alg/ngram/Ngrams.java +++ b/src/main/java/alg/ngram/Ngrams.java @@ -67,22 +67,43 @@ public class Ngrams { multipleKeys = new MultipleHMKeys1(key); break; case 1: - multipleKeys = new MultipleHMKeys2(key, wordToString(ngramCandidate, otherKeys.get(0))); + String k1_2 = wordToString(ngramCandidate, otherKeys.get(0)); + if (stats.getFilter().getNotePunctuations()) + k1_2 = (!k1_2.equals("") && k1_2.charAt(k1_2.length()-1) == ',') ? k1_2.substring(0, k1_2.length() - 1) : k1_2; + multipleKeys = new MultipleHMKeys2(key, k1_2); break; case 2: - multipleKeys = new MultipleHMKeys3(key, wordToString(ngramCandidate, otherKeys.get(0)), - wordToString(ngramCandidate, otherKeys.get(1))); + String k2_2 = wordToString(ngramCandidate, otherKeys.get(0)); + String k2_3 = wordToString(ngramCandidate, otherKeys.get(1)); + if (stats.getFilter().getNotePunctuations()) { + k2_2 = (!k2_2.equals("") && k2_2.charAt(k2_2.length() - 1) == ',') ? k2_2.substring(0, k2_2.length() - 1) : k2_2; + k2_3 = (!k2_3.equals("") && k2_3.charAt(k2_3.length() - 1) == ',') ? k2_3.substring(0, k2_3.length() - 1) : k2_3; + } + multipleKeys = new MultipleHMKeys3(key, k2_2, k2_3); break; case 3: - multipleKeys = new MultipleHMKeys4(key, wordToString(ngramCandidate, otherKeys.get(0)), - wordToString(ngramCandidate, otherKeys.get(1)), - wordToString(ngramCandidate, otherKeys.get(2))); + String k3_2 = wordToString(ngramCandidate, otherKeys.get(0)); + String k3_3 = wordToString(ngramCandidate, otherKeys.get(1)); + String k3_4 = wordToString(ngramCandidate, otherKeys.get(2)); + if (stats.getFilter().getNotePunctuations()) { + k3_2 = (!k3_2.equals("") && k3_2.charAt(k3_2.length() - 1) == ',') ? k3_2.substring(0, k3_2.length() - 1) : k3_2; + k3_3 = (!k3_3.equals("") && k3_3.charAt(k3_3.length() - 1) == ',') ? k3_3.substring(0, k3_3.length() - 1) : k3_3; + k3_4 = (!k3_4.equals("") && k3_4.charAt(k3_4.length() - 1) == ',') ? k3_4.substring(0, k3_4.length() - 1) : k3_4; + } + multipleKeys = new MultipleHMKeys4(key, k3_2, k3_3, k3_4); break; case 4: - multipleKeys = new MultipleHMKeys5(key, wordToString(ngramCandidate, otherKeys.get(0)), - wordToString(ngramCandidate, otherKeys.get(1)), - wordToString(ngramCandidate, otherKeys.get(2)), - wordToString(ngramCandidate, otherKeys.get(3))); + String k4_2 = wordToString(ngramCandidate, otherKeys.get(0)); + String k4_3 = wordToString(ngramCandidate, otherKeys.get(1)); + String k4_4 = wordToString(ngramCandidate, otherKeys.get(2)); + String k4_5 = wordToString(ngramCandidate, otherKeys.get(3)); + if (stats.getFilter().getNotePunctuations()) { + k4_2 = (!k4_2.equals("") && k4_2.charAt(k4_2.length() - 1) == ',') ? k4_2.substring(0, k4_2.length() - 1) : k4_2; + k4_3 = (!k4_3.equals("") && k4_3.charAt(k4_3.length() - 1) == ',') ? k4_3.substring(0, k4_3.length() - 1) : k4_3; + k4_4 = (!k4_4.equals("") && k4_4.charAt(k4_4.length() - 1) == ',') ? k4_4.substring(0, k4_4.length() - 1) : k4_4; + k4_5 = (!k4_5.equals("") && k4_5.charAt(k4_5.length() - 1) == ',') ? k4_5.substring(0, k4_5.length() - 1) : k4_5; + } + multipleKeys = new MultipleHMKeys5(key, k4_2, k4_3, k4_4, k4_5); break; default: multipleKeys = null; @@ -265,7 +286,7 @@ public class Ngrams { currentLoop.add(checkAndModifySkipgramPunctuation(sentence, i, j, stats)); currentLoop.add(sentence.get(j)); - validateAndCountSkipgramCandidate(currentLoop, stats); + validateAndCountSkipgramCandidate(currentLoop, stats, s.getTaxonomy()); } else { for (int k = j + 1; k <= j + 1 + skip; k++) { // 3gram if (ngram == 3 && k < sentence.size()) { @@ -274,7 +295,7 @@ public class Ngrams { currentLoop.add(checkAndModifySkipgramPunctuation(sentence, j, k, stats)); currentLoop.add(sentence.get(k)); - validateAndCountSkipgramCandidate(currentLoop, stats); + validateAndCountSkipgramCandidate(currentLoop, stats, s.getTaxonomy()); } else { for (int l = k + 1; l <= k + 1 + skip; l++) { // 4gram if (ngram == 4 && l < sentence.size()) { @@ -284,7 +305,7 @@ public class Ngrams { currentLoop.add(checkAndModifySkipgramPunctuation(sentence, k, l, stats)); currentLoop.add(sentence.get(l)); - validateAndCountSkipgramCandidate(currentLoop, stats); + validateAndCountSkipgramCandidate(currentLoop, stats, s.getTaxonomy()); } else { for (int m = l + 1; m <= l + 1 + skip; m++) { // 5gram if (ngram == 5 && m < sentence.size()) { @@ -295,7 +316,7 @@ public class Ngrams { currentLoop.add(checkAndModifySkipgramPunctuation(sentence, l, m, stats)); currentLoop.add(sentence.get(m)); - validateAndCountSkipgramCandidate(currentLoop, stats); + validateAndCountSkipgramCandidate(currentLoop, stats, s.getTaxonomy()); } } } @@ -308,13 +329,80 @@ public class Ngrams { } } - private static void validateAndCountSkipgramCandidate(ArrayList skipgramCandidate, StatisticsNew stats) { + private static void validateAndCountSkipgramCandidate(ArrayList skipgramCandidate, StatisticsNew stats, List taxonomy) { // count if no regex is set or if it is & candidate passes it if (!stats.getFilter().hasMsd() || passesRegex(skipgramCandidate, stats.getFilter().getMsd())) { - String key = wordToString(skipgramCandidate, stats.getFilter().getCalculateFor()); - key = (key.charAt(key.length()-1) == ',') ? key.substring(0, key.length() - 1) : key; - stats.updateTaxonomyResults(new MultipleHMKeys1(key), - stats.getCorpus().getTaxonomy()); +// String key = wordToString(skipgramCandidate, stats.getFilter().getCalculateFor()); +// key = (key.charAt(key.length()-1) == ',') ? key.substring(0, key.length() - 1) : key; +// stats.updateTaxonomyResults(new MultipleHMKeys1(key), +// stats.getCorpus().getTaxonomy()); + + + ArrayList otherKeys = stats.getFilter().getMultipleKeys(); + + String key = wordToString(skipgramCandidate, stats.getFilter().getCalculateFor()); + + // if last letter is ',' erase it + +// if (key.equals("")){ +// String test = key; +// } + + if (stats.getFilter().getNotePunctuations()) + key = (!key.equals("") && key.charAt(key.length()-1) == ',') ? key.substring(0, key.length() - 1) : key; + + MultipleHMKeys multipleKeys; + + // create MultipleHMKeys for different amount of other keys + switch (otherKeys.size()) { + case 0: + multipleKeys = new MultipleHMKeys1(key); + break; + case 1: + String k1_2 = wordToString(skipgramCandidate, otherKeys.get(0)); + if (stats.getFilter().getNotePunctuations()) + k1_2 = (!k1_2.equals("") && k1_2.charAt(k1_2.length() - 1) == ',') ? k1_2.substring(0, k1_2.length() - 1) : k1_2; + multipleKeys = new MultipleHMKeys2(key, k1_2); + break; + case 2: + String k2_2 = wordToString(skipgramCandidate, otherKeys.get(0)); + String k2_3 = wordToString(skipgramCandidate, otherKeys.get(1)); + if (stats.getFilter().getNotePunctuations()) { + k2_2 = (!k2_2.equals("") && k2_2.charAt(k2_2.length() - 1) == ',') ? k2_2.substring(0, k2_2.length() - 1) : k2_2; + k2_3 = (!k2_3.equals("") && k2_3.charAt(k2_3.length() - 1) == ',') ? k2_3.substring(0, k2_3.length() - 1) : k2_3; + } + multipleKeys = new MultipleHMKeys3(key, k2_2, k2_3); + break; + case 3: + String k3_2 = wordToString(skipgramCandidate, otherKeys.get(0)); + String k3_3 = wordToString(skipgramCandidate, otherKeys.get(1)); + String k3_4 = wordToString(skipgramCandidate, otherKeys.get(2)); + if (stats.getFilter().getNotePunctuations()) { + k3_2 = (!k3_2.equals("") && k3_2.charAt(k3_2.length() - 1) == ',') ? k3_2.substring(0, k3_2.length() - 1) : k3_2; + k3_3 = (!k3_3.equals("") && k3_3.charAt(k3_3.length() - 1) == ',') ? k3_3.substring(0, k3_3.length() - 1) : k3_3; + k3_4 = (!k3_4.equals("") && k3_4.charAt(k3_4.length() - 1) == ',') ? k3_4.substring(0, k3_4.length() - 1) : k3_4; + } + multipleKeys = new MultipleHMKeys4(key, k3_2, k3_3, k3_4); + break; + case 4: + String k4_2 = wordToString(skipgramCandidate, otherKeys.get(0)); + String k4_3 = wordToString(skipgramCandidate, otherKeys.get(1)); + String k4_4 = wordToString(skipgramCandidate, otherKeys.get(2)); + String k4_5 = wordToString(skipgramCandidate, otherKeys.get(3)); + if (stats.getFilter().getNotePunctuations()) { + k4_2 = (!k4_2.equals("") && k4_2.charAt(k4_2.length() - 1) == ',') ? k4_2.substring(0, k4_2.length() - 1) : k4_2; + k4_3 = (!k4_3.equals("") && k4_3.charAt(k4_3.length() - 1) == ',') ? k4_3.substring(0, k4_3.length() - 1) : k4_3; + k4_4 = (!k4_4.equals("") && k4_4.charAt(k4_4.length() - 1) == ',') ? k4_4.substring(0, k4_4.length() - 1) : k4_4; + k4_5 = (!k4_5.equals("") && k4_5.charAt(k4_5.length() - 1) == ',') ? k4_5.substring(0, k4_5.length() - 1) : k4_5; + } + multipleKeys = new MultipleHMKeys5(key, k4_2, k4_3, k4_4, k4_5); + break; + default: + multipleKeys = null; + + } + stats.updateTaxonomyResults(multipleKeys, taxonomy); + } } } diff --git a/src/main/java/data/Filter.java b/src/main/java/data/Filter.java index 925bb66..ee87823 100755 --- a/src/main/java/data/Filter.java +++ b/src/main/java/data/Filter.java @@ -22,6 +22,7 @@ public class Filter { IS_CVV, STRING_LENGTH, TAXONOMY, + DISPLAY_TAXONOMY, MSD, HAS_MSD, SOLAR_FILTERS, @@ -102,6 +103,14 @@ public class Filter { } } + public void setDisplayTaxonomy(boolean displayTaxonomy) { + filter.put(DISPLAY_TAXONOMY, displayTaxonomy); + } + + public boolean getDisplayTaxonomy() { + return (boolean) filter.get(DISPLAY_TAXONOMY); + } + public void setMsd(ArrayList msd) { filter.put(MSD, msd); if (!ValidationUtil.isEmpty(msd)) { diff --git a/src/main/java/data/StatisticsNew.java b/src/main/java/data/StatisticsNew.java index 5949fd7..0fe561d 100755 --- a/src/main/java/data/StatisticsNew.java +++ b/src/main/java/data/StatisticsNew.java @@ -48,7 +48,7 @@ public class StatisticsNew { this.taxonomyResult.put("Total", new ConcurrentHashMap<>()); // create table for counting word occurances per taxonomies - if (this.corpus.getTaxonomy() != null) { + if (this.corpus.getTaxonomy() != null && filter.getDisplayTaxonomy()) { if (this.filter.getTaxonomy().isEmpty()) { for (int i = 0; i < this.corpus.getTaxonomy().size(); i++) { this.taxonomyResult.put(this.corpus.getTaxonomy().get(i), new ConcurrentHashMap<>()); diff --git a/src/main/java/gui/CharacterAnalysisTab.java b/src/main/java/gui/CharacterAnalysisTab.java index d06a666..6b7f144 100755 --- a/src/main/java/gui/CharacterAnalysisTab.java +++ b/src/main/java/gui/CharacterAnalysisTab.java @@ -43,6 +43,10 @@ public class CharacterAnalysisTab { private CheckComboBox taxonomyCCB; private ArrayList taxonomy; + @FXML + private CheckBox displayTaxonomyChB; + private boolean displayTaxonomy; + @FXML private CheckBox calculatecvvCB; private boolean calculateCvv; @@ -171,6 +175,14 @@ public class CharacterAnalysisTab { taxonomyCCB.setDisable(true); } + displayTaxonomy = false; + // set + displayTaxonomyChB.selectedProperty().addListener((observable, oldValue, newValue) -> { + displayTaxonomy = newValue; + logger.info("display taxonomy: ", displayTaxonomy); + }); + displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB)); + // cvv calculatecvvCB.selectedProperty().addListener((observable, oldValue, newValue) -> { calculateCvv = newValue; @@ -390,6 +402,7 @@ public class CharacterAnalysisTab { filter.setCalculateFor(calculateFor); filter.setMsd(msd); filter.setTaxonomy(Tax.getTaxonomyCodes(taxonomy, corpus.getCorpusType())); + filter.setDisplayTaxonomy(displayTaxonomy); filter.setAl(AnalysisLevel.STRING_LEVEL); filter.setSkipValue(0); filter.setIsCvv(calculateCvv); diff --git a/src/main/java/gui/CorpusTab.java b/src/main/java/gui/CorpusTab.java index f31d1fc..6bb5aba 100755 --- a/src/main/java/gui/CorpusTab.java +++ b/src/main/java/gui/CorpusTab.java @@ -46,9 +46,9 @@ public class CorpusTab { private CheckBox readHeaderInfoChB; private boolean readHeaderInfo; - @FXML - private CheckBox gosUseOrthChB; - private boolean gosUseOrth; +// @FXML +// private CheckBox gosUseOrthChB; +// private boolean gosUseOrth; @FXML private Button chooseResultsLocationB; @@ -102,21 +102,21 @@ public class CorpusTab { }); readHeaderInfoChB.setTooltip(new Tooltip(TOOLTIP_readHeaderInfoChB)); - gosUseOrthChB.selectedProperty().addListener((observable, oldValue, newValue) -> { - gosUseOrth = newValue; - corpus.setGosOrthMode(gosUseOrth); -// wordFormationTab.setDisable(gosUseOrth); - satNew2Controller.toggleMode(null); - oneWordTabController.toggleMode(null); - catController.toggleMode(null); - - logger.info("gosUseOrth: ", gosUseOrth); - }); +// gosUseOrthChB.selectedProperty().addListener((observable, oldValue, newValue) -> { +// gosUseOrth = newValue; +// corpus.setGosOrthMode(gosUseOrth); +//// wordFormationTab.setDisable(gosUseOrth); +// satNew2Controller.toggleMode(null); +// oneWordTabController.toggleMode(null); +// catController.toggleMode(null); +// +// logger.info("gosUseOrth: ", gosUseOrth); +// }); chooseResultsLocationB.setOnAction(e -> chooseResultsLocation(null)); // set labels and toggle visibility - toggleGosChBVisibility(); +// toggleGosChBVisibility(); chooseCorpusLabelContent = Messages.LABEL_CORPUS_LOCATION_NOT_SET; chooseCorpusL.setText(chooseCorpusLabelContent); @@ -227,7 +227,7 @@ public class CorpusTab { private void setResults() { // if everything is ok // check and enable checkbox if GOS - toggleGosChBVisibility(); +// toggleGosChBVisibility(); // set default results location String defaultResultsLocationPath = corpus.getChosenCorpusLocation().getAbsolutePath(); @@ -420,9 +420,9 @@ public class CorpusTab { /** * Hides GOS related checkbox until needed. */ - private void toggleGosChBVisibility() { - gosUseOrthChB.setVisible(corpus != null && corpus.getCorpusType() != null && corpus.getCorpusType() == CorpusType.GOS); - } +// private void toggleGosChBVisibility() { +// gosUseOrthChB.setVisible(corpus != null && corpus.getCorpusType() != null && corpus.getCorpusType() == CorpusType.GOS); +// } private String detectCorpusType(Collection corpusFiles, String corpusLocation) { // check that we recognize this corpus diff --git a/src/main/java/gui/Messages.java b/src/main/java/gui/Messages.java index 8a21e9f..f34eaa7 100755 --- a/src/main/java/gui/Messages.java +++ b/src/main/java/gui/Messages.java @@ -55,6 +55,7 @@ public class Messages { 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."; diff --git a/src/main/java/gui/OneWordAnalysisTab.java b/src/main/java/gui/OneWordAnalysisTab.java index 2f10e59..8c40595 100755 --- a/src/main/java/gui/OneWordAnalysisTab.java +++ b/src/main/java/gui/OneWordAnalysisTab.java @@ -45,6 +45,10 @@ public class OneWordAnalysisTab { private CheckComboBox taxonomyCCB; private ArrayList taxonomy; + @FXML + private CheckBox displayTaxonomyChB; + private boolean displayTaxonomy; + @FXML private ComboBox calculateForCB; private CalculateFor calculateFor; @@ -91,7 +95,7 @@ public class OneWordAnalysisTab { private static final ObservableList alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka"); private static final ObservableList alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka"); private static final ObservableList alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica"); - private static final ObservableList alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "različnica"); + private static final ObservableList alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka"); private static final ObservableList alsoVisualizeItemsEmpty = FXCollections.observableArrayList(); // TODO: pass observables for taxonomy based on header scan @@ -192,6 +196,14 @@ public class OneWordAnalysisTab { taxonomyCCB.setDisable(true); } + displayTaxonomy = false; + // set + displayTaxonomyChB.selectedProperty().addListener((observable, oldValue, newValue) -> { + displayTaxonomy = newValue; + logger.info("display taxonomy: ", displayTaxonomy); + }); + displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB)); + // set default values minimalOccurrencesTF.setText("1"); minimalOccurrences = 1; @@ -369,6 +381,7 @@ public class OneWordAnalysisTab { filter.setCalculateFor(calculateFor); filter.setMsd(msd); filter.setTaxonomy(Tax.getTaxonomyCodes(taxonomy, corpus.getCorpusType())); + filter.setDisplayTaxonomy(displayTaxonomy); filter.setAl(AnalysisLevel.STRING_LEVEL); filter.setSkipValue(0); filter.setIsCvv(false); diff --git a/src/main/java/gui/StringAnalysisTabNew2.java b/src/main/java/gui/StringAnalysisTabNew2.java index 766edee..2c0445e 100755 --- a/src/main/java/gui/StringAnalysisTabNew2.java +++ b/src/main/java/gui/StringAnalysisTabNew2.java @@ -38,6 +38,10 @@ public class StringAnalysisTabNew2 { private ArrayList msd; private ArrayList msdStrings; + @FXML + private CheckComboBox alsoVisualizeCCB; + private ArrayList alsoVisualize; + @FXML private CheckComboBox taxonomyCCB; private ArrayList taxonomy; @@ -66,6 +70,10 @@ public class StringAnalysisTabNew2 { private CheckBox notePunctuationsChB; private boolean notePunctuations; + @FXML + private CheckBox displayTaxonomyChB; + private boolean displayTaxonomy; + @FXML private TextField minimalOccurrencesTF; private Integer minimalOccurrences; @@ -111,6 +119,12 @@ public class StringAnalysisTabNew2 { // private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica"); private static final ObservableList N_GRAM_COMPUTE_FOR_LETTERS = FXCollections.observableArrayList("lema", "različnica"); private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS_ORTH = FXCollections.observableArrayList("različnica"); + private static final ObservableList N_GRAM_COMPUTE_FOR_WORDS_GOS = FXCollections.observableArrayList("lema", "različnica", "oblikoskladenjska oznaka", "normalizirana različnica"); + private static final ObservableList alsoVisualizeItemsLemma = FXCollections.observableArrayList("besedna vrsta", "oblikoskladenjska oznaka"); + private static final ObservableList alsoVisualizeItemsWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka"); + private static final ObservableList alsoVisualizeItemsWordGos = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka", "normalizirana različnica"); + private static final ObservableList alsoVisualizeItemsNormalizedWord = FXCollections.observableArrayList("lema", "besedna vrsta", "oblikoskladenjska oznaka"); + private static final ObservableList alsoVisualizeItemsEmpty = FXCollections.observableArrayList(); // TODO: pass observables for taxonomy based on header scan @@ -163,9 +177,39 @@ public class StringAnalysisTabNew2 { }); notePunctuationsChB.setTooltip(new Tooltip(TOOLTIP_readNotePunctuationsChB)); + displayTaxonomy = false; + // set + displayTaxonomyChB.selectedProperty().addListener((observable, oldValue, newValue) -> { + displayTaxonomy = newValue; + logger.info("display taxonomy: ", displayTaxonomy); + }); + displayTaxonomyChB.setTooltip(new Tooltip(TOOLTIP_readDisplayTaxonomyChB)); + // 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 { + alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsEmpty); + } + alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { + alsoVisualize = new ArrayList<>(); + ObservableList checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems(); + alsoVisualize.addAll(checkedItems); + logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ","))); + }); + alsoVisualizeCCB.getCheckModel().clearChecks(); + logger.info("calculateForCB:", calculateFor.toString()); }); @@ -205,6 +249,16 @@ public class StringAnalysisTabNew2 { msdTF.setText(""); msd = new ArrayList<>(); + alsoVisualizeCCB.getItems().removeAll(); + alsoVisualizeCCB.getItems().setAll(alsoVisualizeItemsLemma); + alsoVisualizeCCB.getCheckModel().getCheckedItems().addListener((ListChangeListener) c -> { + alsoVisualize = new ArrayList<>(); + ObservableList checkedItems = alsoVisualizeCCB.getCheckModel().getCheckedItems(); + alsoVisualize.addAll(checkedItems); + logger.info(String.format("Selected also visualize items: %s", StringUtils.join(checkedItems, ","))); + }); + alsoVisualizeCCB.getCheckModel().clearChecks(); + // taxonomy if (Tax.getCorpusTypesWithTaxonomy().contains(corpus.getCorpusType())) { taxonomyCCB.getItems().removeAll(); @@ -424,7 +478,11 @@ public class StringAnalysisTabNew2 { // if (corpus.getCorpusType() == CorpusType.GOS) // calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS_GOS); // else - calculateForCB.getItems().setAll(N_GRAM_COMPUTE_FOR_WORDS); + 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); @@ -462,11 +520,13 @@ public class StringAnalysisTabNew2 { filter.setCalculateFor(calculateFor); filter.setMsd(msd); filter.setTaxonomy(Tax.getTaxonomyCodes(taxonomy, corpus.getCorpusType())); + filter.setDisplayTaxonomy(displayTaxonomy); filter.setAl(AnalysisLevel.STRING_LEVEL); filter.setSkipValue(skipValue); filter.setIsCvv(calculateCvv); filter.setSolarFilters(solarFiltersMap); filter.setNotePunctuations(notePunctuations); + filter.setMultipleKeys(alsoVisualize); filter.setMinimalOccurrences(minimalOccurrences); filter.setMinimalTaxonomy(minimalTaxonomy); diff --git a/src/main/resources/gui/CharacterAnalysisTab.fxml b/src/main/resources/gui/CharacterAnalysisTab.fxml index 4f16e10..bb58036 100755 --- a/src/main/resources/gui/CharacterAnalysisTab.fxml +++ b/src/main/resources/gui/CharacterAnalysisTab.fxml @@ -27,17 +27,21 @@ -