Spaces:
Runtime error
Runtime error
| from transformers import AutoTokenizer, AutoModelForTokenClassification | |
| from transformers import pipeline | |
| from word2number import w2n | |
| import pandas as pd | |
| class Order_Parser(): | |
| def __init__(self): | |
| tokenizer = AutoTokenizer.from_pretrained("davanstrien/deberta-v3-base_fine_tuned_food_ner") | |
| model = AutoModelForTokenClassification.from_pretrained("davanstrien/deberta-v3-base_fine_tuned_food_ner") | |
| self.pipe = pipeline("ner", model=model, tokenizer=tokenizer) | |
| self.complete_order_dict={} | |
| def restart_state(self): | |
| self.complete_order_dict={} | |
| def join_adjacent_items(self, data): | |
| result = [] | |
| current_group = [] | |
| current_entity = None | |
| for item in data: | |
| # Check if the item's entity is related to FOOD or QUANTITY | |
| if any(e in item['entity'] for e in ['FOOD', 'QUANTITY']): | |
| # Start a new group if the entity type changes | |
| if not current_entity: | |
| current_entity = item['entity'].split('-')[-1] | |
| elif current_entity != item['entity'].split('-')[-1]: | |
| result.append({'entity': current_entity, 'word': ''.join(current_group)}) | |
| current_group = [] | |
| current_entity = item['entity'].split('-')[-1] | |
| current_group.append(item['word']) | |
| else: | |
| if current_group: | |
| result.append({'entity': current_entity, 'word': ''.join(current_group)}) | |
| current_group = [] | |
| current_entity = None | |
| result.append(item) | |
| # Handle the last group if it exists | |
| if current_group: | |
| result.append({'entity': current_entity, 'word': ''.join(current_group)}) | |
| return result | |
| def order_parser(self, sentence): | |
| sentence = sentence.replace(',', ' ') | |
| sentence = sentence.replace('?', ' ') | |
| sentence = sentence.replace('.', ' ') | |
| # updated_sentence = updated_sentence.replace('and', 'one') | |
| sentence = sentence.replace(' a ', ' one ') | |
| sentence = sentence.replace(' an ', ' one ') | |
| # sentence = sentence.replace(' and ', ' one ') | |
| # print(updated_sentence) | |
| # raw_order = self.pipe(updated_sentence) | |
| print(sentence) | |
| raw_order = self.pipe(sentence) | |
| raw_order_piped = self.join_adjacent_items(raw_order) | |
| order_dict={} | |
| quantity_exist = False | |
| for ent in raw_order_piped: | |
| if 'QUANTITY' in ent['entity']: | |
| quantity = ent['word'].replace('β', ' ') | |
| try: | |
| quantity = w2n.word_to_num(quantity) | |
| except: | |
| quantity = 1 | |
| # print(quantity) | |
| quantity_exist = True | |
| elif 'FOOD' in ent['entity']: | |
| food = ent['word'].replace('β', '') | |
| # print(food) | |
| if quantity_exist: | |
| order_dict[food] = quantity | |
| else: | |
| order_dict[food] = 1 | |
| quantity_exist=False | |
| # print(order_dict) | |
| self.complete_order_dict.update(order_dict) | |
| return self.complete_order_dict | |