project-sign-language/Sign_language
0
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 