CoolFace
Apppublic

project-sign-language/Sign_language

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
ASL_gloss_functions.py100 linesDownload Raw Back to src
1# Define a list of question adverbs2opened_question_adverbs = ["how", "when", "where", "why", "how much", "how many", "how often", "how long", "what", "which", "who", "whose", "whom"]3 4## time adverbs to be moved at the beginning of ASL Gloss sentences5time_words = ["yesterday", "today", "tomorrow"]6 7# ASL glossing rules implemented in functions8def gloss_word(word):9    return word.upper()10 11def handle_fingerspelling(word):12    return '-'.join(list(word.upper()))13 14def handle_lexicalized_fingerspelling(word):15    return f"#{word.upper()}"16 17def handle_repetition(word, count):18    return f"{word.upper()}{'+' * (count - 1)}" if count > 1 else word.upper()19 20def handle_role_shift(sentence):21    return f"rs {sentence}"22 23def handle_indexing(token, index):24    return f"ix_{index} {token.upper()}"25 26def gloss_sentence(doc):27    glossed_sentence = []28    for token in doc:29        glossed_word = gloss_word(token.text)30        glossed_sentence.append(glossed_word)31    return " ".join(glossed_sentence)32 33def add_time_indicator(gloss_sentence_):34    for word in gloss_sentence_:35        if word.text.lower() in time_words:36            return f"{word.text.upper()} {gloss_sentence_.replace(word.text.upper(), '').strip()}"37    return gloss_sentence_38 39## skip stop_words40def skip_stop_words(word):41    if word.lower() == 'the' or word.lower() == 'a':42        return ''43    else:44        return word45 46## doc est une liste de tokens47def question_type(doc):48    try:49        if doc[-1].text == '?':50            if doc[0].text.lower() in opened_question_adverbs:51                return "wh-question"52            else:53                return "yes-no-question"54        return None55    56    except IndexError:57        return None58 59# add question id as a prefix60def process_sentence(doc):61    nms = {62        "wh-question": "wh-q",63        "yes-no-question": "y/n-q"64    }65    66    classifiers = {67        "car": "CL:3",68        "person": "CL:1"69    }70    71    glossed_sentence = []72    for token in doc:73        ## utilize token.lemma_, not .text74        #word = token.text.lower()75        word = token.lemma_.lower()76        77        if word in ["i", "me"]:78            glossed_word = handle_indexing("I", 1)79        elif word in ["you"]:80            glossed_word = handle_indexing("YOU", 2)81        elif word in classifiers:82            glossed_word = classifiers[word]83        else:84            glossed_word = gloss_word(word)85        glossed_word = skip_stop_words(glossed_word)86        87        glossed_sentence.append(glossed_word)    88 89    for gloss in glossed_sentence:90        if gloss.lower() in time_words:91            # move gloss at beginning92            glossed_sentence.insert(0, glossed_sentence.pop(glossed_sentence.index(gloss)))93            break94        95    type_doc = question_type(doc)96    if type_doc != None:97        glossed_sentence.insert(0, nms[type_doc])98        99    return " ".join(glossed_sentence)100