Spaces:
Runtime error
Runtime error
File size: 4,053 Bytes
a6b7b32 dfc433d a6b7b32 dfc433d 3e1c1d6 a6b7b32 3b41222 3e1c1d6 a6b7b32 1e794df dfc433d 1e794df dfc433d a6b7b32 dfc433d 1e794df dfc433d a6b7b32 62c6339 a6b7b32 dfc433d a6b7b32 62c6339 a6b7b32 dfc433d a6b7b32 1e794df dfc433d a6b7b32 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
from dis import Instruction
import requests
from decouple import config
import gradio as gr
import spacy
import re
# for generating requirements.txt, use:
# pip install pipreqs
# pipreqs ./ --force
RAPIDAPI_KEY = config('RAPIDAPI_KEY')
ner = gr.Blocks.load(name='models/victorialslocum/en_reciparse_model')
def get_recipe_data(recipe_url):
rapid_api_url = "https://mycookbook-io1.p.rapidapi.com/recipes/rapidapi"
headers = {
"content-type": "text/plain",
"X-RapidAPI-Host": "mycookbook-io1.p.rapidapi.com",
"X-RapidAPI-Key": RAPIDAPI_KEY
}
response = requests.request("POST", rapid_api_url,
data=recipe_url, headers=headers).json()
# print(response)
instructions_list = response[0]['instructions'][0]['steps']
ingredients_list = response[0]['ingredients']
recipe_title = response[0]['name']
instructions = ""
ingredients = ""
for i in range(len(instructions_list)):
instructions += f'{i+1}. {instructions_list[i]} \n'
for i in range(len(ingredients_list)):
ingredients += f'{i+1}. {ingredients_list[i]} \n'
return instructions, ingredients, recipe_title
def get_data(data):
nlp = spacy.load("en_core_web_sm")
doc = ner(data)
ingredients_list = []
for item in doc:
if item[1] == 'INGREDIENT':
item_lemma = ' ' .join([tok.lemma_ for tok in nlp(item[0])])
if item_lemma not in ingredients_list:
ingredients_list.append(item_lemma)
ingredients_out = ""
for i in range(len(ingredients_list)):
ingredients_out += f'{i+1}. {ingredients_list[i]} \n'
return ingredients_out
def final_ingredients(inst_ingredients_list, ingr_ingredients_list):
instructions_guess = [re.sub(r'[0-9]+', '', item)[2:-1] for item in inst_ingredients_list.split('\n')if len(item) > 3]
ingredients_guess = [re.sub(r'[0-9]+', '', item)[2:-1] for item in ingr_ingredients_list.split('\n')if len(item) > 3]
final_guess_list = []
for ingr_item in ingredients_guess:
for inst_item in instructions_guess:
if inst_item in ingr_item and ingr_item not in final_guess_list:
final_guess_list.append(ingr_item)
final_guess = ""
for i in range(len(final_guess_list)):
final_guess += f'{i+1}. {final_guess_list[i]} \n'
return final_guess
with gr.Blocks() as demo:
gr.Markdown("# Reciparse Visualizer")
gr.Markdown("### Powered by spaCy and Gradio")
with gr.Box():
ingredients_list = gr.Variable()
with gr.Column():
gr.Markdown("## Recipe Info")
with gr.Row():
recipe_link = gr.Textbox(label="Recipe link", placeholder="Input your recipe link")
recipe_title = gr.Textbox(label="Recipe title")
with gr.Row():
instructions = gr.Textbox(label="Instructions")
ingredients = gr.Textbox(label="Ingredients")
recipe_btn = gr.Button("Get recipe info")
with gr.Box():
with gr.Column():
gr.Markdown("## Ingredient Info")
ingredient_btn = gr.Button("Get the list of ingredients")
final_btn = gr.Button("Create the final list")
with gr.Row():
ingr_ingredients_list = gr.Textbox(label="Ingredients in recipe based off of ingredients list")
inst_ingredients_list = gr.Textbox(label="Ingredients in recipe based off of instructions")
final_ingredients_list = gr.Textbox(label="Final ingredient guess")
recipe_btn.click(fn=get_recipe_data, inputs=recipe_link, outputs=[instructions, ingredients, recipe_title])
ingredient_btn.click(fn=get_data, inputs=[ingredients], outputs=[ingr_ingredients_list])
ingredient_btn.click(fn=get_data, inputs=[instructions], outputs=[inst_ingredients_list])
final_btn.click(fn=final_ingredients, inputs=[inst_ingredients_list, ingr_ingredients_list], outputs=[final_ingredients_list])
demo.launch() |