예제 #1
0
 def _set_lemma(self, generated_roots):
     for r in generated_roots:
         word, applied_suffix_form = Phonetics.apply(
             r.lexeme.root, r.phonetic_attributes, u'mAk',
             r.lexeme.attributes)
         assert word and applied_suffix_form
         r.lexeme.lemma = word + applied_suffix_form
예제 #2
0
def try_suffix_form(morpheme_container, suffix_form, to_state, word):
    state_before_suffix_form_application = morpheme_container.get_last_state()

    if not transition_allowed_for_suffix_form(morpheme_container, suffix_form):
        return None

    so_far = morpheme_container.get_surface_so_far()
    morpheme_container_lexeme_attributes = morpheme_container.get_lexeme_attributes()

    morpheme_container_phonetic_attributes = morpheme_container.get_phonetic_attributes()

    modified_word, fitting_suffix_form = Phonetics.apply(so_far, morpheme_container_phonetic_attributes, suffix_form.form, morpheme_container_lexeme_attributes)
    applied_str =  modified_word + fitting_suffix_form
    if Phonetics.application_matches(word, applied_str, to_state.name!='VERB_ROOT'):
        actual_suffix_form_str = word[len(so_far):len(applied_str)]
        logger.debug('      Word "%s" starts with applied str "%s" (%s), adding to current morpheme container', word, applied_str, actual_suffix_form_str)
        clone = morpheme_container.clone()
        clone.add_transition(SuffixFormApplication(suffix_form, actual_suffix_form_str, fitting_suffix_form), to_state)

        if morpheme_container.has_transitions() and morpheme_container.get_last_transition().suffix_form_application.suffix_form.postcondition and not morpheme_container.get_last_transition().suffix_form_application.suffix_form.postcondition.is_satisfied_by(clone):
            if logger.isEnabledFor(logging.DEBUG):
                logger.debug('      Suffix does not satisfy the postcondition "%s" of last transition suffix form "%s", skipping.', morpheme_container.get_last_transition().suffix_form_application.suffix_form.postcondition, formatter.format_transition(clone.get_last_transition()))
            return None

        if morpheme_container.has_transitions() and state_before_suffix_form_application.type==State.DERIVATIONAL:
            logger.debug('      Suffix is derivative, checking the post derivation conditions of suffixes from previous derivation.')
            for transition in morpheme_container.get_transitions_from_derivation_suffix():
                application_suffix_form = transition.suffix_form_application.suffix_form
                if application_suffix_form.post_derivation_condition:
                    matches = application_suffix_form.post_derivation_condition.is_satisfied_by(clone)
                    if not matches:
                        logger.debug('      Post derivation condition "%s" of suffix "%s" is not satisfied, skipping.', application_suffix_form.post_derivation_condition, application_suffix_form.suffix)
                        return None

        return clone

    else:
        logger.debug('      Word "%s" does not start with applied str "%s" (%s), skipping', word, applied_str, applied_str)
        return None
예제 #3
0
def try_suffix_form(morpheme_container, suffix_form, to_state, word):
    state_before_suffix_form_application = morpheme_container.get_last_state()

    if not transition_allowed_for_suffix_form(morpheme_container, suffix_form):
        return None

    so_far = morpheme_container.get_surface_so_far()
    morpheme_container_lexeme_attributes = morpheme_container.get_lexeme_attributes(
    )

    morpheme_container_phonetic_attributes = morpheme_container.get_phonetic_attributes(
    )

    modified_word, fitting_suffix_form = Phonetics.apply(
        so_far, morpheme_container_phonetic_attributes, suffix_form.form,
        morpheme_container_lexeme_attributes)
    applied_str = modified_word + fitting_suffix_form
    if Phonetics.application_matches(word, applied_str,
                                     to_state.name != 'VERB_ROOT'):
        actual_suffix_form_str = word[len(so_far):len(applied_str)]
        logger.debug(
            '      Word "%s" starts with applied str "%s" (%s), adding to current morpheme container',
            word, applied_str, actual_suffix_form_str)
        clone = morpheme_container.clone()
        clone.add_transition(
            SuffixFormApplication(suffix_form, actual_suffix_form_str,
                                  fitting_suffix_form), to_state)

        if morpheme_container.has_transitions(
        ) and morpheme_container.get_last_transition(
        ).suffix_form_application.suffix_form.postcondition and not morpheme_container.get_last_transition(
        ).suffix_form_application.suffix_form.postcondition.is_satisfied_by(
                clone):
            if logger.isEnabledFor(logging.DEBUG):
                logger.debug(
                    '      Suffix does not satisfy the postcondition "%s" of last transition suffix form "%s", skipping.',
                    morpheme_container.get_last_transition().
                    suffix_form_application.suffix_form.postcondition,
                    formatter.format_transition(clone.get_last_transition()))
            return None

        if morpheme_container.has_transitions(
        ) and state_before_suffix_form_application.type == State.DERIVATIONAL:
            logger.debug(
                '      Suffix is derivative, checking the post derivation conditions of suffixes from previous derivation.'
            )
            for transition in morpheme_container.get_transitions_from_derivation_suffix(
            ):
                application_suffix_form = transition.suffix_form_application.suffix_form
                if application_suffix_form.post_derivation_condition:
                    matches = application_suffix_form.post_derivation_condition.is_satisfied_by(
                        clone)
                    if not matches:
                        logger.debug(
                            '      Post derivation condition "%s" of suffix "%s" is not satisfied, skipping.',
                            application_suffix_form.post_derivation_condition,
                            application_suffix_form.suffix)
                        return None

        return clone

    else:
        logger.debug(
            '      Word "%s" does not start with applied str "%s" (%s), skipping',
            word, applied_str, applied_str)
        return None
예제 #4
0
 def _set_lemma(self, generated_roots):
     for r in generated_roots:
         word, applied_suffix_form = Phonetics.apply(r.lexeme.root, r.phonetic_attributes, u'mAk',
             r.lexeme.attributes)
         assert word and applied_suffix_form
         r.lexeme.lemma = word + applied_suffix_form
예제 #5
0
def ap(word, form_str, lexeme_attributes=None):
    phonetic_attributes = Phonetics.calculate_phonetic_attributes(
        word, lexeme_attributes)
    word, application = Phonetics.apply(word, phonetic_attributes, form_str,
                                        lexeme_attributes)
    return word + application
예제 #6
0
def ap(word, form_str, lexeme_attributes=None):
    phonetic_attributes = Phonetics.calculate_phonetic_attributes(word, lexeme_attributes)
    word, application = Phonetics.apply(word, phonetic_attributes, form_str, lexeme_attributes)
    return word + application