diff --git a/libwccl/ops/actions/unify.cpp b/libwccl/ops/actions/unify.cpp index 0733efdd7ea3f413bb1e64a5c119164a461161d8..0cf51523b57798165bbf0fca69303c3b103ab651 100644 --- a/libwccl/ops/actions/unify.cpp +++ b/libwccl/ops/actions/unify.cpp @@ -57,9 +57,13 @@ Bool Unify::execute(const ActionExecContext& context) const std::vector<Corpus2::Lexeme> curr_rem; // get only lexemes that agree with a lexeme from previous token foreach(const Corpus2::Lexeme& curr_lex, remainings[i]) { + int curr_match_cats = attribs->matching_categories(curr_lex.tag()); foreach(const Corpus2::Lexeme& prev_lex, prev_rem) { Corpus2::Tag inter = curr_lex.tag().get_masked(prev_lex.tag()); - if (attribs->matching_categories(inter) == attribs->matching_categories(curr_lex.tag())) { + int min_to_match = std::min( + curr_match_cats, + attribs->matching_categories(prev_lex.tag())); + if (attribs->matching_categories(inter) == min_to_match) { curr_rem.push_back(curr_lex); break; }