diff --git a/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java b/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java index 807dc70..6eb7989 100644 --- a/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java +++ b/src/main/java/pl/waw/ipipan/zil/core/md/detection/Detector.java @@ -107,7 +107,7 @@ public class Detector { for (SyntacticGroup group : sentence.getGroups()) { - SyntacticGroup nextGroup = group.getFollowingGroup(); + /*SyntacticGroup nextGroup = group.getFollowingGroup(); SyntacticGroup nextnextGroup = null; SyntacticGroup nextnextnextGroup = null; if (nextGroup != null) { @@ -115,9 +115,9 @@ public class Detector { if (nextnextGroup != null) { nextnextnextGroup = nextnextGroup.getFollowingGroup(); } - } + }*/ - /*if (group.getType().startsWith("NG")) { + if (group.getType().startsWith("NG")) { ArrayList<SyntacticGroup> nestedGroups = new ArrayList<SyntacticGroup>(); nestedGroups.add(group); @@ -127,11 +127,11 @@ public class Detector { nextGroup = nextGroup.getFollowingGroup(); } - Mention mention = create_mention(nestedGroups, valence.get(ValenceDicts.NounsValence)); + Mention mention = createMention(nestedGroups, valence.get(ValenceDicts.NounsValence)); sentence.addMention(mention); - }*/ + } - if (group.getType().startsWith("NG") && nextGroup != null && + /*if (group.getType().startsWith("NG") && nextGroup != null && nextnextGroup != null && nextnextnextGroup != null && quatroCompatibility(group, nextGroup, nextnextGroup, nextnextnextGroup, valence.get(ValenceDicts.NounsValence))) { @@ -166,11 +166,11 @@ public class Detector { List<Token> heads = group.getSemanticHeadTokens(); sentence.addMention(new Mention(segments, heads)); - } + }*/ } } - private static boolean isProperSchema(String schema, ArrayList<String> group1Types, + /*private static boolean isProperSchema(String schema, ArrayList<String> group1Types, ArrayList<String> group2Types) { for (String group1Type : group1Types) { if (schemaContains(schema, group1Type)) { @@ -182,7 +182,7 @@ public class Detector { } } return false; - } + }*/ /*private static boolean isProperSchema(String schema, ArrayList<String> group1Types, ArrayList<String> group2Types) { @@ -205,7 +205,7 @@ public class Detector { return false; }*/ - private static boolean groupsValenceCompatibility(SyntacticGroup NG1, + /*private static boolean groupsValenceCompatibility(SyntacticGroup NG1, SyntacticGroup NG2, Sentence sentence, Map<String,ArrayList<String>> walentyMapping) { Token NG1Head = NG1.getSemanticHeadTokens().get(0); @@ -295,7 +295,7 @@ public class Detector { return false; } - /*private static boolean isTripleProperSchema(String schema, ArrayList<String> group1Types, + private static boolean isTripleProperSchema(String schema, ArrayList<String> group1Types, ArrayList<String> group2Types, ArrayList<String> group3Types) { ArrayList<String> group1MPositions = getMatchingPositions(schema, group1Types); @@ -319,7 +319,54 @@ public class Detector { return false; }*/ - /*private static boolean isProperSchema(String schema, + private static Mention createMention(ArrayList<SyntacticGroup> nestedGroups, + Map<String,ArrayList<String>> walentyNouns) { + + SyntacticGroup initialGroup = nestedGroups.get(0); + String initialGroupHead = initialGroup.getSemanticHeadTokens().get(0).getBase(); + + List<Token> heads = initialGroup.getSemanticHeadTokens(); + List<Token> segments = new ArrayList<Token>(); + + if (!walentyNouns.containsKey(initialGroupHead)) { + segments.addAll(initialGroup.getTokens()); + } else { + + ArrayList<String> schemata = walentyNouns.get(initialGroupHead); + ArrayList<ArrayList<String>> groupsRealizations = new ArrayList<ArrayList<String>>(); + ArrayList<SyntacticGroup> largestMatch = new ArrayList<SyntacticGroup>(); + largestMatch.add(initialGroup); + + for (int i=1; i < nestedGroups.size(); i++) { + SyntacticGroup group = nestedGroups.get(i); + ArrayList<String> realizations = group.getWalentyRealizations(); + groupsRealizations.add(realizations); + if (realizationsMatch(schemata, groupsRealizations)) { + largestMatch.add(group); + } else { + break; + } + } + + for (SyntacticGroup group : largestMatch) { + segments.addAll(group.getTokens()); + } + + } + return new Mention(segments, heads); + } + + private static boolean realizationsMatch(ArrayList<String> schemata, + ArrayList<ArrayList<String>> groupsRealizations) { + for (String schema : schemata) { + if (isProperSchema(schema, groupsRealizations)) { + return true; + } + } + return false; + } + + private static boolean isProperSchema(String schema, ArrayList<ArrayList<String>> groupsRealizations) { ArrayList<ArrayList<String>> matchingPositions = new ArrayList<ArrayList<String>>(); @@ -328,13 +375,14 @@ public class Detector { } if (matchingPositionsExists(matchingPositions)) { - ArrayList<ArrayList<String>> product = cartesianProduct(matchingPositions); + return true; + /*ArrayList<ArrayList<String>> product = cartesianProduct(matchingPositions); for (ArrayList<String> combination : product) { Set<String> combinationSet = new HashSet<String>(combination); if (combinationSet.size() == matchingPositions.size()) { return true; } - } + }*/ } return false; } @@ -381,7 +429,7 @@ public class Detector { } } return positions; - }*/ + } private static boolean schemaContains(String schema, String phraseType) { for (String position : schema.split("\\s\\+\\s")) {