001package de.monochromata.anaphors.ast.unify; 002 003import static de.monochromata.anaphors.ast.reference.strategy.concept.FauxHyponymy.HyFx_KIND; 004import static de.monochromata.anaphors.ast.reference.strategy.concept.Hyponymy.Hy_KIND; 005import static de.monochromata.anaphors.ast.unify.Unification.haveEqualReferent; 006import static de.monochromata.anaphors.ast.unify.Unification.unifyListElements; 007 008import java.util.List; 009import java.util.function.BiPredicate; 010 011import de.monochromata.anaphors.ast.ASTBasedAnaphora; 012import de.monochromata.anaphors.ast.relatedexp.RelatedExpression; 013 014public interface HyponymyPrecedesFauxHyponymy { 015 016 static <N, E, T, B, TB extends B, S, I, QI, R extends RelatedExpression<N, T, B, TB, S, QI, R>, A extends ASTBasedAnaphora<N, E, T, B, TB, S, I, QI, R, A>> List<A> preferHynonymyOverFauxHyponymy( 017 final List<A> potentialAnaphoraRelations) { 018 return unifyListElements(potentialAnaphoraRelations, preferHyOverHyFx()); 019 } 020 021 static <N, E, T, B, TB extends B, S, I, QI, R extends RelatedExpression<N, T, B, TB, S, QI, R>, A extends ASTBasedAnaphora<N, E, T, B, TB, S, I, QI, R, A>> BiPredicate<A, A> preferHyOverHyFx() { 022 return (anaphora1, anaphora2) -> haveHyAndHyFx(anaphora1, anaphora2) && haveEqualReferent(anaphora1, anaphora2); 023 } 024 025 private static <N, E, T, B, TB extends B, S, I, QI, R extends RelatedExpression<N, T, B, TB, S, QI, R>, A extends ASTBasedAnaphora<N, E, T, B, TB, S, I, QI, R, A>> boolean haveHyAndHyFx( 026 final A anaphora1, final A anaphora2) { 027 return anaphora1.getReferentializationStrategy().getKind().equals(Hy_KIND) 028 && anaphora2.getReferentializationStrategy().getKind().equals(HyFx_KIND); 029 } 030 031}