From ad343e6e49f44418659e8c74a2400576bf87457a Mon Sep 17 00:00:00 2001 From: Jonas Weinz Date: Tue, 14 May 2019 21:46:16 +0200 Subject: [PATCH] some experiments --- 1M_word2vec.ipynb | 1012 +++++++++++++++++++++++++++++++++ Yummly_word2vec.ipynb | 120 ++++ cooking_ingredients.py | 652 +++++++++++++++++++++ cooking_vocab.py | 402 +++++++++++++ gensim_sandbox.ipynb | 213 +++++++ json_buffered_reader.py | 66 ++- nltk_sandbox.ipynb | 41 ++ sandbox.ipynb | 644 ++++----------------- settings.py | 5 +- yummly_ingredients_list.ipynb | 163 ++++++ 10 files changed, 2766 insertions(+), 552 deletions(-) create mode 100644 1M_word2vec.ipynb create mode 100644 Yummly_word2vec.ipynb create mode 100644 cooking_ingredients.py create mode 100644 cooking_vocab.py create mode 100644 gensim_sandbox.ipynb create mode 100644 nltk_sandbox.ipynb create mode 100644 yummly_ingredients_list.ipynb diff --git a/1M_word2vec.ipynb b/1M_word2vec.ipynb new file mode 100644 index 0000000..aa0c762 --- /dev/null +++ b/1M_word2vec.ipynb @@ -0,0 +1,1012 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1M_recipes dataset word2vec experiments" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import json\n", + "\n", + "import nltk\n", + "from nltk.stem import PorterStemmer\n", + "from nltk.stem import LancasterStemmer\n", + "from nltk.corpus import stopwords as nltk_stopwords\n", + "\n", + "from pprint import pprint\n", + "\n", + "from gensim.test.utils import common_texts, get_tmpfile\n", + "from gensim.models import Word2Vec\n", + "\n", + "from json_buffered_reader import JSON_buffered_reader as JSON_br\n", + "\n", + "import settings" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from ipypb import track" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* reading firs n recipes from json stream" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "n = 100000" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "buffered_reader = JSON_br(settings.one_million_recipes_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "instructions = []" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "stopwords = set(nltk_stopwords.words('english'))\n", + "sentence_symbols = set(('.', ';', '!', '?', ',')) \n", + "porter = PorterStemmer()\n", + "model = None\n", + "\n", + "stemmed_stopwords = set([porter.stem(word) for word in stopwords])\n", + "\n", + "def recipe2instructions(stream_item):\n", + " return [t['text'] for t in stream_item['instructions']]\n", + "\n", + "def stemmed_recipe_instruction(json_item, stemmer = porter):\n", + " item_instructions = recipe2instructions(json_item)\n", + " stemmed_list = []\n", + " for instruction in item_instructions:\n", + " stemmed_list.append([stemmer.stem(i).lower() for i in nltk.word_tokenize(instruction)])\n", + " \n", + " result = []\n", + " for stemmed in stemmed_list:\n", + " stemmed_without_stopwords = []\n", + " for word in stemmed:\n", + " if (word not in stopwords) and (word not in sentence_symbols):\n", + " stemmed_without_stopwords.append(word)\n", + " result.append(stemmed_without_stopwords)\n", + " \n", + " return result\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* example:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "#item = buffered_reader.__next__()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "#stemmed_recipe_instruction(item)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* reading up to n recipes:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "100%\n", + "100000/100000\n", + "[06:06<00:00, 0.00s/it]
" + ], + "text/plain": [ + "\u001b[A\u001b[2K\r", + " [████████████████████████████████████████████████████████████] 100000/100000 [06:06<00:00, 0.00s/it]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "for i in track(range(n)):\n", + " json_recipe = buffered_reader.__next__()\n", + " instructions += stemmed_recipe_instruction(json_recipe)\n", + " #print(i)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* train word2vec on that instructions" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "model = Word2Vec(instructions, size=512, window=1, min_count=3, workers=4)\n", + "def word_similarity(word_a:str, word_b:str, model=model, stemmer=porter):\n", + " return model.wv.similarity(stemmer.stem(word_a), stemmer.stem(word_b))\n", + "\n", + "def word_exists(word:str, model=model, stemmer=porter):\n", + " return stemmer.stem(word) in model.wv\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.42250293" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "word_similarity(\"dice\", \"onions\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'salad'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.wv.most_similar_to_given(\"wash\", [\"salad\",\"potato\", \"oil\", \"tomato\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* check for a list of cooking verbs and ingredients whether they're represented by our model" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "from cooking_vocab import cooking_verbs\n", + "from cooking_ingredients import ingredients" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "model_actions = []\n", + "model_ingredients = []" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "for action in cooking_verbs:\n", + " if word_exists(action):\n", + " model_actions.append(action)\n", + "\n", + "for ingredient in ingredients:\n", + " if word_exists(ingredient):\n", + " model_ingredients.append(ingredient)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'found 108 of 111 valid actions and 160 of 648 valid ingredients'\n" + ] + } + ], + "source": [ + "pprint(f\"found {len(model_actions)} of {len(cooking_verbs)} valid actions and {len(model_ingredients)} of {len(ingredients)} valid ingredients\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "stemmed_ingredients = [porter.stem(ing) for ing in model_ingredients]\n", + "stemmed_actions = [porter.stem(act) for act in model_actions]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## cross-category-similarites\n", + "* now get the most likely ingredients for every action:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cooking Action to Ingredient" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "add --> ['scallion', 'celeri', 'parsley', 'onion', 'thyme', 'garlic', 'chive', 'oregano', 'salt', 'cilantro']\n", + "adjust --> ['cayenn', 'salt', 'sriracha', 'pepper', 'nutmeg', 'oregano', 'marjoram', 'cumin', 'tumer', 'cornflour']\n", + "arrange --> ['scallion', 'lettuc', 'zucchini', 'avocado', 'cucumb', 'arugula', 'pineappl', 'onion', 'carrot', 'watercress']\n", + "bake --> ['cornmeal', 'cinnamon', 'pecan', 'flour', 'margarin', 'vanilla', 'butter', 'shorten', 'walnut', 'almond']\n", + "baste --> ['veget', 'chicken', 'pork', 'meat', 'juic', 'season', 'kimchi', 'beer', 'honey', 'mirin']\n", + "batter --> ['dough', 'flour', 'polenta', 'cornmeal', 'coconut', 'ice', 'pecan', 'grit', 'buttermilk', 'tortilla']\n", + "beat --> ['vanilla', 'buttermilk', 'shorten', 'cream', 'milk', 'sugar', 'molass', 'egg', 'margarin', 'mascarpon']\n", + "blend --> ['buttermilk', 'honey', 'molass', 'nutmeg', 'cream', 'vanilla', 'allspic', 'milk', 'chickpea', 'cayenn']\n", + "boil --> ['water', 'penn', 'dashi', 'cornflour', 'saffron', 'mirin', 'sake', 'spaghetti', 'pasta', 'quinoa']\n", + "braise --> ['kimchi', 'pork', 'mussel', 'shiitak', 'tomatillo', 'mushroom', 'beer', 'tomato', 'sauc', 'chicken']\n", + "break --> ['onion', 'avocado', 'scallion', 'pancetta', 'pineappl', 'shallot', 'prosciutto', 'chees', 'parsley', 'sausag']\n", + "bread --> ['bread', 'baguett', 'prosciutto', 'eggplant', 'tortilla', 'paneer', 'avocado', 'ham', 'banana', 'almond']\n", + "broil --> ['baguett', 'scallion', 'season', 'ham', 'shallot', 'shrimp', 'pork', 'prosciutto', 'sauc', 'garlic']\n", + "brown --> ['margarin', 'butter', 'molass', 'oil', 'salt', 'mirin', 'shorten', 'honey', 'onion', 'ketchup']\n", + "brush --> ['egg', 'season', 'butter', 'honey', 'bread', 'flour', 'lemon', 'scallion', 'oliv', 'margarin']\n", + "build --> ['guacamol', 'salsa', 'baguett', 'beansprout', 'tortilla', 'sauc', 'pesto', 'season', 'prosciutto', 'cream']\n", + "burn --> ['molass', 'honey', 'gingerroot', 'butter', 'ketchup', 'margarin', 'vinegar', 'mustard', 'sugar', 'oil']\n", + "bury --> ['beansprout', 'mayonais', 'cotija', 'pimento', 'pinenut', 'fettucin', 'turnip', 'kimchi', 'radish', 'daikon']\n", + "carve --> ['kimchi', 'pork', 'ham', 'season', 'baguett', 'beansprout', 'radish', 'crawfish', 'pimento', 'lettuc']\n", + "check --> ['beer', 'cumin', 'grit', 'quinoa', 'chicken', 'crawfish', 'meat', 'mussel', 'pepper', 'tumer']\n", + "chill --> ['ice', 'cream', 'ricotta', 'buttermilk', 'egg', 'tequila', 'cornflour', 'vanilla', 'strawberri', 'shorten']\n", + "chop --> ['scallion', 'watercress', 'celeri', 'parsley', 'cilantro', 'radish', 'thyme', 'carrot', 'chive', 'shallot']\n", + "clarify --> ['lard', 'ghee', 'peanut', 'margarin', 'shorten', 'oil', 'cream', 'honey', 'oliv', 'molass']\n", + "close --> ['baguett', 'prosciutto', 'guacamol', 'ham', 'crawfish', 'peppercorn', 'bread', 'beansprout', 'cream', 'ketchup']\n", + "cook --> ['scallion', 'onion', 'carrot', 'sausag', 'shallot', 'veget', 'mushroom', 'season', 'gingerroot', 'zucchini']\n", + "cool --> ['ice', 'cream', 'ghee', 'ricotta', 'strawberri', 'coconut', 'molass', 'juic', 'kale', 'banana']\n", + "correct --> ['tumer', 'sriracha', 'cayenn', 'salt', 'pesto', 'grit', 'guacamol', 'marjoram', 'paprika', 'cornflour']\n", + "cover --> ['carrot', 'cauliflow', 'cabbag', 'bean', 'asparagu', 'pasta', 'chicken', 'potato', 'spinach', 'allspic']\n", + "crack --> ['nutmeg', 'mussel', 'cayenn', 'yeast', 'allspic', 'cardamom', 'salt', 'clove', 'bread', 'crawfish']\n", + "crumple --> ['paneer', 'pinenut', 'prosciutto', 'dough', 'baguett', 'pancetta', 'fettucin', 'cotija', 'lettuc', 'shiitak']\n", + "curdle --> ['yoghurt', 'mayonais', 'buttermilk', 'molass', 'egg', 'grit', 'cornflour', 'mascarpon', 'milk', 'brandi']\n", + "cut --> ['avocado', 'lettuc', 'radish', 'scallion', 'celeri', 'baguett', 'onion', 'cucumb', 'pineappl', 'carrot']\n", + "debone --> ['crawfish', 'chicken', 'kimchi', 'pork', 'beansprout', 'season', 'ham', 'pimento', 'paneer', 'dashi']\n", + "dice --> ['scallion', 'celeri', 'turnip', 'radish', 'pimento', 'carrot', 'cucumb', 'avocado', 'onion', 'pea']\n", + "discard --> ['lemongrass', 'scallion', 'juic', 'allspic', 'celeri', 'rosemari', 'avocado', 'seed', 'thyme', 'clove']\n", + "drain --> ['chickpea', 'okra', 'penn', 'pea', 'kale', 'broccoli', 'linguin', 'shiitak', 'zucchini', 'caper']\n", + "dress --> ['pesto', 'salsa', 'arugula', 'watercress', 'cilantro', 'lettuc', 'guacamol', 'oliv', 'radish', 'mayonais']\n", + "fillet --> ['shrimp', 'eggplant', 'season', 'caper', 'chicken', 'tortilla', 'pork', 'pepper', 'paprika', 'rosemari']\n", + "flour --> ['flour', 'cornmeal', 'buttermilk', 'butter', 'shorten', 'sugar', 'cinnamon', 'cornflour', 'milk', 'nutmeg']\n", + "fold --> ['egg', 'ricotta', 'chees', 'scallion', 'banana', 'mascarpon', 'buttermilk', 'cream', 'pecan', 'avocado']\n", + "freeze --> ['dough', 'ice', 'strawberri', 'noodl', 'peach', 'mussel', 'banana', 'pasta', 'paneer', 'pineappl']\n", + "fry --> ['pancetta', 'oil', 'ghee', 'bacon', 'scallion', 'sausag', 'oliv', 'onion', 'shallot', 'chive']\n", + "garnish --> ['chive', 'mint', 'cilantro', 'scallion', 'parsley', 'basil', 'watercress', 'caper', 'lime', 'lettuc']\n", + "glaze --> ['sauc', 'honey', 'brandi', 'pecan', 'pineappl', 'juic', 'molass', 'peach', 'appl', 'mirin']\n", + "grate --> ['scallion', 'chive', 'cilantro', 'parsley', 'pimento', 'oliv', 'radish', 'ricotta', 'lemon', 'turnip']\n", + "grind --> ['coriand', 'allspic', 'tumer', 'cumin', 'cayenn', 'cardamom', 'salt', 'peppercorn', 'spice', 'marjoram']\n", + "grill --> ['ham', 'pork', 'shrimp', 'sauc', 'baguett', 'oliv', 'sausag', 'scallion', 'tortilla', 'cilantro']\n", + "gut --> ['crawfish', 'lemongrass', 'beansprout', 'daikon', 'seed', 'kimchi', 'cardamom', 'shiitak', 'tumer', 'paneer']\n", + "heat --> ['ghee', 'oil', 'oliv', 'shallot', 'veget', 'butter', 'lard', 'peanut', 'caper', 'pancetta']\n", + "knead --> ['dough', 'flour', 'yeast', 'cornmeal', 'bread', 'buttermilk', 'tortilla', 'ricotta', 'shorten', 'pasta']\n", + "lower --> ['ghee', 'oliv', 'leek', 'chicken', 'rosemari', 'crawfish', 'prosciutto', 'zucchini', 'pancetta', 'sausag']\n", + "macerate --> ['brandi', 'mint', 'tequila', 'beansprout', 'strawberri', 'peach', 'mango', 'juic', 'raisin', 'watercress']\n", + "marinate --> ['season', 'pork', 'lettuc', 'mirin', 'scallion', 'juic', 'avocado', 'chickpea', 'kimchi', 'cilantro']\n", + "mash --> ['turnip', 'chickpea', 'yoghurt', 'carrot', 'salsa', 'avocado', 'allspic', 'caper', 'cilantro', 'onion']\n", + "melt --> ['cream', 'margarin', 'peanut', 'butter', 'mascarpon', 'pecan', 'shorten', 'milk', 'sugar', 'ricotta']\n", + "mince --> ['gingerroot', 'scallion', 'parsley', 'celeri', 'cilantro', 'chive', 'shallot', 'thyme', 'garlic', 'onion']\n", + "mix --> ['buttermilk', 'molass', 'honey', 'cream', 'egg', 'allspic', 'milk', 'margarin', 'nutmeg', 'butter']\n", + "open --> ['mussel', 'crawfish', 'beansprout', 'baguett', 'tomatillo', 'clove', 'eggplant', 'okra', 'shrimp', 'guacamol']\n", + "parboil --> ['turnip', 'radish', 'carrot', 'daikon', 'pea', 'broccoli', 'cauliflow', 'kale', 'zucchini', 'shiitak']\n", + "peel --> ['turnip', 'carrot', 'zucchini', 'lemongrass', 'daikon', 'radish', 'beet', 'beansprout', 'ginger', 'celeri']\n", + "pickle --> ['cucumb', 'radish', 'pimento', 'caper', 'cilantro', 'kimchi', 'ketchup', 'scallion', 'chive', 'sriracha']\n", + "place --> ['scallion', 'onion', 'butter', 'celeri', 'parsley', 'oliv', 'lemon', 'egg', 'avocado', 'buttermilk']\n", + "poach --> ['mussel', 'buttermilk', 'caper', 'scallion', 'shiitak', 'pea', 'kimchi', 'veget', 'mushroom', 'brandi']\n", + "pour --> ['molass', 'buttermilk', 'milk', 'honey', 'beer', 'ketchup', 'tomato', 'butter', 'coconut', 'sriracha']\n", + "prepare --> ['shrimp', 'sauc', 'ricotta', 'pineappl', 'beer', 'hazelnut', 'season', 'bread', 'avocado', 'banana']\n", + "pull --> ['meat', 'crawfish', 'prosciutto', 'ham', 'eggplant', 'beef', 'pork', 'zucchini', 'chicken', 'kale']\n", + "put --> ['butter', 'scallion', 'lemon', 'buttermilk', 'parsley', 'onion', 'oliv', 'avocado', 'egg', 'margarin']\n", + "reduce --> ['brandi', 'oliv', 'ghee', 'sugar', 'molass', 'shallot', 'ketchup', 'sriracha', 'mirin', 'tomato']\n", + "refrigerate --> ['strawberri', 'dough', 'mint', 'beet', 'ice', 'beansprout', 'buttermilk', 'banana', 'peach', 'meat']\n", + "remove --> ['juic', 'crawfish', 'pancetta', 'ghee', 'tomatillo', 'scallion', 'pineappl', 'parsley', 'kale', 'shiitak']\n", + "rinse --> ['radish', 'pea', 'okra', 'chickpea', 'shiitak', 'daikon', 'cucumb', 'season', 'pimento', 'spinach']\n", + "roast --> ['ham', 'pork', 'eggplant', 'oil', 'chicken', 'shallot', 'thyme', 'tomatillo', 'zucchini', 'clove']\n", + "rollup --> ['beansprout', 'pinenut', 'mayonais', 'cotija', 'tequila', 'tumer', 'fettucin', 'guacamol', 'yoghurt', 'kimchi']\n", + "rub --> ['season', 'mustard', 'rosemari', 'salt', 'flour', 'spice', 'peppercorn', 'cumin', 'oregano', 'thyme']\n", + "salt --> ['salt', 'cayenn', 'nutmeg', 'paprika', 'allspic', 'marjoram', 'oregano', 'cumin', 'thyme', 'cardamom']\n", + "scoop --> ['avocado', 'ricotta', 'strawberri', 'buttermilk', 'bean', 'dough', 'guacamol', 'water', 'vanilla', 'mango']\n", + "scorch --> ['butter', 'honey', 'molass', 'coconut', 'margarin', 'buttermilk', 'yeast', 'banana', 'yoghurt', 'oil']\n", + "scramble --> ['noodl', 'grit', 'sausag', 'mayonais', 'ghee', 'ricotta', 'yoghurt', 'buttermilk', 'rice', 'okra']\n", + "season --> ['season', 'cayenn', 'oregano', 'marjoram', 'pepper', 'thyme', 'paprika', 'salt', 'spice', 'cumin']\n", + "serve --> ['lime', 'lettuc', 'arugula', 'radish', 'chive', 'watercress', 'sriracha', 'avocado', 'baguett', 'guacamol']\n", + "set --> ['margarin', 'pineappl', 'nutmeg', 'onion', 'cream', 'shorten', 'butter', 'allspic', 'ricotta', 'salt']\n", + "simmer --> ['quinoa', 'mirin', 'beer', 'onion', 'pea', 'chickpea', 'thyme', 'tomato', 'saffron', 'couscou']\n", + "skim --> ['grit', 'brandi', 'dashi', 'lard', 'mussel', 'ghee', 'molass', 'beer', 'cornflour', 'milk']\n", + "slice --> ['lettuc', 'scallion', 'cucumb', 'radish', 'carrot', 'pimento', 'avocado', 'celeri', 'arugula', 'watercress']\n", + "slowcook --> ['beansprout', 'fettucin', 'mayonais', 'paneer', 'cotija', 'pinenut', 'daikon', 'kimchi', 'crawfish', 'kalamata']\n", + "soak --> ['raisin', 'chickpea', 'shiitak', 'molass', 'pineappl', 'water', 'pea', 'carrot', 'saffron', 'brandi']\n", + "sour --> ['yoghurt', 'mascarpon', 'sriracha', 'chees', 'buttermilk', 'milk', 'ricotta', 'ketchup', 'mayonais', 'avocado']\n", + "spice --> ['spice', 'peppercorn', 'season', 'cumin', 'tumer', 'allspic', 'cinnamon', 'cardamom', 'cayenn', 'mustard']\n", + "spoon --> ['ricotta', 'mascarpon', 'avocado', 'pesto', 'buttermilk', 'strawberri', 'egg', 'banana', 'tomato', 'zucchini']\n", + "spread --> ['ricotta', 'chees', 'butter', 'mascarpon', 'cream', 'pesto', 'avocado', 'walnut', 'pecan', 'bread']\n", + "sprinkle --> ['salt', 'parsley', 'oregano', 'season', 'lemon', 'cayenn', 'thyme', 'nutmeg', 'garlic', 'basil']\n", + "squeeze --> ['lemon', 'lime', 'orang', 'cucumb', 'avocado', 'tomato', 'pineappl', 'caper', 'chickpea', 'strawberri']\n", + "steam --> ['mussel', 'couscou', 'turnip', 'cauliflow', 'shiitak', 'quinoa', 'leek', 'pea', 'noodl', 'potato']\n", + "steep --> ['mint', 'brandi', 'tequila', 'chickpea', 'dashi', 'mussel', 'mirin', 'yeast', 'couscou', 'kale']\n", + "stir --> ['shallot', 'onion', 'scallion', 'thyme', 'celeri', 'garlic', 'oregano', 'cumin', 'carrot', 'allspic']\n", + "strain --> ['dashi', 'tequila', 'mussel', 'brandi', 'beer', 'chickpea', 'cornflour', 'kimchi', 'veget', 'sriracha']\n", + "sugar --> ['sugar', 'honey', 'molass', 'cinnamon', 'nutmeg', 'allspic', 'margarin', 'cardamom', 'vanilla', 'milk']\n", + "sweeten --> ['yoghurt', 'tequila', 'brandi', 'mascarpon', 'milk', 'honey', 'vanilla', 'mayonais', 'molass', 'cream']\n", + "taste --> ['cayenn', 'nutmeg', 'sriracha', 'tumer', 'marjoram', 'paprika', 'oregano', 'season', 'gingerroot', 'allspic']\n", + "thaw --> ['tofu', 'spinach', 'okra', 'kale', 'paneer', 'peach', 'ricotta', 'penn', 'strawberri', 'chickpea']\n", + "thicken --> ['cornflour', 'pasta', 'quinoa', 'sriracha', 'spaghetti', 'beer', 'grit', 'rice', 'mirin', 'meat']\n", + "toast --> ['baguett', 'bread', 'pecan', 'walnut', 'almond', 'prosciutto', 'pinenut', 'parsley', 'coriand', 'seed']\n", + "try --> ['guacamol', 'mayonais', 'yoghurt', 'kimchi', 'pinenut', 'paneer', 'crawfish', 'kalamata', 'fettucin', 'grit']\n", + "warm --> ['honey', 'margarin', 'molass', 'coconut', 'sriracha', 'vinegar', 'cornflour', 'sugar', 'peanut', 'yeast']\n", + "wash --> ['radish', 'shiitak', 'turnip', 'daikon', 'watercress', 'okra', 'parsley', 'scallion', 'celeri', 'thyme']\n", + "whip --> ['mascarpon', 'strawberri', 'ice', 'cream', 'vanilla', 'yoghurt', 'milk', 'ricotta', 'chees', 'banana']\n", + "whisk --> ['molass', 'honey', 'sugar', 'milk', 'buttermilk', 'cream', 'cornflour', 'egg', 'mustard', 'vanilla']\n", + "wipe --> ['shiitak', 'okra', 'shallot', 'oil', 'ghee', 'eggplant', 'mushroom', 'season', 'leek', 'shrimp']\n" + ] + } + ], + "source": [ + "for action in model_actions:\n", + " ings = stemmed_ingredients[:]\n", + " best_ingredients = []\n", + " for i in range(10):\n", + " best = model.wv.most_similar_to_given(porter.stem(action), ings)\n", + " ings.remove(best)\n", + " best_ingredients.append(best)\n", + " print(f\"{action} --> {best_ingredients}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ingredient to Cooking Action" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "salt --> ['salt', 'add', 'sprinkl', 'season', 'sugar', 'grind', 'rub', 'mix', 'stir', 'tast']\n", + "garlic --> ['minc', 'add', 'sprinkl', 'salt', 'stir', 'season', 'chop', 'dice', 'pickl', 'grind']\n", + "onions --> ['minc', 'add', 'stir', 'dice', 'chop', 'salt', 'sprinkl', 'arrang', 'pickl', 'parboil']\n", + "water --> ['boil', 'add', 'sugar', 'salt', 'flour', 'pour', 'stir', 'soak', 'rins', 'steam']\n", + "sugar --> ['sugar', 'beat', 'salt', 'whisk', 'flour', 'add', 'sweeten', 'sprinkl', 'mix', 'stir']\n", + "butter --> ['flour', 'sugar', 'melt', 'sprinkl', 'spread', 'add', 'beat', 'put', 'salt', 'brown']\n", + "pepper --> ['season', 'salt', 'sprinkl', 'add', 'minc', 'tast', 'pickl', 'spice', 'rub', 'chop']\n", + "eggs --> ['beat', 'mix', 'fold', 'add', 'brush', 'flour', 'whisk', 'curdl', 'put', 'place']\n", + "tomatoes --> ['add', 'pickl', 'dice', 'stir', 'minc', 'pour', 'arrang', 'squeez', 'garnish', 'put']\n", + "carrots --> ['parboil', 'minc', 'dice', 'add', 'peel', 'chop', 'stir', 'slice', 'buri', 'arrang']\n", + "milk --> ['beat', 'sour', 'add', 'sweeten', 'sugar', 'whisk', 'pour', 'stir', 'flour', 'mix']\n", + "oil --> ['salt', 'fri', 'heat', 'clarifi', 'wipe', 'flour', 'sugar', 'add', 'brown', 'minc']\n", + "scallions --> ['minc', 'add', 'chop', 'dice', 'pickl', 'grate', 'arrang', 'stir', 'garnish', 'slice']\n", + "flour --> ['flour', 'sugar', 'sprinkl', 'rub', 'knead', 'beat', 'salt', 'batter', 'spread', 'brush']\n", + "lime --> ['squeez', 'pickl', 'garnish', 'add', 'minc', 'sour', 'sprinkl', 'serv', 'grate', 'peel']\n", + "ginger --> ['minc', 'add', 'salt', 'sugar', 'peel', 'sprinkl', 'stir', 'spice', 'chop', 'grind']\n", + "shallots --> ['minc', 'stir', 'add', 'chop', 'dice', 'wipe', 'pickl', 'fri', 'salt', 'discard']\n", + "honey --> ['sugar', 'sweeten', 'salt', 'whisk', 'add', 'beat', 'mix', 'pour', 'sour', 'blend']\n", + "avocado --> ['dice', 'sour', 'arrang', 'pickl', 'minc', 'chop', 'dress', 'garnish', 'slice', 'spread']\n", + "lemon --> ['add', 'squeez', 'sprinkl', 'salt', 'sugar', 'pickl', 'garnish', 'put', 'grate', 'minc']\n", + "paprika --> ['salt', 'season', 'minc', 'sprinkl', 'spice', 'add', 'sugar', 'tast', 'grind', 'grate']\n", + "cilantro --> ['minc', 'pickl', 'add', 'chop', 'garnish', 'grate', 'dice', 'buri', 'dress', 'sour']\n", + "salsa --> ['dress', 'dice', 'pickl', 'sour', 'mash', 'chop', 'buri', 'garnish', 'season', 'spread']\n", + "buttermilk --> ['beat', 'sour', 'mix', 'flour', 'add', 'blend', 'whisk', 'pour', 'sweeten', 'sugar']\n", + "cumin --> ['salt', 'grind', 'minc', 'add', 'season', 'spice', 'stir', 'sugar', 'sprinkl', 'rub']\n", + "shrimp --> ['fillet', 'wipe', 'arrang', 'grill', 'fri', 'season', 'bast', 'marin', 'broil', 'cook']\n", + "potatoes --> ['parboil', 'mash', 'add', 'minc', 'steam', 'stir', 'cook', 'dice', 'debon', 'peel']\n", + "chicken --> ['debon', 'bast', 'season', 'fillet', 'roast', 'wipe', 'cook', 'discard', 'pour', 'brais']\n", + "celery --> ['minc', 'add', 'dice', 'chop', 'parboil', 'stir', 'peel', 'pickl', 'season', 'slice']\n", + "zucchini --> ['parboil', 'arrang', 'peel', 'dice', 'add', 'minc', 'chop', 'stir', 'slice', 'buri']\n", + "cucumber --> ['pickl', 'dice', 'minc', 'slice', 'arrang', 'chop', 'parboil', 'squeez', 'buri', 'dress']\n", + "mayonaise --> ['buri', 'slowcook', 'rollup', 'sweeten', 'sour', 'dress', 'curdl', 'pickl', 'gut', 'tast']\n", + "tumeric --> ['salt', 'grind', 'buri', 'pickl', 'spice', 'tast', 'sugar', 'minc', 'sweeten', 'rollup']\n", + "mushrooms --> ['minc', 'add', 'stir', 'dice', 'pickl', 'chop', 'wipe', 'season', 'cook', 'parboil']\n", + "cinnamon --> ['sugar', 'salt', 'spice', 'flour', 'sweeten', 'beat', 'sprinkl', 'add', 'grind', 'rollup']\n", + "bacon --> ['fri', 'dice', 'minc', 'buri', 'add', 'chop', 'brown', 'stir', 'arrang', 'cook']\n", + "coriander --> ['minc', 'grind', 'salt', 'add', 'spice', 'sprinkl', 'garnish', 'chop', 'pickl', 'season']\n", + "capers --> ['pickl', 'minc', 'add', 'chop', 'garnish', 'salt', 'season', 'stir', 'dice', 'dress']\n", + "leeks --> ['minc', 'parboil', 'dice', 'peel', 'chop', 'fri', 'buri', 'wipe', 'steam', 'pickl']\n", + "mirin --> ['salt', 'sugar', 'boil', 'tast', 'brown', 'simmer', 'pickl', 'add', 'spice', 'season']\n", + "clove --> ['minc', 'salt', 'peel', 'discard', 'add', 'grind', 'sugar', 'spice', 'sprinkl', 'grate']\n", + "beansprouts --> ['rollup', 'buri', 'slowcook', 'gut', 'macer', 'peel', 'debon', 'pickl', 'garnish', 'slice']\n", + "rice --> ['simmer', 'stir', 'scrambl', 'steam', 'cook', 'thicken', 'boil', 'poach', 'mix', 'parboil']\n", + "raisins --> ['add', 'chop', 'minc', 'stir', 'sweeten', 'soak', 'macer', 'sugar', 'mix', 'grind']\n", + "cayenne --> ['salt', 'tast', 'season', 'grind', 'add', 'sprinkl', 'sugar', 'minc', 'spice', 'stir']\n", + "ketchup --> ['pickl', 'sour', 'add', 'minc', 'sugar', 'dress', 'season', 'pour', 'mix', 'salt']\n", + "oregano --> ['salt', 'minc', 'season', 'add', 'sprinkl', 'stir', 'spice', 'grind', 'tast', 'chop']\n", + "cheese --> ['sour', 'spread', 'add', 'sprinkl', 'fold', 'stir', 'mix', 'arrang', 'put', 'whip']\n", + "cornmeal --> ['flour', 'salt', 'sugar', 'bake', 'rollup', 'knead', 'correct', 'batter', 'beat', 'whisk']\n", + "sauce --> ['glaze', 'add', 'dress', 'arrang', 'pour', 'spread', 'simmer', 'cook', 'stir', 'season']\n", + "eggplant --> ['bread', 'fillet', 'wipe', 'parboil', 'roast', 'season', 'arrang', 'peel', 'squeez', 'brush']\n", + "spinach --> ['parboil', 'rins', 'minc', 'arrang', 'add', 'stir', 'dress', 'grate', 'dice', 'drain']\n", + "orange --> ['squeez', 'add', 'pickl', 'sweeten', 'arrang', 'garnish', 'sugar', 'macer', 'peel', 'discard']\n", + "peanuts --> ['clarifi', 'melt', 'sugar', 'add', 'spread', 'heat', 'sweeten', 'beat', 'put', 'sour']\n", + "lemongrass --> ['minc', 'gut', 'pickl', 'peel', 'discard', 'buri', 'chop', 'add', 'dice', 'squeez']\n", + "spaghetti --> ['boil', 'simmer', 'thicken', 'parboil', 'slowcook', 'buri', 'spoon', 'reduc', 'season', 'drain']\n", + "cabbage --> ['parboil', 'dice', 'pickl', 'minc', 'dress', 'buri', 'simmer', 'chop', 'rins', 'arrang']\n", + "sake --> ['salt', 'tast', 'boil', 'sugar', 'sweeten', 'spice', 'correct', 'brown', 'simmer', 'season']\n", + "parsley --> ['minc', 'add', 'sprinkl', 'chop', 'season', 'salt', 'garnish', 'grate', 'stir', 'pickl']\n", + "chickpeas --> ['parboil', 'rins', 'stir', 'drain', 'mash', 'add', 'soak', 'dress', 'pickl', 'chop']\n", + "thyme --> ['minc', 'salt', 'add', 'season', 'chop', 'stir', 'sprinkl', 'spice', 'grate', 'rub']\n", + "Sriracha --> ['sour', 'pickl', 'tast', 'salt', 'sweeten', 'correct', 'dress', 'season', 'add', 'sugar']\n", + "pinenuts --> ['buri', 'rollup', 'slowcook', 'minc', 'crumpl', 'spice', 'chop', 'toast', 'grind', 'dress']\n", + "shiitake --> ['parboil', 'minc', 'wipe', 'wash', 'rins', 'chop', 'gut', 'dice', 'buri', 'debon']\n", + "vanilla --> ['beat', 'sugar', 'sweeten', 'whip', 'whisk', 'mix', 'blend', 'sour', 'add', 'mash']\n", + "pork --> ['debon', 'brais', 'bast', 'roast', 'carv', 'marin', 'fillet', 'grill', 'rub', 'season']\n", + "vinegar --> ['add', 'salt', 'sugar', 'pickl', 'minc', 'tast', 'dress', 'season', 'stir', 'spice']\n", + "chiles --> ['pickl', 'minc', 'salt', 'spice', 'grind', 'gut', 'add', 'season', 'dice', 'chop']\n", + "corn --> ['add', 'sour', 'pickl', 'stir', 'buri', 'put', 'place', 'sprinkl', 'mix', 'arrang']\n", + "tomatillos --> ['pickl', 'dice', 'minc', 'chop', 'parboil', 'buri', 'gut', 'debon', 'brais', 'peel']\n", + "radishes --> ['pickl', 'parboil', 'dice', 'buri', 'minc', 'chop', 'rins', 'wash', 'slice', 'peel']\n", + "juice --> ['add', 'minc', 'discard', 'chop', 'macer', 'sugar', 'slice', 'sprinkl', 'peel', 'stir']\n", + "pasta --> ['boil', 'thicken', 'scrambl', 'simmer', 'cover', 'drain', 'dress', 'parboil', 'wipe', 'pour']\n", + "prosciutto --> ['bread', 'arrang', 'toast', 'crumpl', 'minc', 'sprinkl', 'slice', 'chop', 'buri', 'garnish']\n", + "ghee --> ['clarifi', 'fri', 'heat', 'wipe', 'scrambl', 'reduc', 'skim', 'melt', 'lower', 'brown']\n", + "beef --> ['debon', 'stir', 'fri', 'add', 'cook', 'minc', 'dice', 'season', 'brais', 'roast']\n", + "basil --> ['minc', 'add', 'garnish', 'sprinkl', 'season', 'chop', 'salt', 'pickl', 'grate', 'stir']\n", + "baguette --> ['bread', 'toast', 'slice', 'cut', 'rollup', 'buri', 'slowcook', 'broil', 'arrang', 'crumpl']\n", + "okra --> ['parboil', 'rins', 'dice', 'wipe', 'buri', 'drain', 'wash', 'minc', 'pickl', 'gut']\n", + "mango --> ['pickl', 'dice', 'macer', 'garnish', 'sour', 'chop', 'sweeten', 'arrang', 'buri', 'add']\n", + "peaches --> ['macer', 'sweeten', 'rollup', 'squeez', 'garnish', 'whip', 'glaze', 'poach', 'peel', 'arrang']\n", + "linguine --> ['parboil', 'buri', 'drain', 'slowcook', 'boil', 'rins', 'season', 'tast', 'simmer', 'strain']\n", + "bananas --> ['fold', 'beat', 'spread', 'whip', 'arrang', 'mix', 'sweeten', 'blend', 'spoon', 'bread']\n", + "nutmeg --> ['salt', 'sugar', 'tast', 'add', 'sprinkl', 'beat', 'minc', 'flour', 'sweeten', 'mix']\n", + "yoghurt --> ['sweeten', 'sour', 'curdl', 'rollup', 'whip', 'buri', 'mash', 'dress', 'spice', 'blend']\n", + "ham --> ['debon', 'dice', 'arrang', 'buri', 'pickl', 'roast', 'chop', 'grill', 'carv', 'bread']\n", + "broccoli --> ['parboil', 'dice', 'buri', 'drain', 'debon', 'rins', 'stir', 'minc', 'cook', 'season']\n", + "noodles --> ['scrambl', 'parboil', 'steam', 'boil', 'poach', 'crack', 'break', 'pour', 'stir', 'slowcook']\n", + "cream --> ['beat', 'melt', 'sweeten', 'whisk', 'whip', 'sour', 'spread', 'mix', 'add', 'sugar']\n", + "beer --> ['pour', 'strain', 'simmer', 'add', 'debon', 'salt', 'boil', 'brais', 'pickl', 'stir']\n", + "kalamata --> ['buri', 'pickl', 'season', 'chop', 'dress', 'minc', 'slowcook', 'garnish', 'sour', 'dice']\n", + "vegetables --> ['bast', 'heat', 'cook', 'season', 'strain', 'add', 'poach', 'brush', 'brais', 'rub']\n", + "shortening --> ['beat', 'flour', 'sugar', 'clarifi', 'melt', 'whisk', 'mix', 'brown', 'sour', 'blend']\n", + "saffron --> ['salt', 'add', 'boil', 'stir', 'sugar', 'spice', 'simmer', 'minc', 'grind', 'strain']\n", + "strawberries --> ['whip', 'sweeten', 'macer', 'squeez', 'garnish', 'spoon', 'peel', 'spread', 'fold', 'scoop']\n", + "margarine --> ['sugar', 'clarifi', 'melt', 'beat', 'brown', 'flour', 'salt', 'mix', 'add', 'sweeten']\n", + "tortillas --> ['bread', 'fillet', 'spread', 'fold', 'spoon', 'arrang', 'grill', 'place', 'sour', 'crumpl']\n", + "almonds --> ['sugar', 'toast', 'add', 'sprinkl', 'garnish', 'sweeten', 'grind', 'beat', 'stir', 'spice']\n", + "cauliflower --> ['parboil', 'buri', 'steam', 'mash', 'dice', 'boil', 'simmer', 'drain', 'cook', 'cover']\n", + "asparagus --> ['parboil', 'wipe', 'slice', 'drain', 'cook', 'cover', 'poach', 'buri', 'arrang', 'grate']\n", + "chili --> ['salt', 'minc', 'pickl', 'add', 'season', 'sprinkl', 'spice', 'tast', 'sour', 'grind']\n", + "chives --> ['minc', 'add', 'garnish', 'pickl', 'salt', 'grate', 'chop', 'sour', 'buri', 'sprinkl']\n", + "bread --> ['bread', 'toast', 'spread', 'brush', 'put', 'place', 'sprinkl', 'fold', 'rub', 'crack']\n", + "couscous --> ['steam', 'simmer', 'buri', 'mash', 'dress', 'slowcook', 'parboil', 'scrambl', 'boil', 'steep']\n", + "guacamole --> ['tri', 'sour', 'dress', 'buri', 'build', 'rollup', 'slowcook', 'correct', 'pickl', 'gut']\n", + "sausages --> ['dice', 'fri', 'minc', 'scrambl', 'cook', 'buri', 'season', 'debon', 'parboil', 'grill']\n", + "arugula --> ['dress', 'arrang', 'buri', 'chop', 'slice', 'garnish', 'parboil', 'minc', 'pickl', 'dice']\n", + "spices --> ['spice', 'season', 'grind', 'rub', 'salt', 'add', 'mix', 'flour', 'sweeten', 'tast']\n", + "apples --> ['pickl', 'peel', 'stir', 'sprinkl', 'arrang', 'brown', 'minc', 'add', 'garnish', 'place']\n", + "peas --> ['parboil', 'dice', 'rins', 'stir', 'add', 'drain', 'buri', 'simmer', 'minc', 'steam']\n", + "pancetta --> ['fri', 'minc', 'dice', 'chop', 'clarifi', 'buri', 'parboil', 'break', 'heat', 'wipe']\n", + "grits --> ['skim', 'scrambl', 'correct', 'curdl', 'boil', 'poach', 'thicken', 'scorch', 'slowcook', 'batter']\n", + "lettuce --> ['arrang', 'slice', 'dice', 'dress', 'garnish', 'buri', 'chop', 'cut', 'spread', 'parboil']\n", + "mussels --> ['brais', 'steam', 'strain', 'gut', 'poach', 'open', 'boil', 'rins', 'crack', 'wipe']\n", + "coconut --> ['sweeten', 'sugar', 'pour', 'spread', 'scorch', 'add', 'sour', 'beat', 'sprinkl', 'mix']\n", + "fettucine --> ['slowcook', 'buri', 'rollup', 'parboil', 'correct', 'debon', 'fillet', 'crumpl', 'boil', 'drain']\n", + "lard --> ['clarifi', 'sugar', 'heat', 'skim', 'brown', 'fri', 'melt', 'flour', 'wipe', 'beat']\n", + "brandy --> ['sweeten', 'macer', 'sugar', 'strain', 'skim', 'sour', 'clarifi', 'steep', 'reduc', 'glaze']\n", + "kale --> ['parboil', 'drain', 'buri', 'rins', 'dress', 'wash', 'chop', 'stir', 'minc', 'macer']\n", + "olives --> ['salt', 'sprinkl', 'minc', 'dress', 'add', 'grate', 'season', 'heat', 'fri', 'put']\n", + "pecans --> ['sprinkl', 'sugar', 'toast', 'spread', 'garnish', 'sweeten', 'melt', 'mix', 'fold', 'brown']\n", + "mascarpone --> ['sour', 'whip', 'sweeten', 'beat', 'spread', 'spoon', 'melt', 'fold', 'rollup', 'grate']\n", + "daikon --> ['parboil', 'buri', 'pickl', 'dice', 'peel', 'gut', 'slowcook', 'rins', 'wash', 'minc']\n", + "mint --> ['garnish', 'macer', 'minc', 'chop', 'steep', 'pickl', 'grind', 'sweeten', 'add', 'buri']\n", + "cotija --> ['buri', 'slowcook', 'rollup', 'sour', 'grate', 'sweeten', 'dress', 'debon', 'melt', 'minc']\n", + "seasoning --> ['season', 'rub', 'salt', 'spice', 'sprinkl', 'add', 'dress', 'tast', 'marin', 'rins']\n", + "peppercorns --> ['salt', 'spice', 'minc', 'grind', 'season', 'rub', 'sugar', 'add', 'chop', 'gut']\n", + "polenta --> ['batter', 'slowcook', 'scrambl', 'serv', 'correct', 'flour', 'bread', 'glaze', 'bake', 'fillet']\n", + "meat --> ['bast', 'debon', 'pull', 'discard', 'thicken', 'roast', 'season', 'carv', 'fillet', 'cook']\n", + "pimentos --> ['pickl', 'buri', 'dice', 'minc', 'chop', 'add', 'grate', 'parboil', 'slice', 'season']\n", + "tequila --> ['sweeten', 'macer', 'rollup', 'strain', 'sugar', 'sour', 'spice', 'buri', 'slowcook', 'tast']\n", + "tofu --> ['thaw', 'buri', 'bread', 'fri', 'rins', 'steam', 'parboil', 'scrambl', 'wipe', 'wash']\n", + "pineapple --> ['pickl', 'arrang', 'garnish', 'dice', 'add', 'squeez', 'chop', 'macer', 'peel', 'place']\n", + "dashi --> ['strain', 'boil', 'debon', 'spice', 'skim', 'simmer', 'tast', 'slowcook', 'sweeten', 'steep']\n", + "pesto --> ['dress', 'season', 'spread', 'sour', 'correct', 'garnish', 'spoon', 'sprinkl', 'minc', 'chop']\n", + "chillies --> ['minc', 'pickl', 'salt', 'grind', 'add', 'spice', 'buri', 'tast', 'chop', 'gut']\n", + "seeds --> ['gut', 'grind', 'discard', 'toast', 'peel', 'spice', 'salt', 'minc', 'rub', 'pickl']\n", + "allspice --> ['salt', 'sugar', 'grind', 'minc', 'add', 'spice', 'stir', 'sprinkl', 'mix', 'tast']\n", + "gingerroot --> ['minc', 'salt', 'add', 'pickl', 'chop', 'season', 'buri', 'dice', 'tast', 'stir']\n", + "crawfish --> ['gut', 'debon', 'parboil', 'slowcook', 'discard', 'buri', 'rins', 'open', 'carv', 'pull']\n", + "turnips --> ['parboil', 'dice', 'buri', 'peel', 'minc', 'pickl', 'wash', 'chop', 'mash', 'grate']\n", + "mustard --> ['salt', 'season', 'add', 'minc', 'sugar', 'pickl', 'spice', 'sprinkl', 'rub', 'mix']\n", + "quinoa --> ['simmer', 'parboil', 'stir', 'boil', 'steam', 'mash', 'strain', 'rins', 'drain', 'buri']\n", + "penne --> ['parboil', 'boil', 'drain', 'buri', 'rins', 'slowcook', 'cook', 'simmer', 'steam', 'tast']\n", + "beets --> ['peel', 'pickl', 'parboil', 'dice', 'discard', 'buri', 'slowcook', 'macer', 'gut', 'wash']\n", + "walnuts --> ['sprinkl', 'toast', 'spread', 'minc', 'add', 'chop', 'garnish', 'mix', 'sugar', 'put']\n", + "rosemary --> ['minc', 'salt', 'season', 'add', 'sprinkl', 'rub', 'discard', 'chop', 'spice', 'grind']\n", + "ice --> ['whip', 'sweeten', 'beat', 'sour', 'macer', 'slowcook', 'batter', 'chill', 'freez', 'scoop']\n", + "kimchi --> ['pickl', 'buri', 'brais', 'parboil', 'debon', 'minc', 'gut', 'slowcook', 'dress', 'dice']\n", + "yeast --> ['knead', 'flour', 'beat', 'sugar', 'sweeten', 'boil', 'scorch', 'crack', 'whisk', 'steep']\n", + "paneer --> ['slowcook', 'buri', 'crumpl', 'gut', 'debon', 'bread', 'rollup', 'parboil', 'rins', 'wash']\n", + "watercress --> ['chop', 'dress', 'minc', 'garnish', 'pickl', 'buri', 'dice', 'arrang', 'wash', 'parboil']\n", + "cardamom --> ['salt', 'sugar', 'grind', 'spice', 'gut', 'sweeten', 'discard', 'minc', 'add', 'peel']\n", + "dough --> ['knead', 'batter', 'crumpl', 'squeez', 'spread', 'scoop', 'freez', 'flour', 'brush', 'crack']\n", + "molasses --> ['sugar', 'beat', 'whisk', 'add', 'sweeten', 'pour', 'salt', 'mix', 'burn', 'sour']\n", + "marjoram --> ['salt', 'minc', 'season', 'tast', 'add', 'chop', 'grind', 'buri', 'sprinkl', 'pickl']\n", + "ricotta --> ['sour', 'spread', 'beat', 'spoon', 'sprinkl', 'grate', 'mix', 'fold', 'whip', 'pour']\n", + "cornflour --> ['salt', 'flour', 'sweeten', 'boil', 'whisk', 'sugar', 'spice', 'sour', 'thicken', 'strain']\n", + "hazelnuts --> ['grind', 'rollup', 'sugar', 'sprinkl', 'sweeten', 'toast', 'spice', 'garnish', 'whip', 'slowcook']\n", + "beans --> ['discard', 'parboil', 'stir', 'add', 'simmer', 'dice', 'cover', 'pour', 'scoop', 'steam']\n" + ] + } + ], + "source": [ + "for ingredient in model_ingredients:\n", + " acts = stemmed_actions[:]\n", + " best_actions = []\n", + " for i in range(10):\n", + " best = model.wv.most_similar_to_given(porter.stem(ingredient), acts)\n", + " acts.remove(best)\n", + " best_actions.append(best)\n", + " print(f\"{ingredient} --> {best_actions}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "## Inter-Category-Similarities\n", + "* checking self similarities:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cooking Action" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "add --> ['add', 'put', 'place', 'pour', 'sprinkl', 'stir', 'arrang', 'mix', 'minc', 'chop']\n", + "adjust --> ['adjust', 'correct', 'check', 'reduc', 'tast', 'lower', 'salt', 'simmer', 'thicken', 'blend']\n", + "arrange --> ['arrang', 'place', 'put', 'cut', 'spread', 'add', 'sprinkl', 'slice', 'pour', 'fold']\n", + "bake --> ['bake', 'roast', 'broil', 'place', 'set', 'put', 'sprinkl', 'flour', 'cook', 'brush']\n", + "baste --> ['bast', 'brush', 'brais', 'check', 'marin', 'rub', 'glaze', 'broil', 'grill', 'debon']\n", + "batter --> ['batter', 'glaze', 'spread', 'flour', 'spoon', 'pour', 'knead', 'whip', 'scorch', 'cool']\n", + "beat --> ['beat', 'whisk', 'mix', 'whip', 'blend', 'sugar', 'stir', 'fold', 'add', 'knead']\n", + "blend --> ['blend', 'mix', 'beat', 'stir', 'whisk', 'add', 'chill', 'mash', 'knead', 'grind']\n", + "boil --> ['boil', 'simmer', 'cook', 'thicken', 'heat', 'stir', 'parboil', 'cover', 'reduc', 'steam']\n", + "braise --> ['brais', 'poach', 'bast', 'roast', 'cook', 'carv', 'debon', 'reduc', 'simmer', 'remov']\n", + "break --> ['break', 'pull', 'cut', 'arrang', 'scrambl', 'crack', 'put', 'chop', 'minc', 'dice']\n", + "bread --> ['bread', 'toast', 'spread', 'brush', 'put', 'place', 'sprinkl', 'fold', 'rub', 'crack']\n", + "broil --> ['broil', 'grill', 'cook', 'fillet', 'bast', 'slice', 'arrang', 'toast', 'fri', 'roast']\n", + "brown --> ['brown', 'burn', 'scorch', 'sprinkl', 'rub', 'salt', 'add', 'cook', 'mix', 'melt']\n", + "brush --> ['brush', 'bast', 'rub', 'sprinkl', 'place', 'spread', 'arrang', 'put', 'fold', 'wipe']\n", + "build --> ['build', 'close', 'prepar', 'grill', 'rollup', 'burn', 'broil', 'buri', 'open', 'slowcook']\n", + "burn --> ['burn', 'scorch', 'curdl', 'brown', 'melt', 'close', 'tri', 'break', 'scrambl', 'build']\n", + "bury --> ['buri', 'rollup', 'slowcook', 'parboil', 'gut', 'crumpl', 'mash', 'pickl', 'sweeten', 'grate']\n", + "carve --> ['carv', 'debon', 'cut', 'brais', 'pull', 'rub', 'slice', 'gut', 'roast', 'serv']\n", + "check --> ['check', 'adjust', 'correct', 'bast', 'pull', 'tast', 'stir', 'skim', 'thicken', 'parboil']\n", + "chill --> ['chill', 'refriger', 'freez', 'cool', 'blend', 'thaw', 'marin', 'mix', 'steep', 'macer']\n", + "chop --> ['chop', 'minc', 'dice', 'add', 'grind', 'slice', 'grate', 'arrang', 'cut', 'sprinkl']\n", + "clarify --> ['clarifi', 'melt', 'heat', 'sugar', 'fri', 'beat', 'reduc', 'wipe', 'scrambl', 'skim']\n", + "close --> ['close', 'open', 'build', 'burn', 'pull', 'crumpl', 'scorch', 'gut', 'rollup', 'lower']\n", + "cook --> ['cook', 'fri', 'simmer', 'heat', 'brais', 'broil', 'poach', 'add', 'grill', 'stir']\n", + "cool --> ['cool', 'thaw', 'chill', 'remov', 'set', 'steep', 'refriger', 'warm', 'macer', 'freez']\n", + "correct --> ['correct', 'adjust', 'check', 'tast', 'salt', 'reduc', 'gut', 'slowcook', 'rollup', 'thicken']\n", + "cover --> ['cover', 'place', 'put', 'set', 'simmer', 'arrang', 'wipe', 'pour', 'boil', 'cook']\n", + "crack --> ['crack', 'scrambl', 'curdl', 'break', 'open', 'grind', 'pull', 'scorch', 'wash', 'beat']\n", + "crumple --> ['crumpl', 'buri', 'slowcook', 'gut', 'rollup', 'close', 'pull', 'peel', 'arrang', 'open']\n", + "curdle --> ['curdl', 'scorch', 'scrambl', 'thicken', 'burn', 'crack', 'whisk', 'beat', 'sweeten', 'sour']\n", + "cut --> ['cut', 'slice', 'arrang', 'carv', 'dice', 'place', 'put', 'fold', 'chop', 'spread']\n", + "debone --> ['debon', 'carv', 'gut', 'marin', 'slowcook', 'rins', 'brais', 'rollup', 'parboil', 'discard']\n", + "dice --> ['dice', 'chop', 'slice', 'minc', 'cut', 'add', 'arrang', 'parboil', 'mash', 'grate']\n", + "discard --> ['discard', 'remov', 'strain', 'minc', 'wipe', 'add', 'squeez', 'gut', 'chop', 'peel']\n", + "drain --> ['drain', 'rins', 'parboil', 'strain', 'soak', 'remov', 'poach', 'macer', 'wash', 'wipe']\n", + "dress --> ['dress', 'season', 'pickl', 'marin', 'grate', 'glaze', 'spread', 'buri', 'chop', 'arrang']\n", + "fillet --> ['fillet', 'broil', 'rub', 'grill', 'season', 'marin', 'debon', 'arrang', 'brush', 'bast']\n", + "flour --> ['flour', 'sugar', 'sprinkl', 'rub', 'knead', 'beat', 'salt', 'batter', 'spread', 'brush']\n", + "fold --> ['fold', 'spread', 'sprinkl', 'arrang', 'place', 'add', 'put', 'cut', 'brush', 'mix']\n", + "freeze --> ['freez', 'refriger', 'chill', 'knead', 'thaw', 'cool', 'marin', 'steep', 'strain', 'macer']\n", + "fry --> ['fri', 'cook', 'heat', 'grill', 'broil', 'minc', 'roast', 'place', 'dice', 'put']\n", + "garnish --> ['garnish', 'sprinkl', 'serv', 'arrang', 'add', 'chop', 'place', 'put', 'pour', 'fold']\n", + "glaze --> ['glaze', 'bast', 'batter', 'brush', 'dress', 'rub', 'cool', 'slice', 'macer', 'poach']\n", + "grate --> ['grate', 'chop', 'minc', 'sprinkl', 'slice', 'dice', 'add', 'squeez', 'spread', 'buri']\n", + "grind --> ['grind', 'chop', 'minc', 'rub', 'salt', 'sprinkl', 'spice', 'put', 'rins', 'crack']\n", + "grill --> ['grill', 'broil', 'fri', 'cook', 'bast', 'roast', 'fillet', 'marin', 'build', 'brais']\n", + "gut --> ['gut', 'slowcook', 'debon', 'buri', 'rollup', 'discard', 'carv', 'crumpl', 'peel', 'parboil']\n", + "heat --> ['heat', 'cook', 'melt', 'fri', 'clarifi', 'reduc', 'simmer', 'boil', 'warm', 'thicken']\n", + "knead --> ['knead', 'beat', 'squeez', 'flour', 'freez', 'blend', 'pull', 'fold', 'refriger', 'chill']\n", + "lower --> ['lower', 'reduc', 'adjust', 'remov', 'simmer', 'poach', 'heat', 'thicken', 'pull', 'brais']\n", + "macerate --> ['macer', 'steep', 'soak', 'thaw', 'marin', 'strain', 'rollup', 'sweeten', 'drain', 'pickl']\n", + "marinate --> ['marin', 'soak', 'debon', 'steep', 'bast', 'macer', 'arrang', 'rub', 'season', 'rins']\n", + "mash --> ['mash', 'parboil', 'dice', 'blend', 'minc', 'buri', 'mix', 'break', 'add', 'chop']\n", + "melt --> ['melt', 'clarifi', 'heat', 'beat', 'set', 'reduc', 'burn', 'sugar', 'brown', 'sprinkl']\n", + "mince --> ['minc', 'chop', 'dice', 'add', 'grind', 'grate', 'pickl', 'discard', 'slice', 'parboil']\n", + "mix --> ['mix', 'blend', 'stir', 'beat', 'whisk', 'add', 'put', 'pour', 'fold', 'place']\n", + "open --> ['open', 'close', 'crack', 'pull', 'gut', 'remov', 'steam', 'cut', 'build', 'peel']\n", + "parboil --> ['parboil', 'rins', 'buri', 'wash', 'steam', 'drain', 'dice', 'mash', 'cut', 'peel']\n", + "peel --> ['peel', 'parboil', 'slice', 'discard', 'wash', 'dice', 'squeez', 'gut', 'cut', 'minc']\n", + "pickle --> ['pickl', 'minc', 'dice', 'buri', 'brais', 'parboil', 'macer', 'dress', 'chop', 'grate']\n", + "place --> ['place', 'put', 'arrang', 'add', 'pour', 'sprinkl', 'spread', 'cut', 'fold', 'brush']\n", + "poach --> ['poach', 'brais', 'cook', 'scrambl', 'simmer', 'wash', 'soak', 'rins', 'debon', 'add']\n", + "pour --> ['pour', 'add', 'put', 'place', 'spread', 'spoon', 'sprinkl', 'arrang', 'strain', 'mix']\n", + "prepare --> ['prepar', 'spread', 'place', 'put', 'pour', 'arrang', 'build', 'cover', 'serv', 'sprinkl']\n", + "pull --> ['pull', 'remov', 'break', 'carv', 'cut', 'fold', 'wipe', 'squeez', 'crack', 'open']\n", + "put --> ['put', 'place', 'add', 'arrang', 'pour', 'spread', 'sprinkl', 'mix', 'fold', 'cut']\n", + "reduce --> ['reduc', 'lower', 'thicken', 'adjust', 'simmer', 'brais', 'heat', 'stir', 'melt', 'cook']\n", + "refrigerate --> ['refriger', 'chill', 'freez', 'marin', 'cool', 'steep', 'macer', 'knead', 'strain', 'blend']\n", + "remove --> ['remov', 'pull', 'discard', 'cool', 'wipe', 'brais', 'drain', 'lower', 'break', 'place']\n", + "rinse --> ['rins', 'wash', 'drain', 'parboil', 'soak', 'debon', 'thaw', 'discard', 'poach', 'wipe']\n", + "roast --> ['roast', 'brais', 'bake', 'carv', 'grill', 'fri', 'broil', 'bast', 'cook', 'chop']\n", + "rollup --> ['rollup', 'slowcook', 'buri', 'gut', 'sweeten', 'debon', 'crumpl', 'macer', 'carv', 'build']\n", + "rub --> ['rub', 'brush', 'season', 'sprinkl', 'grind', 'wipe', 'put', 'bast', 'spread', 'carv']\n", + "salt --> ['salt', 'add', 'sprinkl', 'season', 'sugar', 'grind', 'rub', 'mix', 'stir', 'tast']\n", + "scoop --> ['scoop', 'spoon', 'spread', 'squeez', 'put', 'place', 'arrang', 'pour', 'cut', 'mash']\n", + "scorch --> ['scorch', 'burn', 'curdl', 'tri', 'brown', 'crack', 'break', 'scrambl', 'sweeten', 'pull']\n", + "scramble --> ['scrambl', 'curdl', 'crack', 'break', 'poach', 'beat', 'scorch', 'whisk', 'fri', 'burn']\n", + "season --> ['season', 'rub', 'salt', 'spice', 'sprinkl', 'add', 'dress', 'tast', 'marin', 'rins']\n", + "serve --> ['serv', 'garnish', 'carv', 'arrang', 'prepar', 'slice', 'spoon', 'place', 'cut', 'put']\n", + "set --> ['set', 'put', 'place', 'cool', 'cover', 'melt', 'pull', 'beat', 'remov', 'wipe']\n", + "simmer --> ['simmer', 'boil', 'cook', 'stir', 'reduc', 'steep', 'thicken', 'poach', 'brais', 'heat']\n", + "skim --> ['skim', 'strain', 'discard', 'brais', 'thicken', 'reduc', 'whisk', 'poach', 'steep', 'curdl']\n", + "slice --> ['slice', 'cut', 'dice', 'arrang', 'chop', 'place', 'spread', 'carv', 'grate', 'peel']\n", + "slowcook --> ['slowcook', 'rollup', 'buri', 'gut', 'debon', 'crumpl', 'tri', 'carv', 'parboil', 'correct']\n", + "soak --> ['soak', 'rins', 'steep', 'macer', 'marin', 'drain', 'wash', 'poach', 'strain', 'add']\n", + "sour --> ['sour', 'whip', 'sweeten', 'add', 'mix', 'beat', 'spread', 'pour', 'blend', 'curdl']\n", + "spice --> ['spice', 'season', 'grind', 'rub', 'salt', 'add', 'mix', 'flour', 'sweeten', 'tast']\n", + "spoon --> ['spoon', 'pour', 'spread', 'scoop', 'arrang', 'place', 'put', 'sprinkl', 'fold', 'mix']\n", + "spread --> ['spread', 'sprinkl', 'put', 'pour', 'arrang', 'place', 'fold', 'spoon', 'add', 'brush']\n", + "sprinkle --> ['sprinkl', 'add', 'spread', 'garnish', 'place', 'put', 'arrang', 'fold', 'pour', 'brush']\n", + "squeeze --> ['squeez', 'discard', 'cut', 'knead', 'fold', 'rub', 'spread', 'scoop', 'peel', 'pull']\n", + "steam --> ['steam', 'parboil', 'simmer', 'thaw', 'wash', 'boil', 'steep', 'poach', 'open', 'grill']\n", + "steep --> ['steep', 'macer', 'soak', 'marin', 'strain', 'simmer', 'cool', 'steam', 'chill', 'refriger']\n", + "stir --> ['stir', 'add', 'whisk', 'mix', 'blend', 'simmer', 'pour', 'beat', 'fold', 'cook']\n", + "strain --> ['strain', 'pour', 'drain', 'discard', 'steep', 'thicken', 'skim', 'macer', 'soak', 'brais']\n", + "sugar --> ['sugar', 'beat', 'salt', 'whisk', 'flour', 'add', 'sweeten', 'sprinkl', 'mix', 'stir']\n", + "sweeten --> ['sweeten', 'whip', 'sour', 'rollup', 'sugar', 'beat', 'curdl', 'macer', 'buri', 'grate']\n", + "taste --> ['tast', 'correct', 'adjust', 'season', 'salt', 'check', 'grind', 'spice', 'blend', 'sweeten']\n", + "thaw --> ['thaw', 'macer', 'cool', 'parboil', 'rins', 'wash', 'steam', 'chill', 'freez', 'soak']\n", + "thicken --> ['thicken', 'curdl', 'reduc', 'simmer', 'strain', 'boil', 'whisk', 'skim', 'stir', 'heat']\n", + "toast --> ['toast', 'bread', 'broil', 'grind', 'spread', 'sprinkl', 'fri', 'brown', 'place', 'arrang']\n", + "try --> ['tri', 'scorch', 'slowcook', 'gut', 'burn', 'curdl', 'rollup', 'scrambl', 'close', 'buri']\n", + "warm --> ['warm', 'cool', 'heat', 'cover', 'simmer', 'melt', 'pour', 'burn', 'soak', 'set']\n", + "wash --> ['wash', 'rins', 'parboil', 'soak', 'poach', 'peel', 'thaw', 'chop', 'steam', 'arrang']\n", + "whip --> ['whip', 'beat', 'sweeten', 'sour', 'whisk', 'fold', 'curdl', 'garnish', 'spread', 'mash']\n", + "whisk --> ['whisk', 'beat', 'stir', 'mix', 'blend', 'pour', 'sugar', 'curdl', 'whip', 'add']\n", + "wipe --> ['wipe', 'rub', 'discard', 'remov', 'brush', 'rins', 'pull', 'squeez', 'cover', 'brais']\n" + ] + } + ], + "source": [ + "for action in model_actions:\n", + " acts = stemmed_actions[:]\n", + " best_actions = []\n", + " for i in range(10):\n", + " best = model.wv.most_similar_to_given(porter.stem(action), acts)\n", + " acts.remove(best)\n", + " best_actions.append(best)\n", + " print(f\"{action} --> {best_actions}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Ingredient" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "salt --> ['salt', 'cayenn', 'nutmeg', 'paprika', 'allspic', 'marjoram', 'oregano', 'cumin', 'thyme', 'cardamom']\n", + "garlic --> ['garlic', 'shallot', 'oregano', 'cumin', 'thyme', 'coriand', 'cayenn', 'marjoram', 'tumer', 'scallion']\n", + "onions --> ['onion', 'shallot', 'scallion', 'celeri', 'gingerroot', 'leek', 'garlic', 'chili', 'caper', 'chilli']\n", + "water --> ['water', 'milk', 'sake', 'juic', 'vinegar', 'oil', 'sugar', 'mirin', 'saffron', 'salt']\n", + "sugar --> ['sugar', 'honey', 'molass', 'cinnamon', 'nutmeg', 'allspic', 'margarin', 'cardamom', 'vanilla', 'milk']\n", + "butter --> ['butter', 'margarin', 'shorten', 'lard', 'ghee', 'oil', 'cinnamon', 'honey', 'flour', 'sugar']\n", + "pepper --> ['pepper', 'peppercorn', 'cumin', 'cayenn', 'oregano', 'paprika', 'garlic', 'chilli', 'chile', 'thyme']\n", + "eggs --> ['egg', 'buttermilk', 'molass', 'margarin', 'coconut', 'butter', 'ricotta', 'flour', 'banana', 'milk']\n", + "tomatoes --> ['tomato', 'tomatillo', 'pimento', 'avocado', 'caper', 'chile', 'cucumb', 'mango', 'mushroom', 'scallion']\n", + "carrots --> ['carrot', 'turnip', 'radish', 'celeri', 'zucchini', 'daikon', 'scallion', 'leek', 'gingerroot', 'shallot']\n", + "milk --> ['milk', 'buttermilk', 'water', 'honey', 'molass', 'cream', 'sugar', 'yoghurt', 'margarin', 'shorten']\n", + "oil --> ['oil', 'kalamata', 'ghee', 'oliv', 'butter', 'honey', 'paprika', 'caper', 'cumin', 'salt']\n", + "scallions --> ['scallion', 'onion', 'shallot', 'chive', 'cilantro', 'radish', 'caper', 'pimento', 'parsley', 'gingerroot']\n", + "flour --> ['flour', 'cornmeal', 'buttermilk', 'butter', 'shorten', 'sugar', 'cinnamon', 'cornflour', 'milk', 'nutmeg']\n", + "lime --> ['lime', 'lemon', 'orang', 'mango', 'sriracha', 'cilantro', 'gingerroot', 'mint', 'pineappl', 'avocado']\n", + "ginger --> ['ginger', 'gingerroot', 'lemongrass', 'coriand', 'clove', 'allspic', 'chilli', 'cumin', 'cardamom', 'shallot']\n", + "shallots --> ['shallot', 'onion', 'scallion', 'caper', 'gingerroot', 'leek', 'garlic', 'pancetta', 'rosemari', 'parsley']\n", + "honey --> ['honey', 'molass', 'sugar', 'sriracha', 'vinegar', 'ketchup', 'mirin', 'tumer', 'cinnamon', 'mustard']\n", + "avocado --> ['avocado', 'cucumb', 'mango', 'radish', 'tomato', 'guacamol', 'lime', 'lettuc', 'tomatillo', 'scallion']\n", + "lemon --> ['lemon', 'lime', 'orang', 'caper', 'mint', 'honey', 'gingerroot', 'ginger', 'juic', 'sriracha']\n", + "paprika --> ['paprika', 'cayenn', 'cumin', 'oregano', 'marjoram', 'tumer', 'coriand', 'salt', 'allspic', 'thyme']\n", + "cilantro --> ['cilantro', 'chive', 'coriand', 'basil', 'scallion', 'parsley', 'mint', 'thyme', 'caper', 'rosemari']\n", + "salsa --> ['salsa', 'guacamol', 'cilantro', 'tomatillo', 'avocado', 'ketchup', 'pesto', 'lettuc', 'mango', 'pimento']\n", + "buttermilk --> ['buttermilk', 'milk', 'molass', 'honey', 'yoghurt', 'flour', 'egg', 'shorten', 'cornflour', 'vanilla']\n", + "cumin --> ['cumin', 'cayenn', 'coriand', 'allspic', 'tumer', 'cardamom', 'paprika', 'oregano', 'peppercorn', 'pepper']\n", + "shrimp --> ['shrimp', 'crawfish', 'mussel', 'chicken', 'asparagu', 'okra', 'linguin', 'penn', 'spinach', 'shiitak']\n", + "potatoes --> ['potato', 'zucchini', 'eggplant', 'cauliflow', 'beet', 'turnip', 'carrot', 'leek', 'cabbag', 'avocado']\n", + "chicken --> ['chicken', 'beef', 'meat', 'pork', 'shrimp', 'ham', 'mushroom', 'veget', 'eggplant', 'cabbag']\n", + "celery --> ['celeri', 'onion', 'scallion', 'turnip', 'carrot', 'leek', 'shallot', 'pimento', 'thyme', 'chive']\n", + "zucchini --> ['zucchini', 'eggplant', 'carrot', 'leek', 'turnip', 'radish', 'cucumb', 'daikon', 'potato', 'cabbag']\n", + "cucumber --> ['cucumb', 'radish', 'avocado', 'daikon', 'pimento', 'mango', 'arugula', 'turnip', 'zucchini', 'lettuc']\n", + "mayonaise --> ['mayonais', 'yoghurt', 'kimchi', 'cotija', 'tumer', 'guacamol', 'sriracha', 'fettucin', 'tequila', 'pinenut']\n", + "tumeric --> ['tumer', 'coriand', 'cumin', 'cayenn', 'allspic', 'marjoram', 'chilli', 'sriracha', 'gingerroot', 'cardamom']\n", + "mushrooms --> ['mushroom', 'shiitak', 'leek', 'shallot', 'celeri', 'scallion', 'onion', 'tomato', 'broccoli', 'zucchini']\n", + "cinnamon --> ['cinnamon', 'nutmeg', 'allspic', 'cardamom', 'sugar', 'honey', 'cayenn', 'vanilla', 'molass', 'margarin']\n", + "bacon --> ['bacon', 'pancetta', 'prosciutto', 'sausag', 'ham', 'shallot', 'pimento', 'celeri', 'scallion', 'onion']\n", + "coriander --> ['coriand', 'cilantro', 'cumin', 'tumer', 'marjoram', 'thyme', 'oregano', 'cardamom', 'rosemari', 'lemongrass']\n", + "capers --> ['caper', 'chive', 'shallot', 'kalamata', 'parsley', 'scallion', 'basil', 'pimento', 'gingerroot', 'rosemari']\n", + "leeks --> ['leek', 'turnip', 'cabbag', 'shallot', 'shiitak', 'scallion', 'celeri', 'radish', 'onion', 'mushroom']\n", + "mirin --> ['mirin', 'sake', 'sriracha', 'vinegar', 'tumer', 'dashi', 'honey', 'ketchup', 'molass', 'cornflour']\n", + "clove --> ['clove', 'ginger', 'allspic', 'gingerroot', 'peppercorn', 'rosemari', 'cardamom', 'cumin', 'lemongrass', 'thyme']\n", + "beansprouts --> ['beansprout', 'tequila', 'juic', 'tumer', 'lemongrass', 'fettucin', 'kimchi', 'pinenut', 'mayonais', 'daikon']\n", + "rice --> ['rice', 'quinoa', 'couscou', 'noodl', 'chickpea', 'spinach', 'linguin', 'grit', 'pasta', 'cauliflow']\n", + "raisins --> ['raisin', 'walnut', 'pecan', 'honey', 'brandi', 'appl', 'pineappl', 'molass', 'pinenut', 'almond']\n", + "cayenne --> ['cayenn', 'paprika', 'cumin', 'nutmeg', 'allspic', 'salt', 'oregano', 'marjoram', 'tumer', 'cardamom']\n", + "ketchup --> ['ketchup', 'sriracha', 'mustard', 'honey', 'vinegar', 'mirin', 'molass', 'tumer', 'gingerroot', 'sauc']\n", + "oregano --> ['oregano', 'marjoram', 'thyme', 'rosemari', 'basil', 'parsley', 'cayenn', 'coriand', 'cumin', 'paprika']\n", + "cheese --> ['chees', 'ricotta', 'mascarpon', 'prosciutto', 'butter', 'chive', 'zucchini', 'pesto', 'avocado', 'scallion']\n", + "cornmeal --> ['cornmeal', 'flour', 'cornflour', 'yeast', 'paprika', 'tumer', 'cinnamon', 'buttermilk', 'salt', 'cayenn']\n", + "sauce --> ['sauc', 'ketchup', 'mirin', 'salsa', 'juic', 'scallion', 'sake', 'sriracha', 'pesto', 'shallot']\n", + "eggplant --> ['eggplant', 'zucchini', 'potato', 'leek', 'avocado', 'prosciutto', 'tomato', 'cauliflow', 'shiitak', 'mushroom']\n", + "spinach --> ['spinach', 'kale', 'arugula', 'broccoli', 'watercress', 'cabbag', 'basil', 'asparagu', 'leek', 'cauliflow']\n", + "orange --> ['orang', 'lemon', 'lime', 'pineappl', 'mango', 'strawberri', 'peach', 'tequila', 'brandi', 'ginger']\n", + "peanuts --> ['peanut', 'hazelnut', 'honey', 'pecan', 'walnut', 'almond', 'coconut', 'sriracha', 'margarin', 'sugar']\n", + "lemongrass --> ['lemongrass', 'gingerroot', 'coriand', 'ginger', 'tumer', 'rosemari', 'scallion', 'chilli', 'cilantro', 'cardamom']\n", + "spaghetti --> ['spaghetti', 'linguin', 'pasta', 'penn', 'noodl', 'fettucin', 'cauliflow', 'quinoa', 'couscou', 'broccoli']\n", + "cabbage --> ['cabbag', 'turnip', 'kale', 'leek', 'radish', 'broccoli', 'spinach', 'daikon', 'lettuc', 'arugula']\n", + "sake --> ['sake', 'mirin', 'dashi', 'vinegar', 'sriracha', 'cornflour', 'tumer', 'tequila', 'saffron', 'brandi']\n", + "parsley --> ['parsley', 'chive', 'basil', 'marjoram', 'thyme', 'oregano', 'rosemari', 'cilantro', 'caper', 'scallion']\n", + "chickpeas --> ['chickpea', 'quinoa', 'tomatillo', 'kale', 'bean', 'cucumb', 'caper', 'kimchi', 'pea', 'tomato']\n", + "thyme --> ['thyme', 'rosemari', 'marjoram', 'oregano', 'parsley', 'basil', 'coriand', 'chive', 'cilantro', 'cayenn']\n", + "Sriracha --> ['sriracha', 'mirin', 'ketchup', 'tumer', 'gingerroot', 'honey', 'mustard', 'sake', 'yoghurt', 'cayenn']\n", + "pinenuts --> ['pinenut', 'kalamata', 'marjoram', 'oregano', 'caper', 'cotija', 'watercress', 'fettucin', 'gingerroot', 'arugula']\n", + "shiitake --> ['shiitak', 'leek', 'okra', 'mushroom', 'pimento', 'shallot', 'turnip', 'radish', 'scallion', 'zucchini']\n", + "vanilla --> ['vanilla', 'molass', 'cardamom', 'cinnamon', 'honey', 'sugar', 'shorten', 'almond', 'nutmeg', 'coconut']\n", + "pork --> ['pork', 'meat', 'beef', 'chicken', 'ham', 'sausag', 'pancetta', 'eggplant', 'prosciutto', 'cabbag']\n", + "vinegar --> ['vinegar', 'mirin', 'honey', 'sake', 'ketchup', 'molass', 'sriracha', 'gingerroot', 'caper', 'tumer']\n", + "chiles --> ['chile', 'chili', 'chilli', 'tomatillo', 'cumin', 'coriand', 'garlic', 'oregano', 'onion', 'cayenn']\n", + "corn --> ['corn', 'tomatillo', 'carrot', 'scallion', 'pimento', 'onion', 'chili', 'oregano', 'ketchup', 'cilantro']\n", + "tomatillos --> ['tomatillo', 'chile', 'tomato', 'chickpea', 'gingerroot', 'mango', 'okra', 'cilantro', 'avocado', 'kale']\n", + "radishes --> ['radish', 'daikon', 'turnip', 'cucumb', 'scallion', 'watercress', 'carrot', 'pimento', 'leek', 'kimchi']\n", + "juice --> ['juic', 'lemon', 'vinegar', 'beansprout', 'honey', 'lime', 'shallot', 'orang', 'cumin', 'molass']\n", + "pasta --> ['pasta', 'spaghetti', 'linguin', 'penn', 'noodl', 'fettucin', 'asparagu', 'quinoa', 'cauliflow', 'mussel']\n", + "prosciutto --> ['prosciutto', 'pancetta', 'bacon', 'ham', 'baguett', 'pimento', 'sausag', 'eggplant', 'shallot', 'watercress']\n", + "ghee --> ['ghee', 'lard', 'butter', 'oil', 'margarin', 'oliv', 'pancetta', 'sake', 'shorten', 'peanut']\n", + "beef --> ['beef', 'meat', 'chicken', 'pork', 'sausag', 'ham', 'kimchi', 'bacon', 'potato', 'okra']\n", + "basil --> ['basil', 'parsley', 'oregano', 'marjoram', 'thyme', 'cilantro', 'chive', 'rosemari', 'mint', 'caper']\n", + "baguette --> ['baguett', 'bread', 'prosciutto', 'avocado', 'eggplant', 'paneer', 'cucumb', 'pancetta', 'pinenut', 'banana']\n", + "okra --> ['okra', 'shiitak', 'leek', 'tomatillo', 'kimchi', 'zucchini', 'kale', 'shallot', 'broccoli', 'daikon']\n", + "mango --> ['mango', 'avocado', 'pineappl', 'peach', 'strawberri', 'cucumb', 'orang', 'lime', 'tomatillo', 'radish']\n", + "peaches --> ['peach', 'strawberri', 'mango', 'banana', 'appl', 'pineappl', 'orang', 'avocado', 'lime', 'beet']\n", + "linguine --> ['linguin', 'penn', 'fettucin', 'spaghetti', 'pasta', 'quinoa', 'noodl', 'couscou', 'broccoli', 'asparagu']\n", + "bananas --> ['banana', 'peach', 'strawberri', 'mango', 'appl', 'avocado', 'pineappl', 'almond', 'coconut', 'orang']\n", + "nutmeg --> ['nutmeg', 'allspic', 'cayenn', 'cinnamon', 'cardamom', 'salt', 'paprika', 'tumer', 'cumin', 'marjoram']\n", + "yoghurt --> ['yoghurt', 'mayonais', 'sriracha', 'tumer', 'tequila', 'mascarpon', 'buttermilk', 'guacamol', 'honey', 'mint']\n", + "ham --> ['ham', 'prosciutto', 'pork', 'sausag', 'bacon', 'beef', 'pancetta', 'meat', 'pimento', 'chicken']\n", + "broccoli --> ['broccoli', 'cauliflow', 'asparagu', 'spinach', 'pea', 'kale', 'cabbag', 'turnip', 'linguin', 'daikon']\n", + "noodles --> ['noodl', 'pasta', 'spaghetti', 'linguin', 'penn', 'broccoli', 'fettucin', 'asparagu', 'couscou', 'quinoa']\n", + "cream --> ['cream', 'mascarpon', 'milk', 'ricotta', 'margarin', 'vanilla', 'honey', 'cotija', 'chive', 'yoghurt']\n", + "beer --> ['beer', 'ketchup', 'tequila', 'dashi', 'lemongrass', 'molass', 'sriracha', 'mirin', 'vinegar', 'tumer']\n", + "kalamata --> ['kalamata', 'caper', 'pinenut', 'pimento', 'oil', 'gingerroot', 'oregano', 'marjoram', 'basil', 'watercress']\n", + "vegetables --> ['veget', 'broccoli', 'oliv', 'cauliflow', 'scallion', 'carrot', 'mushroom', 'onion', 'asparagu', 'chicken']\n", + "shortening --> ['shorten', 'margarin', 'butter', 'lard', 'vanilla', 'molass', 'flour', 'buttermilk', 'milk', 'sugar']\n", + "saffron --> ['saffron', 'tumer', 'cardamom', 'lemongrass', 'cumin', 'thyme', 'marjoram', 'coriand', 'cayenn', 'oregano']\n", + "strawberries --> ['strawberri', 'peach', 'mango', 'banana', 'pineappl', 'orang', 'appl', 'mint', 'tequila', 'lime']\n", + "margarine --> ['margarin', 'butter', 'shorten', 'lard', 'honey', 'cinnamon', 'sugar', 'molass', 'ghee', 'nutmeg']\n", + "tortillas --> ['tortilla', 'baguett', 'lettuc', 'dough', 'salsa', 'noodl', 'bread', 'prosciutto', 'guacamol', 'chees']\n", + "almonds --> ['almond', 'hazelnut', 'pecan', 'walnut', 'coconut', 'cinnamon', 'vanilla', 'peanut', 'banana', 'mint']\n", + "cauliflower --> ['cauliflow', 'broccoli', 'kale', 'turnip', 'asparagu', 'leek', 'zucchini', 'cabbag', 'potato', 'daikon']\n", + "asparagus --> ['asparagu', 'broccoli', 'cauliflow', 'leek', 'spinach', 'linguin', 'kale', 'watercress', 'shiitak', 'turnip']\n", + "chili --> ['chili', 'chile', 'chilli', 'cayenn', 'oregano', 'cumin', 'tumer', 'onion', 'coriand', 'paprika']\n", + "chives --> ['chive', 'parsley', 'cilantro', 'scallion', 'marjoram', 'basil', 'caper', 'thyme', 'rosemari', 'pimento']\n", + "bread --> ['bread', 'baguett', 'prosciutto', 'eggplant', 'tortilla', 'paneer', 'avocado', 'ham', 'banana', 'almond']\n", + "couscous --> ['couscou', 'quinoa', 'linguin', 'rice', 'penn', 'fettucin', 'kale', 'broccoli', 'cauliflow', 'chickpea']\n", + "guacamole --> ['guacamol', 'salsa', 'pesto', 'avocado', 'mayonais', 'yoghurt', 'cotija', 'lettuc', 'ketchup', 'sriracha']\n", + "sausages --> ['sausag', 'bacon', 'pancetta', 'beef', 'ham', 'prosciutto', 'meat', 'pork', 'leek', 'eggplant']\n", + "arugula --> ['arugula', 'watercress', 'lettuc', 'kale', 'spinach', 'basil', 'cilantro', 'cucumb', 'radish', 'pimento']\n", + "spices --> ['spice', 'peppercorn', 'season', 'cumin', 'tumer', 'allspic', 'cinnamon', 'cardamom', 'cayenn', 'mustard']\n", + "apples --> ['appl', 'peach', 'pineappl', 'beet', 'banana', 'strawberri', 'mango', 'orang', 'raisin', 'turnip']\n", + "peas --> ['pea', 'broccoli', 'bean', 'radish', 'turnip', 'scallion', 'chickpea', 'spinach', 'celeri', 'carrot']\n", + "pancetta --> ['pancetta', 'prosciutto', 'bacon', 'shallot', 'sausag', 'leek', 'ham', 'onion', 'mushroom', 'caper']\n", + "grits --> ['grit', 'polenta', 'couscou', 'fettucin', 'quinoa', 'mussel', 'linguin', 'pasta', 'penn', 'rice']\n", + "lettuce --> ['lettuc', 'arugula', 'watercress', 'cabbag', 'cucumb', 'radish', 'avocado', 'kale', 'basil', 'spinach']\n", + "mussels --> ['mussel', 'crawfish', 'fettucin', 'shrimp', 'linguin', 'penn', 'couscou', 'okra', 'pasta', 'asparagu']\n", + "coconut --> ['coconut', 'almond', 'walnut', 'pecan', 'hazelnut', 'peanut', 'banana', 'vanilla', 'cinnamon', 'butter']\n", + "fettucine --> ['fettucin', 'linguin', 'penn', 'spaghetti', 'pasta', 'pinenut', 'crawfish', 'mayonais', 'mussel', 'couscou']\n", + "lard --> ['lard', 'margarin', 'shorten', 'ghee', 'butter', 'molass', 'oil', 'sugar', 'vanilla', 'peanut']\n", + "brandy --> ['brandi', 'tequila', 'molass', 'honey', 'raisin', 'sake', 'orang', 'mirin', 'vinegar', 'sriracha']\n", + "kale --> ['kale', 'arugula', 'spinach', 'watercress', 'cabbag', 'cauliflow', 'turnip', 'broccoli', 'leek', 'chickpea']\n", + "olives --> ['oliv', 'caper', 'chive', 'oregano', 'cilantro', 'rosemari', 'garlic', 'oil', 'scallion', 'shallot']\n", + "pecans --> ['pecan', 'walnut', 'hazelnut', 'almond', 'raisin', 'cinnamon', 'peanut', 'coconut', 'appl', 'pinenut']\n", + "mascarpone --> ['mascarpon', 'ricotta', 'cream', 'cotija', 'yoghurt', 'chees', 'pesto', 'mayonais', 'tequila', 'guacamol']\n", + "daikon --> ['daikon', 'radish', 'turnip', 'cucumb', 'carrot', 'beet', 'watercress', 'leek', 'cabbag', 'zucchini']\n", + "mint --> ['mint', 'basil', 'cilantro', 'coriand', 'rosemari', 'marjoram', 'thyme', 'watercress', 'chive', 'oregano']\n", + "cotija --> ['cotija', 'mascarpon', 'pimento', 'pinenut', 'mayonais', 'ricotta', 'guacamol', 'fettucin', 'chive', 'kalamata']\n", + "seasoning --> ['season', 'cayenn', 'oregano', 'marjoram', 'pepper', 'thyme', 'paprika', 'salt', 'spice', 'cumin']\n", + "peppercorns --> ['peppercorn', 'cardamom', 'cumin', 'allspic', 'pepper', 'cayenn', 'oregano', 'marjoram', 'paprika', 'coriand']\n", + "polenta --> ['polenta', 'grit', 'cornmeal', 'fettucin', 'cotija', 'linguin', 'couscou', 'penn', 'eggplant', 'tofu']\n", + "meat --> ['meat', 'beef', 'pork', 'chicken', 'sausag', 'ham', 'eggplant', 'crawfish', 'shrimp', 'tofu']\n", + "pimentos --> ['pimento', 'chive', 'scallion', 'caper', 'parsley', 'radish', 'cilantro', 'watercress', 'cucumb', 'marjoram']\n", + "tequila --> ['tequila', 'brandi', 'tumer', 'sriracha', 'yoghurt', 'cornflour', 'beansprout', 'mirin', 'lime', 'sake']\n", + "tofu --> ['tofu', 'paneer', 'pancetta', 'kimchi', 'eggplant', 'prosciutto', 'shrimp', 'sausag', 'okra', 'beef']\n", + "pineapple --> ['pineappl', 'mango', 'orang', 'peach', 'appl', 'strawberri', 'lime', 'banana', 'lemon', 'raisin']\n", + "dashi --> ['dashi', 'sake', 'mirin', 'saffron', 'kimchi', 'tumer', 'cornflour', 'beer', 'tequila', 'sriracha']\n", + "pesto --> ['pesto', 'ricotta', 'guacamol', 'arugula', 'basil', 'avocado', 'salsa', 'watercress', 'sriracha', 'mascarpon']\n", + "chillies --> ['chilli', 'chili', 'chile', 'tumer', 'coriand', 'gingerroot', 'oregano', 'cumin', 'garlic', 'cayenn']\n", + "seeds --> ['seed', 'cardamom', 'coriand', 'tumer', 'garlic', 'cumin', 'lemongrass', 'allspic', 'gingerroot', 'ginger']\n", + "allspice --> ['allspic', 'nutmeg', 'cayenn', 'cardamom', 'cumin', 'peppercorn', 'tumer', 'marjoram', 'cinnamon', 'coriand']\n", + "gingerroot --> ['gingerroot', 'ginger', 'lemongrass', 'shallot', 'marjoram', 'tumer', 'oregano', 'caper', 'cumin', 'sriracha']\n", + "crawfish --> ['crawfish', 'mussel', 'shrimp', 'shiitak', 'fettucin', 'linguin', 'okra', 'penn', 'lemongrass', 'asparagu']\n", + "turnips --> ['turnip', 'daikon', 'radish', 'leek', 'cabbag', 'carrot', 'beet', 'cauliflow', 'celeri', 'kale']\n", + "mustard --> ['mustard', 'ketchup', 'oregano', 'cumin', 'sriracha', 'paprika', 'cayenn', 'gingerroot', 'chili', 'thyme']\n", + "quinoa --> ['quinoa', 'couscou', 'rice', 'linguin', 'chickpea', 'penn', 'kale', 'pasta', 'fettucin', 'cauliflow']\n", + "penne --> ['penn', 'linguin', 'fettucin', 'spaghetti', 'pasta', 'quinoa', 'noodl', 'broccoli', 'couscou', 'cauliflow']\n", + "beets --> ['beet', 'turnip', 'daikon', 'radish', 'cabbag', 'potato', 'cucumb', 'appl', 'carrot', 'mango']\n", + "walnuts --> ['walnut', 'pecan', 'hazelnut', 'almond', 'raisin', 'pinenut', 'peanut', 'coconut', 'cinnamon', 'coriand']\n", + "rosemary --> ['rosemari', 'thyme', 'marjoram', 'oregano', 'parsley', 'basil', 'chive', 'coriand', 'mint', 'caper']\n", + "ice --> ['ice', 'strawberri', 'tequila', 'mascarpon', 'cornflour', 'brandi', 'shorten', 'pineappl', 'yoghurt', 'coconut']\n", + "kimchi --> ['kimchi', 'gingerroot', 'radish', 'mayonais', 'turnip', 'pimento', 'sriracha', 'tumer', 'okra', 'daikon']\n", + "yeast --> ['yeast', 'cornmeal', 'molass', 'cornflour', 'buttermilk', 'shorten', 'milk', 'sake', 'flour', 'honey']\n", + "paneer --> ['paneer', 'tofu', 'daikon', 'baguett', 'okra', 'pancetta', 'prosciutto', 'radish', 'shiitak', 'eggplant']\n", + "watercress --> ['watercress', 'arugula', 'kale', 'radish', 'chive', 'caper', 'basil', 'lettuc', 'cilantro', 'parsley']\n", + "cardamom --> ['cardamom', 'allspic', 'peppercorn', 'cumin', 'coriand', 'tumer', 'cayenn', 'nutmeg', 'cinnamon', 'saffron']\n", + "dough --> ['dough', 'tortilla', 'yeast', 'butter', 'flour', 'ice', 'cornmeal', 'banana', 'prosciutto', 'bread']\n", + "molasses --> ['molass', 'honey', 'sugar', 'vanilla', 'vinegar', 'mirin', 'buttermilk', 'ketchup', 'brandi', 'sriracha']\n", + "marjoram --> ['marjoram', 'oregano', 'thyme', 'rosemari', 'parsley', 'basil', 'cayenn', 'coriand', 'chive', 'paprika']\n", + "ricotta --> ['ricotta', 'mascarpon', 'pesto', 'cotija', 'chees', 'cream', 'spinach', 'basil', 'arugula', 'chive']\n", + "cornflour --> ['cornflour', 'mirin', 'sake', 'tequila', 'tumer', 'sriracha', 'saffron', 'cornmeal', 'dashi', 'molass']\n", + "hazelnuts --> ['hazelnut', 'pecan', 'walnut', 'almond', 'peanut', 'coconut', 'pinenut', 'coriand', 'cinnamon', 'mint']\n", + "beans --> ['bean', 'chickpea', 'pea', 'tomatillo', 'chile', 'tomato', 'chili', 'turnip', 'peppercorn', 'broccoli']\n" + ] + } + ], + "source": [ + "for ingredient in model_ingredients:\n", + " ings = stemmed_ingredients[:]\n", + " best_ingredients = []\n", + " for i in range(10):\n", + " best = model.wv.most_similar_to_given(porter.stem(ingredient), ings)\n", + " ings.remove(best)\n", + " best_ingredients.append(best)\n", + " print(f\"{ingredient} --> {best_ingredients}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Yummly_word2vec.ipynb b/Yummly_word2vec.ipynb new file mode 100644 index 0000000..4b5ed7c --- /dev/null +++ b/Yummly_word2vec.ipynb @@ -0,0 +1,120 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import json \n", + "from pprint import pprint\n", + "from gensim.test.utils import common_texts, get_tmpfile\n", + "from gensim.models import Word2Vec\n", + "\n", + "from json_buffered_reader import JSON_buffered_reader as JSON_br\n", + "\n", + "import settings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* reading in all ingredients with json stream:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "buffered_reader = JSON_br(settings.yummly_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "ingredient_sets = []" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "for recipe in buffered_reader:\n", + " ingredient_sets.append(recipe['ingredients'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* training a word2vec approach on the ingredient set" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "model = Word2Vec(ingredient_sets, size=100, window=5, min_count=1, workers=4)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.46477914" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.wv.similarity('eggs', 'pepper')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cooking_ingredients.py b/cooking_ingredients.py new file mode 100644 index 0000000..9c8d325 --- /dev/null +++ b/cooking_ingredients.py @@ -0,0 +1,652 @@ +#!/usr/bin/env python3 + +ingredients = [ + "salt", + "garlic", + "onions", + "olive oil", + "water", + "sugar", + "ground black pepper", + "garlic cloves", + "butter", + "pepper", + "all-purpose flour", + "vegetable oil", + "eggs", + "green onions", + "kosher salt", + "black pepper", + "soy sauce", + "large eggs", + "unsalted butter", + "tomatoes", + "ground cumin", + "carrots", + "purple onion", + "milk", + "extra-virgin olive oil", + "red bell pepper", + "oil", + "chili powder", + "jalapeno chilies", + "baking powder", + "grated parmesan cheese", + "chopped cilantro fresh", + "corn starch", + "chicken broth", + "sesame oil", + "dried oregano", + "cayenne pepper", + "scallions", + "diced tomatoes", + "flour", + "lemon juice", + "sour cream", + "garlic powder", + "fresh lemon juice", + "lime", + "vanilla extract", + "fresh parsley", + "ginger", + "minced garlic", + "ground cinnamon", + "cooking spray", + "fish sauce", + "shallots", + "fresh ginger", + "fresh lime juice", + "chopped onion", + "brown sugar", + "flat leaf parsley", + "dry white wine", + "honey", + "yellow onion", + "green bell pepper", + "avocado", + "canola oil", + "lemon", + "paprika", + "white sugar", + "cilantro", + "salsa", + "rice vinegar", + "tomato paste", + "cilantro leaves", + "whole milk", + "boneless skinless chicken breasts", + "bay leaves", + "heavy cream", + "buttermilk", + "cumin", + "chicken stock", + "lime juice", + "plum tomatoes", + "large garlic cloves", + "shrimp", + "granulated sugar", + "potatoes", + "corn tortillas", + "fresh basil", + "chicken", + "sea salt", + "freshly ground pepper", + "baking soda", + "celery", + "flour tortillas", + "ground turmeric", + "coconut milk", + "black beans", + "ground beef", + "cumin seed", + "fresh cilantro", + "garam masala", + "tomato sauce", + "dried thyme", + "chicken breasts", + "crushed red pepper", + "sesame seeds", + "bay leaf", + "zucchini", + "ground nutmeg", + "green chilies", + "cucumber", + "worcestershire sauce", + "white onion", + "red pepper flakes", + "ground coriander", + "mayonaise", + "curry powder", + "chopped cilantro", + "hot sauce", + "tumeric", + "mushrooms", + "shredded cheddar cheese", + "red wine vinegar", + "cinnamon", + "ground ginger", + "cinnamon sticks", + "whipping cream", + "bacon", + "red chili peppers", + "warm water", + "peanut oil", + "coarse salt", + "lime wedges", + "peeled fresh ginger", + "boneless skinless chicken breast halves", + "celery ribs", + "ground red pepper", + "white vinegar", + "balsamic vinegar", + "large egg yolks", + "onion powder", + "ground pork", + "cream cheese", + "cooking oil", + "fresh basil leaves", + "chopped celery", + "oyster sauce", + "parmesan cheese", + "black peppercorns", + "coriander", + "dried basil", + "dijon mustard", + "capers", + "crushed red pepper flakes", + "leeks", + "cold water", + "mirin", + "clove", + "beansprouts", + "egg yolks", + "large egg whites", + "rice", + "mozzarella cheese", + "cracked black pepper", + "raisins", + "sweet potatoes", + "powdered sugar", + "cayenne", + "red pepper", + "large shrimp", + "hoisin sauce", + "sliced green onions", + "finely chopped onion", + "light brown sugar", + "medium shrimp", + "ketchup", + "oregano", + "cheese", + "fat free less sodium chicken broth", + "cornmeal", + "sauce", + "cheddar cheese", + "egg whites", + "eggplant", + "ground allspice", + "low sodium soy sauce", + "bell pepper", + "spinach", + "cherry tomatoes", + "beef broth", + "fresh oregano", + "fresh mint", + "crushed tomatoes", + "confectioners sugar", + "orange", + "shredded mozzarella cheese", + "spring onions", + "chopped garlic", + "low sodium chicken broth", + "peanuts", + "ground pepper", + "ground cloves", + "italian seasoning", + "lemongrass", + "spaghetti", + "boiling water", + "cooked rice", + "cabbage", + "feta cheese crumbles", + "fresh rosemary", + "low salt chicken broth", + "long-grain rice", + "vegetable broth", + "white pepper", + "active dry yeast", + "white wine vinegar", + "dark brown sugar", + "fennel seeds", + "hot pepper sauce", + "sake", + "chopped fresh thyme", + "parsley", + "cajun seasoning", + "yellow corn meal", + "toasted sesame oil", + "coriander seeds", + "chickpeas", + "thyme", + "half & half", + "light soy sauce", + "chopped parsley", + "Sriracha", + "white wine", + "pinenuts", + "plain yogurt", + "mustard seeds", + "shiitake", + "chicken thighs", + "sweet onion", + "vanilla", + "pork", + "vinegar", + "ground white pepper", + "shredded Monterey Jack cheese", + "frozen peas", + "cider vinegar", + "basmati rice", + "boneless chicken skinless thigh", + "hot water", + "green pepper", + "dark soy sauce", + "chiles", + "corn", + "tomatillos", + "fresh ginger root", + "fresh thyme", + "radishes", + "chopped pecans", + "saffron threads", + "parmigiano reggiano cheese", + "smoked paprika", + "chopped fresh mint", + "juice", + "green chile", + "lean ground beef", + "grated lemon zest", + "green beans", + "pasta", + "enchilada sauce", + "prosciutto", + "arborio rice", + "basil leaves", + "ricotta cheese", + "dry red wine", + "ghee", + "cooked chicken", + "bread crumbs", + "chopped tomatoes", + "fresh mushrooms", + "dry sherry", + "beef", + "serrano chile", + "tortilla chips", + "russet potatoes", + "melted butter", + "chile pepper", + "toasted sesame seeds", + "fresh parmesan cheese", + "yellow bell pepper", + "orange juice", + "creole seasoning", + "basil", + "baby spinach", + "chopped green bell pepper", + "dry bread crumbs", + "taco seasoning", + "vegetable oil cooking spray", + "andouille sausage", + "Shaoxing wine", + "white rice", + "baguette", + "okra", + "mango", + "apple cider vinegar", + "long grain white rice", + "romaine lettuce", + "peaches", + "yukon gold potatoes", + "chinese five-spice powder", + "pasta sauce", + "golden raisins", + "roasted red peppers", + "refried beans", + "sweetened condensed milk", + "unsweetened cocoa powder", + "linguine", + "fine sea salt", + "flank steak", + "fresh coriander", + "grape tomatoes", + "bananas", + "lemon zest", + "cilantro sprigs", + "corn kernels", + "feta cheese", + "rice noodles", + "mint leaves", + "thai chile", + "chopped fresh chives", + "nutmeg", + "coriander powder", + "fresh dill", + "marinara sauce", + "red wine", + "sliced mushrooms", + "heavy whipping cream", + "garlic paste", + "lemon wedge", + "yoghurt", + "roma tomatoes", + "garlic salt", + "ham", + "greek yogurt", + "coconut oil", + "napa cabbage", + "frozen chopped spinach", + "self rising flour", + "black olives", + "firm tofu", + "diced onions", + "pork tenderloin", + "grated nutmeg", + "broccoli", + "noodles", + "cream", + "star anise", + "beer", + "ground cardamom", + "part-skim mozzarella cheese", + "green peas", + "kalamata", + "monterey jack", + "evaporated milk", + "fresh thyme leaves", + "cashew nuts", + "vegetables", + "curry leaves", + "shortening", + "salt and ground black pepper", + "saffron", + "strawberries", + "thyme sprigs", + "margarine", + "tortillas", + "almonds", + "cauliflower", + "bacon slices", + "red chili powder", + "green olives", + "green cabbage", + "rice wine", + "chipotles in adobo", + "red potato", + "fresh spinach", + "tomato purée", + "french bread", + "asparagus", + "cannellini beans", + "minced ginger", + "water chestnuts", + "chili", + "snow peas", + "fennel bulb", + "chives", + "black-eyed peas", + "dark sesame oil", + "bread", + "lasagna noodles", + "couscous", + "bourbon whiskey", + "frozen corn", + "broccoli florets", + "anchovy fillets", + "baking potatoes", + "minced onion", + "cake flour", + "pitted kalamata olives", + "guacamole", + "fresh orange juice", + "all purpose unbleached flour", + "sausages", + "Mexican cheese blend", + "reduced sodium chicken broth", + "lettuce leaves", + "1% low-fat milk", + "arugula", + "butternut squash", + "unsweetened coconut milk", + "brown rice", + "spices", + "penne pasta", + "Tabasco Pepper Sauce", + "apples", + "peas", + "ice water", + "vanilla beans", + "button mushrooms", + "pancetta", + "sun-dried tomatoes", + "grits", + "taco seasoning mix", + "bread flour", + "vegetable stock", + "lettuce", + "whole wheat flour", + "ground turkey", + "goat cheese", + "mussels", + "dried parsley", + "pinto beans", + "shredded carrots", + "slivered almonds", + "pure vanilla extract", + "thai basil", + "collard greens", + "beef stock", + "shredded sharp cheddar cheese", + "light corn syrup", + "light coconut milk", + "english cucumber", + "sharp cheddar cheese", + "provolone cheese", + "coconut", + "grated lemon peel", + "hot red pepper flakes", + "dried rosemary", + "shredded lettuce", + "fettucine", + "sliced almonds", + "stewed tomatoes", + "lard", + "almond extract", + "dry mustard", + "brandy", + "salmon fillets", + "sliced black olives", + "chili sauce", + "iceberg lettuce", + "kale", + "semisweet chocolate", + "bread crumb fresh", + "chili flakes", + "plain flour", + "poblano chiles", + "pecorino romano cheese", + "bamboo shoots", + "kidney beans", + "olives", + "fresh tomatoes", + "garbanzo beans", + "bittersweet chocolate", + "cooked white rice", + "cream of tartar", + "orange zest", + "pecans", + "shredded cheese", + "mascarpone", + "daikon", + "mint", + "cardamom pods", + "cotija", + "wonton wrappers", + "chipotle chile", + "szechwan peppercorns", + "grated orange", + "seasoning", + "chicken legs", + "extra firm tofu", + "peppercorns", + "polenta", + "vegetable shortening", + "crème fraîche", + "asian fish sauce", + "meat", + "jasmine rice", + "italian sausage", + "chicken breast halves", + "parsley sprigs", + "lime zest", + "artichoke hearts", + "fresh tarragon", + "mint sprigs", + "sherry vinegar", + "panko breadcrumbs", + "ice cubes", + "garlic chili sauce", + "Gochujang base", + "seasoning salt", + "roasted peanuts", + "red cabbage", + "chinese rice wine", + "salsa verde", + "cream cheese, soften", + "fresh parsley leaves", + "Italian parsley leaves", + "ground cayenne pepper", + "smoked sausage", + "reduced sodium soy sauce", + "whole peeled tomatoes", + "ancho chile pepper", + "white bread", + "pimentos", + "tequila", + "chicken wings", + "tofu", + "boneless chicken breast", + "chopped walnuts", + "kaffir lime leaves", + "sweet paprika", + "caster sugar", + "cremini mushrooms", + "fat free milk", + "pineapple", + "ground lamb", + "pork shoulder", + "dashi", + "pesto", + "non-fat sour cream", + "dried apricot", + "queso fresco", + "chillies", + "seeds", + "allspice", + "rice flour", + "chili pepper", + "red curry paste", + "ginger root", + "marsala wine", + "dry yeast", + "bok choy", + "chopped fresh sage", + "jack cheese", + "pork belly", + "gingerroot", + "barbecue sauce", + "palm sugar", + "vidalia onion", + "dried shiitake mushrooms", + "sweet chili sauce", + "crawfish", + "frozen corn kernels", + "chili paste", + "part-skim ricotta cheese", + "granny smith apples", + "Italian bread", + "peanut butter", + "sage leaves", + "pizza doughs", + "greek style plain yogurt", + "turnips", + "Thai red curry paste", + "creamy peanut butter", + "mustard", + "unflavored gelatin", + "chile powder", + "quinoa", + "green tomatoes", + "corn oil", + "dark rum", + "ginger paste", + "pork sausages", + "lump crab meat", + "penne", + "reduced-fat sour cream", + "beets", + "yellow squash", + "sea scallops", + "red lentils", + "walnuts", + "black mustard seeds", + "fresh chives", + "poblano peppers", + "rosemary", + "ice", + "crushed garlic", + "frozen pastry puff sheets", + "kimchi", + "Thai fish sauce", + "rosemary sprigs", + "diced green chilies", + "shredded cabbage", + "yeast", + "paneer", + "cooked chicken breasts", + "chili oil", + "watercress", + "catfish fillets", + "cardamom", + "romano cheese", + "whipped cream", + "freshly grated parmesan", + "maple syrup", + "whole kernel corn, drain", + "fontina cheese", + "dough", + "swiss chard", + "bow-tie pasta", + "molasses", + "chorizo sausage", + "hard-boiled egg", + "marjoram", + "curry paste", + "sausage casings", + "ground chicken", + "masa harina", + "serrano peppers", + "ricotta", + "sugar pea", + "cornflour", + "dried red chile peppers", + "pecan halves", + "sliced carrots", + "baby spinach leaves", + "cottage cheese", + "dried porcini mushrooms", + "hazelnuts", + "lemon grass", + "beans", + "Mexican oregano" +] diff --git a/cooking_vocab.py b/cooking_vocab.py new file mode 100644 index 0000000..7c43405 --- /dev/null +++ b/cooking_vocab.py @@ -0,0 +1,402 @@ +# old source: https://www.enchantedlearning.com/wordlist/cooking.shtml +old_cooking_verbs = [ + 'aerate', + 'age', + 'bake', + 'barbecue', + 'baste', + 'batter', + 'beat', + 'bind', + 'blacken', + 'blanch', + 'blend', + 'boil', + 'bone', + 'braise', + 'bread', + 'brew', + 'broil', + 'brown', + 'brush', + 'burn', + 'butterfly', + 'can', + 'caramelize', + 'char', + 'char-broil', + 'chill', + 'chop', + 'chunk', + 'churn', + 'clarify', + 'coddle', + 'combine', + 'congeal', + 'cool', + 'core', + 'cream', + 'cured', + 'cut', + 'debone', + 'decorate', + 'deep fry', + 'deglaze', + 'descale', + 'devil', + 'dice', + 'dip', + 'dough', + 'drain', + 'drizzle', + 'dry', + 'escallop', + 'ferment', + 'fillet', + 'filter', + 'flambe', + 'flavor', + 'flip', + 'fold', + 'freeze', + 'French fry', + 'fricassee', + 'frost', + 'froth', + 'fry', + 'garnish', + 'gel', + 'glaze', + 'grate', + 'gratin', + 'grease', + 'grill', + 'grind', + 'hard boil', + 'harden', + 'hash', + 'heat', + 'hull', + 'ice', + 'infuse', + 'jell', + 'juice', + 'julienne', + 'knead', + 'layer', + 'leaven', + 'macerate', + 'marinate', + 'mash', + 'measure', + 'melt', + 'microwave', + 'mix', + 'mold', + 'oil', + 'oven fry', + 'overcook', + 'pan fry', + 'parboil', + 'pare', + 'peel', + 'percolate', + 'pickle', + 'pit', + 'poach', + 'pop', + 'pour', + 'precook', + 'prepare', + 'preserve', + 'press', + 'pressure-cook', + 'process', + 'pulp', + 'puree', + 'quarter', + 'raw', + 'reduce', + 'refrigerate', + 'render', + 'rise', + 'roast', + 'roll', + 'rub', + 'salt', + 'saute', + 'scald', + 'scallop', + 'scoop', + 'score', + 'scramble', + 'sear', + 'season', + 'separate', + 'serve', + 'shell', + 'shirr', + 'shred', + 'shuck', + 'sieve', + 'sift', + 'simmer', + 'skewer', + 'skim', + 'skin', + 'slice', + 'sliver', + 'slow cook', + 'smoke', + 'snip', + 'soak', + 'soft boil', + 'souse', + 'sprinkle', + 'steam', + 'steep', + 'stew', + 'stir', + 'stir fry', + 'strain', + 'stuff', + 'sweat', + 'sweeten', + 'temper', + 'tenderize', + 'thicken', + 'thin', + 'toast', + 'top', + 'toss', + 'trim', + 'truss', + 'turn', + 'uncured', + 'unmold', + 'warm', + 'wash', + 'wedge', + 'whip', + 'whisk', + 'zap', + 'zest' +] + +old_cooking_verbs2 = ['arrange', + 'baste', + 'beat', + 'blend', + 'brown', + 'build', + 'bury', + 'carve', + 'check', + 'chop', + 'close', + 'cool', + 'correct', + 'cover', + 'crumple', + 'cut', + 'decorate', + 'discard', + 'divide', + 'drape', + 'drop', + 'dry', + 'film', + 'fold', + 'follow', + 'form', + 'force', + 'glaze', + 'insert', + 'lay', + 'leave', + 'lift', + 'make', + 'melt', + 'mince', + 'mix', + 'moisten', + 'mound', + 'open', + 'pack', + 'paint', + 'pierce', + 'pour', + 'prepare', + 'press', + 'prick', + 'pull', + 'puree', + 'push', + 'quarter', + 'raise', + 'reduce', + 'refresh', + 'reheat', + 'replace', + 'return', + 'ring', + 'roast', + 'roll', + 'salt', + 'saute', + 'scatter', + 'scoop', + 'scrape', + 'scrub', + 'season', + 'separate', + 'set', + 'settle', + 'shave', + 'simmer', + 'skim', + 'slice', + 'slide', + 'slip', + 'slit', + 'smear', + 'soak', + 'spoon', + 'spread', + 'sprinkle', + 'stir', + 'strain', + 'strew', + 'stuff', + 'surround', + 'taste', + 'thin', + 'tie', + 'tilt', + 'tip', + 'top', + 'toss', + 'trim', + 'turn', + 'twist', + 'warm', + 'wilt', + 'wind', + 'wrap' +] + +#https://teflpedia.com/Verbs_used_in_cooking + +cooking_verbs = [ + 'add', + 'adjust', + 'arrange', + 'bake', + 'baste', + 'batter', + 'beat', + 'blend', + 'boil', + 'braise', + 'break', + 'bread', + 'broil', + 'brown', + 'brush', + 'build', + 'burn', + 'bury', + 'carve', + 'check', + 'chill', + 'chop', + 'clarify', + 'close', + 'cook', + 'cool', + 'correct', + 'cover', + 'crack', + 'crumple', + 'curdle', + 'cut', + 'debone', + 'dice', + 'discard', + 'drain', + 'dress', + 'fillet', + 'flour', + 'fold', + 'freeze', + 'fry', + 'garnish', + 'glaze', + 'grate', + 'grind', + 'grill', + 'gut', + 'heat', + 'knead', + 'lower', + 'macerate', + 'marinate', + 'mash', + 'melt', + 'mince', + 'mix', + 'open', + 'parboil', + 'peel', + 'pickle', + 'place', + 'poach', + 'pour', + 'prepare', + 'pull', + 'put', + 'reduce', + 'refrigerate', + 'remove', + 'rinse', + 'roast', + 'rollout', + 'rollup', + 'rub', + 'salt', + 'sauté', + 'scoop', + 'scorch', + 'scramble', + 'season', + 'serve', + 'set', + 'simmer', + 'skim', + 'slice', + 'slowcook', + 'soak', + 'sour', + 'spice', + 'spoon', + 'spread', + 'sprinkle', + 'squeeze', + 'steam', + 'steep', + 'stir', + 'strain', + 'sugar', + 'sweeten', + 'taste', + 'thaw', + 'thicken', + 'toast', + 'try', + 'warm', + 'wash', + 'waterdown', + 'whip', + 'whisk', + 'wipe' +] \ No newline at end of file diff --git a/gensim_sandbox.ipynb b/gensim_sandbox.ipynb new file mode 100644 index 0000000..daed1e7 --- /dev/null +++ b/gensim_sandbox.ipynb @@ -0,0 +1,213 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import gensim" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from gensim.test.utils import common_texts, get_tmpfile\n", + "from gensim.models import Word2Vec" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "path = get_tmpfile(\"word2vec.model\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/tmp/word2vec.model'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "path" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "model.save(\"word2vec.model\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 2)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.train([[\"hello\", \"world\"]], total_examples=1, epochs=1)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "vector = model.wv['computer']" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-4.1360268e-03, -4.5368457e-03, 4.9407119e-03, -1.2173436e-03,\n", + " 1.8632456e-03, -3.0847099e-03, 9.4799127e-04, -2.7400992e-04,\n", + " -1.6392355e-03, -2.7422528e-03, -4.2033773e-03, -3.3297916e-03,\n", + " 4.1276743e-03, -4.7909385e-03, -3.4512556e-03, -2.4730477e-03,\n", + " 3.9467048e-03, -3.1123622e-03, 8.4940199e-04, 1.6509957e-03,\n", + " 1.9616839e-03, 2.9326702e-04, 8.3735195e-04, -3.9251014e-03,\n", + " 4.4886805e-03, 1.6525604e-03, -6.3597935e-04, 4.5339693e-03,\n", + " 3.1772670e-03, -2.1555244e-03, -1.4741931e-03, -3.0088725e-03,\n", + " -2.4554132e-05, 1.0471512e-03, 7.2246540e-04, -7.0415600e-04,\n", + " 1.0049028e-03, -1.2862401e-03, 4.2546941e-03, 3.7523378e-03,\n", + " 4.6063680e-03, 2.5315667e-03, 3.2354944e-04, 1.9442231e-03,\n", + " -3.8831339e-03, 3.4721817e-03, 4.8152893e-04, 3.7462877e-03,\n", + " -1.1004598e-03, -4.7399257e-03, 2.1483030e-03, 3.3649500e-03,\n", + " 4.6523339e-03, 4.3348838e-03, -4.2628059e-03, -2.9411956e-03,\n", + " -4.9323966e-03, 4.8694564e-03, -3.2455113e-04, 2.4327010e-04,\n", + " -9.5937803e-04, 3.3954745e-03, 1.4546780e-03, 1.4540150e-03,\n", + " 3.9641848e-03, 1.0693196e-03, -1.8705493e-03, 4.7259987e-03,\n", + " 3.6600775e-03, -4.9972837e-03, -1.0512822e-03, 3.5494359e-03,\n", + " -1.2509550e-03, 9.0227136e-04, -5.6869379e-04, 2.4727959e-04,\n", + " 1.7441555e-03, 2.0887840e-03, 1.4573885e-03, 3.2532993e-05,\n", + " -3.0203401e-03, -4.7087572e-03, -2.2450915e-04, -4.8172413e-04,\n", + " 2.2919511e-03, 6.3158554e-04, -4.7253529e-03, 4.0057153e-03,\n", + " 2.4692446e-03, -7.6975941e-04, 3.9252751e-03, -2.3655752e-03,\n", + " -4.5094200e-04, -4.7492324e-03, -1.3552406e-03, 4.7150920e-03,\n", + " 1.2312060e-03, 1.3621986e-03, 2.3288964e-03, -1.1707483e-03],\n", + " dtype=float32)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vector" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[0;31mType:\u001b[0m Word2VecKeyedVectors\n", + "\u001b[0;31mString form:\u001b[0m \n", + "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.7/site-packages/gensim/models/keyedvectors.py\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "Mapping between words and vectors for the :class:`~gensim.models.Word2Vec` model.\n", + "Used to perform operations on the vectors such as vector lookup, distance, similarity etc.\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "?model.wv" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[['human', 'interface', 'computer'], ['survey', 'user', 'computer', 'system', 'response', 'time'], ['eps', 'user', 'interface', 'system'], ['system', 'human', 'system', 'eps'], ['user', 'response', 'time'], ['trees'], ['graph', 'trees'], ['graph', 'minors', 'trees'], ['graph', 'minors', 'survey']]\n" + ] + } + ], + "source": [ + "print(common_texts)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/json_buffered_reader.py b/json_buffered_reader.py index 209314d..474ac40 100644 --- a/json_buffered_reader.py +++ b/json_buffered_reader.py @@ -36,39 +36,57 @@ class JSON_buffered_reader(object): self.eof = True self._close() return + + prev_c = '' + + in_quotes = False for c in line: - if c == '[': - if self.array_d >= self.serialization_array_depth: - self.buffer += c - self.array_d += 1 + + if prev_c == '\\': + self.buffer += c + prev_c = '' if c == '\\' else c continue - elif c == ']': - if self.array_d >= self.serialization_array_depth: - self.buffer += c - self.array_d -= 1 - elif c == '{': - self.object_d += 1 - self.buffer += c - continue - elif c == '}': - self.object_d -= 1 - self.buffer += c - elif c == ',': - if self.array_d == self.serialization_array_depth and self.object_d == 0: - continue - self.buffer += c elif c == '\n': continue + if not in_quotes: + if c == '[': + if self.array_d >= self.serialization_array_depth: + self.buffer += c + self.array_d += 1 + elif c == ']': + if self.array_d >= self.serialization_array_depth: + self.buffer += c + self.array_d -= 1 + elif c == '{': + self.object_d += 1 + self.buffer += c + elif c == '}': + self.object_d -= 1 + self.buffer += c + elif c == '"': + in_quotes = True + self.buffer += c + elif c == ',': + if not(self.array_d == self.serialization_array_depth and self.object_d == 0): + self.buffer += c + elif c == '\n' or c == ' ' or c == '\t': + continue + else: + self.buffer += c + else: + if c == '"': + in_quotes = False self.buffer += c - continue assert self.object_d >= 0 assert self.array_d >= 0 + + prev_c = c if self.object_d == 0: - if self.array_d == self.serialization_array_depth: + if self.array_d == self.serialization_array_depth and len(self.buffer) > 0: self.json_queue.append(self.buffer) self.buffer = r'' @@ -78,7 +96,7 @@ class JSON_buffered_reader(object): def __next__(self): while len(self.json_queue) == 0: if self.eof: - return None + raise StopIteration self._process_next_line() - - return json.loads(self.json_queue.pop(0)) + tmp = self.json_queue.pop(0) + return json.loads(tmp) diff --git a/nltk_sandbox.ipynb b/nltk_sandbox.ipynb new file mode 100644 index 0000000..d55eea6 --- /dev/null +++ b/nltk_sandbox.ipynb @@ -0,0 +1,41 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import nltk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sandbox.ipynb b/sandbox.ipynb index 69354aa..4a235be 100644 --- a/sandbox.ipynb +++ b/sandbox.ipynb @@ -2,18 +2,22 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import json \n", - "from pprint import pprint" + "from pprint import pprint\n", + "import nltk\n", + "import word2vec\n", + "from gensim.test.utils import common_texts, get_tmpfile\n", + "from gensim.models import Word2Vec" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -22,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -38,63 +42,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "recipes = JSON_br(settings.one_million_recipes_file)" ] }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "i = 0\n", - "json_recipes = []\n", - "for recipe in recipes:\n", - " i += 1\n", - " if i == 10:\n", - " break\n", - " json_recipes.append(recipe)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'text': 'Chop green onions; chop red peppers; peel and grate carrots (save two grated carrots for salads); place all in a medium bowl and toss to mix.'},\n", - " {'text': 'Preheat oven to 450 degrees Fahrenheit.'},\n", - " {'text': 'Place salmon fillet in middle of a large piece of heavy aluminum foil.'},\n", - " {'text': 'Sprinkle salmon with ginger and freshly ground black pepper if you wish.'},\n", - " {'text': 'Arrange bowl of veggies on top of salmon, and seal foil tightly to create a tightly sealed pocket.'},\n", - " {'text': 'Place in oven and bake for 20 minutes.'},\n", - " {'text': 'The veggies will give up some of their liquid, creating more than enough to cook the fish.'},\n", - " {'text': 'Cook rice per package instructions.'},\n", - " {'text': 'While fish bakes, prepare Salad a La SPORTZ by arranging crackers in single layer on cookie sheet; sprinkle with Parmesan topping.'},\n", - " {'text': 'Bake for 1 to 2 minutes in oven with fish, just until lightly browned.'},\n", - " {'text': 'Cool.'},\n", - " {'text': 'Toss greens (1/2 pound = 8 cups), carrots (grated), tomatoes (halved), and green onions (sliced) in large sized bowl.'},\n", - " {'text': 'Toss with dressing.'},\n", - " {'text': 'Sprinkle with crackers just before serving.'},\n", - " {'text': 'Slice banana and kiwi and toss gently; divide between four dessert cups.'},\n", - " {'text': 'Blend cinnamon and sugar into yogurt, and place one-fourth of mixture on each bowl of fruit.'}]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "json_recipes[0]['instructions']" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -106,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -123,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -132,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -155,482 +109,120 @@ " break" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* filling in summarized datasets" + ] + }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "summarized_ingredients = []\n", + "summarized_instructions = []" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "test = \"\".join([ins + ' ' for ins in instructions[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "[['1 tablespoon cornstarch',\n", - " '2 tablespoons cold water',\n", - " '12 cup boiling water',\n", - " '1 teaspoon lemon juice or 1 teaspoon vanilla',\n", - " '3 egg whites',\n", - " '6 tablespoons sugar'],\n", - " ['2 eggs, scrambled',\n", - " '2 Tbsp. PHILADELPHIA Chive & Onion Cream Cheese Spread',\n", - " '1 English muffin, split, toasted',\n", - " '1 KRAFT Singles'],\n", - " ['1 lb pumpkin, chopped or 1 lb butternut squash',\n", - " '1 large onion, chopped',\n", - " '2 large garlic cloves, minced',\n", - " '1 tablespoon curry powder',\n", - " 'fresh stock (cubes work if needs must)',\n", - " '2 (13 1/2 ounce) cans coconut milk',\n", - " '200 g smoked salmon',\n", - " 'salt and pepper',\n", - " 'vegetable oil'],\n", - " ['3 x apples, Granny Smith',\n", - " '1 c. almonds, slivered',\n", - " '1/2 c. almonds, grnd',\n", - " '1 x Large eggs',\n", - " '1/2 c. sugar (caster)',\n", - " '50 gm butter',\n", - " '2 sht puff pastry',\n", - " '1 x Large eggs',\n", - " '1 Tbsp. almonds, slivered',\n", - " '1 Tbsp. sugar (caster)'],\n", - " ['8 ounces, weight Linguine',\n", - " '1 whole Red Bell Pepper, Julienned',\n", - " '2 Tablespoons Balsamic Vinegar',\n", - " '3 whole Garlic Cloves, Minced',\n", - " '1/2 teaspoons Salt',\n", - " '1/4 teaspoons Coarsely Ground Black Pepper',\n", - " '6 Tablespoons Extra Virgin Olive Oil',\n", - " '1 cup Fresh Basil Leaves, Thinly Sliced, Divided',\n", - " '2 cups Shredded, Cooked Chicken',\n", - " '1 cup Small Fresh Mozzarella Balls, Halved Or Regular Mozzarella Cut Into '\n", - " '3/4-inch Cubes',\n", - " '1/2 cups Goat Cheese Crumbles'],\n", - " ['1 cup all-purpose flour',\n", - " '1 teaspoon ground cinnamon',\n", - " '3/4 teaspoon baking powder',\n", - " '1/4 teaspoon baking soda',\n", - " '1/4 teaspoon salt',\n", - " '1/4 teaspoon ground nutmeg',\n", - " '1/3 cup margarine',\n", - " '3/4 cup firmly packed dark brown sugar',\n", - " '1 large egg',\n", - " '1 teaspoon vanilla extract',\n", - " '1 cup diced peeled Rome apple',\n", - " '3/4 cup regular oats, uncooked',\n", - " '1/2 cup dried currants',\n", - " 'Cooking spray',\n", - " '1 tablespoon powdered sugar'],\n", - " ['6 cups prepared sushi rice (see recipe)',\n", - " '2 Hass avocados in 1/2-inch strips',\n", - " 'Salt',\n", - " '1 pound cucumber, carrot or daikon, or a combination, cut into matchsticks',\n", - " '2 sheets nori (7 by 8 inches), cut into confetti',\n", - " '2 pounds fillets of fresh salmon, tuna, yellowtail, fluke or striped bass, '\n", - " 'in slices 3 inches by 1 inch by 1/4 inch thick',\n", - " '1 bunch scallions, cut in thin rings halfway up the green tops',\n", - " '2 teaspoons sesame seeds'],\n", - " ['1/2 pound grnd beef, ham or possibly chicken',\n", - " '1 egg, slightly beaten',\n", - " '1/2 c. lowfat milk',\n", - " '1/4 c. fine bread crumbs',\n", - " '1 1/2 tbsp. finely minced onion',\n", - " '1/2 teaspoon salt',\n", - " '1/4 teaspoon dry mustard',\n", - " 'Few grains pepper',\n", - " '2 tbsp. flour',\n", - " '1/4 c. Puritan oil',\n", - " '1 can condensed tomato or possibly mushroom soup',\n", - " '3/4 c. lowfat milk',\n", - " '1 1/2 c. cooked or possibly canned mixed vegetables',\n", - " '1/2 teaspoon salt'],\n", - " ['1- 1/2 cup All-purpose Flour',\n", - " '1 Tablespoon White Sugar',\n", - " '1/2 teaspoons Salt',\n", - " '1/2 cups Vegetable Oil',\n", - " '2 Tablespoons Milk'],\n", - " ['2 cups peeled, cooked, mashed sweet potatoes*',\n", - " '1 1/4 cups sugar',\n", - " '1/4 cup (1/2 stick) melted butter',\n", - " '2 eggs',\n", - " '1 teaspoon vanilla extract, or 1-2 tablespoons bourbon',\n", - " '1/4 teaspoon salt',\n", - " '1/4 teaspoon cinnamon',\n", - " '1/4 teaspoon ground ginger',\n", - " '1 cup milk',\n", - " 'One 9-inch unbaked pie crust',\n", - " '3 egg whites'],\n", - " ['1 pkg. (2-layer size) chocolate cake mix',\n", - " '14 Oreo Cookies, coarsely chopped',\n", - " '1 pkg. (4-serving size) Jell-O Vanilla Instant Pudding',\n", - " '1 cup cold milk',\n", - " '1/4 cup icing sugar',\n", - " '2 cups thawed Cool Whip Whipped Topping',\n", - " \"48 Baker's Semi-Sweet Chocolate Chips\"],\n", - " ['1 small butternut squash, peeled, diced (about 5 C.)',\n", - " '1 medium onion, large dice (1 cup)',\n", - " '1 tablespoon olive oil',\n", - " '1 apple, skinned, large dice (1 cup)',\n", - " '48 ounces chicken broth',\n", - " '1 cup half-and-half',\n", - " '2 tablespoons parsley, fresh, chopped',\n", - " '1 tablespoon thyme, fresh, chopped',\n", - " 'crouton (optional)',\n", - " 'sour cream (optional)'],\n", - " ['1 lb turkey, cut into bite size pieces',\n", - " '2 tablespoons Italian dressing',\n", - " '2 cups frozen mixed vegetables',\n", - " '1 (10 3/4 ounce) can98% fat free condensed cream of chicken soup',\n", - " '14 lb Velveeta cheese, cut into 1/2-inch cubes (or store brand)',\n", - " '1 sheet frozen puff pastry, thawed (1/2 of 17.3-oz. pkg.)',\n", - " '1 egg, beaten'],\n", - " ['1 12 cups whole wheat flour',\n", - " '3 teaspoons baking powder',\n", - " '14 cup extra virgin olive oil',\n", - " '2 eggs',\n", - " '1 cup skim milk',\n", - " '14 teaspoon salt',\n", - " '14 teaspoon cinnamon',\n", - " '14 teaspoon nutmeg',\n", - " '14 teaspoon ground cloves',\n", - " '14 teaspoon ginger',\n", - " '14 teaspoon vanilla',\n", - " '34 cup flax seed',\n", - " '3 tablespoons honey',\n", - " '1 12 cups blueberries (or any fruit desired)'],\n", - " ['1 lb leftover chopped corned beef',\n", - " '1 cup shredded cheddar cheese',\n", - " '2 tablespoons dried onion flakes',\n", - " '1 tablespoon dill or 1 tablespoon sweet relish',\n", - " '23 cup mayonnaise',\n", - " '6 hamburger buns, buttered and toasted'],\n", - " ['1/4 cup heavy cream',\n", - " \"1/2 (10 ounce) jar Dickinson's Lemon Curd, or any flavor Dickinson's Fruit \"\n", - " 'or Creme Curd',\n", - " '1 (4 ounce) package cream cheese, softened',\n", - " '1 (15 count) box phyllo dessert cups',\n", - " 'Fruit slices, cookie pieces, candy sprinkles, chocolate shavings '\n", - " '(optional)'],\n", - " ['4 large baking potatoes (2 lb./900 g) Safeway 2 pkg For $5.00 thru 02/09',\n", - " '1/2 cup sour cream',\n", - " \"1/4 cup Bull's-Eye Bold Original Barbecue Sauce\",\n", - " '2 green onions, sliced',\n", - " '1/4 cup French fried onions'],\n", - " ['2 tablespoons olive oil',\n", - " '2 shallots, thinly sliced',\n", - " '1 teaspoon minced peeled fresh ginger',\n", - " '1/2 cup chopped tart green apple(such as Granny Smith)',\n", - " '1/2 cup chopped zucchini',\n", - " '1/2 cup chopped seeded red bell pepper',\n", - " '1/2 cup chopped seeded green bell pepper',\n", - " '1/4 cup chopped carrot',\n", - " '1/2 pound crabmeat, drained well, picked over',\n", - " '1/4 cup mayonnaise',\n", - " '2 tablespoons chopped fresh chives',\n", - " '2 tomatoes, peeled, seeded, chopped',\n", - " '1/3 cup chopped fresh cilantro',\n", - " '2 tablespoons Sherry wine vinegar',\n", - " '1 garlic clove, chopped',\n", - " 'Pinch of cayenne pepper',\n", - " '1/2 cup olive oil',\n", - " '2 heads Belgian endive, trimmed, separated into spears',\n", - " 'Chopped fresh chives'],\n", - " ['2 12 lbs all-purpose flour',\n", - " '2 12 tablespoons Crisco',\n", - " '1 ounce yeast (2 packages)',\n", - " '1 teaspoon sugar',\n", - " '1 tablespoon salt',\n", - " '2 tablespoons anise seed',\n", - " '2 eggs',\n", - " '1 cup water',\n", - " '1 tablespoon vegetable oil'],\n", - " ['1/2 cup semi-sweet chocolate chips',\n", - " '1 tbsp water',\n", - " '1 tbsp rum',\n", - " '1 tbsp vanilla extract ( I add a bit extra)',\n", - " '1 3/4 cup powdered sugar',\n", - " '1 3/4 cup (7 ounces) ground walnuts',\n", - " '1 granulated or decorative sugar'],\n", - " ['1- 1/2 cup All-purpose Flour',\n", - " '1/4 cups Sugar',\n", - " '1/2 Tablespoons Baking Powder',\n", - " '1/4 cups Unsalted Butter, Cubed, Cold',\n", - " '1 whole Egg, Beaten',\n", - " '1/2 cups Ricotta Cheese',\n", - " '1 teaspoon Vanilla',\n", - " '2 teaspoons Cinnamon',\n", - " '2 whole Peaches, Cored, Diced',\n", - " '1 Tablespoon Turbinado Sugar',\n", - " '1 cup Confectioners Sugar',\n", - " '13 cups Milk',\n", - " '1/2 teaspoons Cinnamon'],\n", - " ['1 cup all-purpose flour',\n", - " '1/2 cup chopped walnuts',\n", - " '1/4 cup packed brown sugar',\n", - " '1/2 cup melted butter',\n", - " '2 1/2 cups strawberries, finely chopped',\n", - " '1/2 cup white sugar',\n", - " '1 tablespoon lemon juice',\n", - " '1 (16 ounce) container frozen whipped topping, thawed'],\n", - " ['34 cup peanut butter',\n", - " '12 cup sugar',\n", - " '1 teaspoon vanilla',\n", - " '12 teaspoon salt',\n", - " '1 34 cups milk',\n", - " '2 14 cups whole wheat flour',\n", - " '4 teaspoons baking powder'],\n", - " ['1/2 c. granulated sugar',\n", - " '3/4 c. salt free corn oil',\n", - " '1/4 c. egg beaters',\n", - " '1 teaspoon grated orange rind',\n", - " '1/4 teaspoon orange juice',\n", - " '1 tbsp. low sodium baking powder',\n", - " '3 1/2 c. flour, all purpose'],\n", - " ['1 large about 3 pounds cantaloupe',\n", - " '12 cup apple juice',\n", - " '1 12 tablespoons lime juice',\n", - " '1 12 tablespoons chopped of fresh mint',\n", - " '12 cup plain yogurt',\n", - " '1 tablespoon honey, if needed',\n", - " '1 pinch salt'],\n", - " ['3 cups cooked brown rice',\n", - " '1 lb ground turkey',\n", - " '1 medium onion, chopped',\n", - " '1 green bell pepper, seeded and chopped',\n", - " '1 (6 ounce) canof small pitted black olives, drained',\n", - " '12 cup raisins'],\n", - " ['12 chopped sweet melon',\n", - " '2 sliced bananas',\n", - " '2 chopped guavas',\n", - " '1 bunch grapes',\n", - " '1 diced apple',\n", - " '2 tablespoons orange juice',\n", - " '1 cup shelled pomegranate',\n", - " '1 cup fresh cream',\n", - " '12 teaspoon black pepper',\n", - " '1 teaspoon sugar',\n", - " 'few fresh mint leaves, for garnishing'],\n", - " ['1 12 cups wheat berries',\n", - " '8 cups water',\n", - " '14 cup chopped almonds, or',\n", - " '14 cup toasted pine nuts',\n", - " '3 tablespoons vegetable oil',\n", - " '1 chopped onion',\n", - " '2 minced garlic cloves',\n", - " '1 tablespoon mild curry paste',\n", - " '14 teaspoon salt',\n", - " '3 tablespoons white wine vinegar',\n", - " '1 chopped red pepper',\n", - " '12 cup chopped mozzarella cheese',\n", - " '2 tablespoons chopped parsley'],\n", - " ['1 12 cups old fashioned oats',\n", - " '1 cup flour, all-purpose',\n", - " '12 cup brown sugar, firmly packed',\n", - " '1 teaspoon cinnamon',\n", - " '12 teaspoon baking soda',\n", - " '14 teaspoon salt',\n", - " '1 cup orange juice',\n", - " '14 cup vegetable oil',\n", - " '1 egg, beaten',\n", - " '1 teaspoon vanilla',\n", - " '6 ounces dried mixed fruit, diced',\n", - " '2 tablespoons old fashioned oats'],\n", - " ['1-1/4 gal. popped corn',\n", - " '1 cup butter',\n", - " '2 cups brown sugar, packed',\n", - " '1/2 cup light corn syrup',\n", - " '1/2 tsp. baking soda',\n", - " '1/2 tsp. vanilla'],\n", - " ['3 13 lbs mangoes, chopped',\n", - " '4 teaspoons garlic',\n", - " 'salt',\n", - " '3 tablespoons chili powder',\n", - " '2 tablespoons cumin powder',\n", - " '1 tablespoon cround coriander',\n", - " '3 tablespoons masala (or curry powder)',\n", - " '1 12 cups honey (agave ok)',\n", - " '12 cup cornflour (or potato)',\n", - " '2 tablespoons mustard seeds',\n", - " 'curry leaf, handfull (if you can find them, I have a curry leaf tree)',\n", - " '1 12 cups olive oil'],\n", - " ['1 lb. boneless beef sirloin steak, thinly sliced',\n", - " '1/4 cup A.1. Original Sauce, divided',\n", - " '1/4 cup KRAFT Original Barbecue Sauce',\n", - " '1 tsp. GREY POUPON Dijon Mustard'],\n", - " ['10 lbs potatoes, peeled',\n", - " '2 onions, peeled',\n", - " '9 -10 large eggs (or 7-8 extra-large eggs)',\n", - " '1 12 tablespoons salt',\n", - " '14 cup oil'],\n", - " ['1 (10 ounce) package frozen chopped spinach, thawed and squeezed dry',\n", - " '1 cup dry breadcrumbs',\n", - " '1 small onion, finely chopped',\n", - " '2 eggs, lightly beaten',\n", - " '14 cup romano cheese, grated',\n", - " '2 teaspoons dried oregano',\n", - " '1 12 teaspoons garlic powder',\n", - " '12 teaspoon salt',\n", - " '1 teaspoon all purpose Greek seasoning (I found mine at Walmart)',\n", - " '2 lbs ground lamb or 2 lbs ground beef',\n", - " 'tzatziki, sauce (for a really good one, use Tzatziki Cucumber Dipping Sauce '\n", - " ')'],\n", - " ['2 12 lbs ground beef, your choice of cut',\n", - " '1 lb ground pork, I use Jones Sausage Roll*',\n", - " '1 cup large dice celery',\n", - " '1 cup large dice onion',\n", - " '6 -12 ounces pepperidge farm onion and garlic croutons',\n", - " '1 lb butter, you may not need it all',\n", - " 'poultry seasoning',\n", - " 'salt',\n", - " 'pepper'],\n", - " ['3 pounds Chicken Wings Or Drummettes',\n", - " '1 teaspoon Salt, Or To Taste',\n", - " '1/2 teaspoons Pepper Or To Taste',\n", - " '1 Tablespoon Oil',\n", - " '3 Tablespoons Butter',\n", - " '1/4 cups Sriracha Hot Sauce',\n", - " '2 Tablespoons Honey',\n", - " '1 Tablespoon Rice Wine Or Sherry',\n", - " '1 teaspoon Soy Sauce',\n", - " '1 teaspoon Hoisin Sauce',\n", - " '1/2 teaspoons Salt',\n", - " '2 Tablespoons Chopped Cilantro'],\n", - " ['1 c. Slivered almonds, toasted',\n", - " '2 Tbsp. Light brown sugar',\n", - " '2 Tbsp. Butter, room temperature',\n", - " '3/4 stk butter',\n", - " '3 ounce White chocolate, minced, into small pcs',\n", - " '2 lrg Large eggs, room temperature',\n", - " '1/2 c. Light brown sugar, packed',\n", - " '1/2 c. Granulated sugar',\n", - " '1/2 tsp Baking pwdr',\n", - " '2 x Tesa freshly grated lemon peel',\n", - " '1/2 tsp Vanilla',\n", - " '1/4 tsp Almond extract',\n", - " '1 1/4 c. Flour',\n", - " '1/4 c. Slivered almonds'],\n", - " ['2 eggs', 'pinch salt', 'pinch black pepper', '2 slices any cheese'],\n", - " ['2 can Pillsbury Grands Homestyle Refrigerated Buttermilk Biscuits (16.3 oz '\n", - " 'can)',\n", - " '3/4 cup butter',\n", - " '1/2 cup granulated sugar',\n", - " '1 tsp ground cinnamon',\n", - " '1 cup brown sugar'],\n", - " ['Meat from 1 whole chicken Or possibly canned chicken or possibly parts',\n", - " '1 can cream of chicken soup',\n", - " '1/2 c. green chili salsa',\n", - " '2 tbsp. quick cooking tapioca',\n", - " '1 med. onion, minced',\n", - " '1 1/2 c. grated cheese',\n", - " '1 doz. corn tortillas',\n", - " 'Black olives'],\n", - " ['12 cup corn kernel, - 1/2 cup',\n", - " '12 cup mushroom, chopped - 1/2 cup',\n", - " '3 onions, - 3',\n", - " '4 tomatoes, - 4',\n", - " 'red chili pepper',\n", - " 'coriander powder',\n", - " '6 cloves, - 6',\n", - " '1 bay leaf, - 1',\n", - " '2 star anise, - 2',\n", - " 'black pepper',\n", - " 'cornflour',\n", - " 'milk',\n", - " 'fresh cream',\n", - " 'coriander leaves',\n", - " '1 tablespoon oil, - 1 tablespoon',\n", - " 'salt'],\n", - " ['2 tablespoons extra virgin olive oil',\n", - " '1 large onion, chopped',\n", - " '1 jalapeno, seeded and minced',\n", - " '4 garlic cloves, minced',\n", - " '6 large red bell peppers, roasted, peeled, and seeded',\n", - " '1 tablespoon plus 1 teaspoon red wine vinegar',\n", - " '1 tablespoon balsamic vinegar',\n", - " '1 tablespoon light brown sugar',\n", - " '1 teaspoon ground cumin',\n", - " 'Salt to taste'],\n", - " ['2 pounds frozen cooked shrimp without tails, peeled and deveined',\n", - " '3/4 cup chopped green onions',\n", - " '1 1/2 cups chopped celery',\n", - " '3 tablespoons drained capers',\n", - " '1 cup black olives, sliced',\n", - " '1/2 cup oil and vinegar salad dressing',\n", - " '3/4 cup mayonnaise',\n", - " '1 tablespoon celery seed',\n", - " '1 dash lemon juice'],\n", - " ['500g lamb loin (backstrap) or fillet, thinly sliced',\n", - " '1 medium red onion, cut into thin wedges',\n", - " '1 large red capsicum, thickly sliced',\n", - " '1 large zucchini, cut into thick strips',\n", - " '150g whole button mushrooms',\n", - " '1/3 cup KRAFT* Greek Dressing',\n", - " '60g black olives',\n", - " 'To Serve',\n", - " 'chopped fresh oregano or italian parsley leaves',\n", - " 'grilled focaccia or turkish style bread'],\n", - " ['34 cup creamy peanut butter',\n", - " '12 cup Crisco shortening',\n", - " '1 14 cups firmly packed light brown sugar',\n", - " '3 tablespoons milk',\n", - " '1 tablespoon vanilla',\n", - " '1 egg',\n", - " '1 34 cups flour',\n", - " '34 teaspoon salt',\n", - " '34 teaspoon baking soda'],\n", - " ['3 chicken sausage',\n", - " '1 garlic clove, crushed',\n", - " '1 large onion, chopped',\n", - " '1 large green pepper, chopped',\n", - " '2 large carrots, julienned',\n", - " '3 tablespoons soy sauce'],\n", - " ['1 lb bacon, cooked and crumbled',\n", - " '5 garlic cloves, chopped (or more if you like)',\n", - " '2 (8 ounce) packages fresh mushrooms, sliced',\n", - " '2 tablespoons extra virgin olive oil',\n", - " '4 tablespoons butter',\n", - " \"2 (10 3/4 ounce) cans Campbell's Cream of Mushroom Soup (or the Cream of \"\n", - " 'Mushroom Soup with Roasted Garlic)',\n", - " '1 12 cups milk (or half and half)',\n", - " '14 teaspoon black pepper',\n", - " '2 (16 ounce) bags frozen French-cut green beans, thawed, drained and '\n", - " 'squeezed of extra water',\n", - " \"2 23 cups French's French fried onions\"],\n", - " ['1 egg, beaten',\n", - " '18 cup water',\n", - " '1 12 cups all-purpose flour',\n", - " '2 teaspoons fine sea salt',\n", - " '1 teaspoon ground black pepper',\n", - " 'vegetable oil, for frying',\n", - " '1 small cauliflower, cut into 1-inch florets',\n", - " '4 ounces green beans, halved',\n", - " '1 fennel bulb, trimmed and sliced into 1-inch pieces',\n", - " '1 cup garbanzo beans, drained and rinsed',\n", - " '1 lemon, cut into 1/4-inch slices',\n", - " '1 cup mayonnaise',\n", - " '2 tablespoons fresh lemon juice (from about 1/2 lemon)'],\n", - " ['1 -2 acorn squash',\n", - " '15 ounces black beans, rinsed and drained',\n", - " '15 ounces crushed tomatoes',\n", - " '2 medium onions',\n", - " '4 garlic cloves',\n", - " '1 quart vegetable broth',\n", - " '1 tablespoon olive oil',\n", - " '1 tablespoon cumin',\n", - " 'sea salt and pepper, to taste',\n", - " '1 avocado'],\n", - " ['1 (21 ounce) can cherry pie filling',\n", - " '1 (16 ounce) canpitted dark sweet cherries, drained',\n", - " '23 cup quick oats',\n", - " '12 cup Bisquick baking mix',\n", - " '12 cup packed brown sugar',\n", - " '14 cup chopped nuts (optional)',\n", - " '14 cup butter or 14 cup margarine',\n", - " '1 teaspoon cinnamon']]\n" - ] + "data": { + "text/plain": [ + "'Preheat the oven to 350 F. Butter or oil an 8-inch baking dish. Cook the penne 2 minutes less than package directions. (It will finish cooking in the oven.) Rinse the pasta in cold water and set aside. Combine the cooked pasta and the sauce in a medium bowl and mix carefully but thoroughly. Scrape the pasta into the prepared baking dish. Sprinkle the top with the cheeses and then the chili powder. Bake, uncovered, for 20 minutes. Let the mac and cheese sit for 5 minutes before serving. Melt the butter in a heavy-bottomed saucepan over medium heat and whisk in the flour. Continue whisking and cooking for 2 minutes. Slowly add the milk, whisking constantly. Cook until the sauce thickens, about 10 minutes, stirring frequently. Remove from the heat. Add the cheeses, salt, chili powder, and garlic powder. Stir until the cheese is melted and all ingredients are incorporated, about 3 minutes. Use immediately, or refrigerate for up to 3 days. This sauce reheats nicely on the stove in a saucepan over low heat. Stir frequently so the sauce doesnt scorch. This recipe can be assembled before baking and frozen for up to 3 monthsjust be sure to use a freezer-to-oven pan and increase the baking time to 50 minutes. One-half teaspoon of chipotle chili powder makes a spicy mac, so make sure your family and friends can handle it! The proportion of pasta to cheese sauce is crucial to the success of the dish. It will look like a lot of sauce for the pasta, but some of the liquid will be absorbed. '" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "pprint(ingredients)" + "test" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "token = nltk.word_tokenize(test)\n", + "pos_tags = nltk.pos_tag(token)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['6 ounces penne',\n", + " '2 cups Beechers Flagship Cheese Sauce (recipe follows)',\n", + " '1 ounce Cheddar, grated (1/4 cup)',\n", + " '1 ounce Gruyere cheese, grated (1/4 cup)',\n", + " '1/4 to 1/2 teaspoon chipotle chili powder (see Note)',\n", + " '1/4 cup (1/2 stick) unsalted butter',\n", + " '1/3 cup all-purpose flour',\n", + " '3 cups milk',\n", + " '14 ounces semihard cheese (page 23), grated (about 3 1/2 cups)',\n", + " '2 ounces semisoft cheese (page 23), grated (1/2 cup)',\n", + " '1/2 teaspoon kosher salt',\n", + " '1/4 to 1/2 teaspoon chipotle chili powder',\n", + " '1/8 teaspoon garlic powder',\n", + " '(makes about 4 cups)']" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ingredients[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('1/4', 'CD'),\n", + " ('cup', 'NN'),\n", + " ('(', '('),\n", + " ('1/2', 'CD'),\n", + " ('stick', 'NN'),\n", + " (')', ')'),\n", + " ('unsalted', 'VBD'),\n", + " ('butter', 'NN')]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nltk.pos_tag(nltk.word_tokenize(ingredients[0][5]))" ] }, { diff --git a/settings.py b/settings.py index 2a3d747..af23a30 100644 --- a/settings.py +++ b/settings.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 -data_root = "./data/1M_recipes/" -one_million_recipes_file = data_root + "layer1.json" +data_root = "./data/" +one_million_recipes_file = data_root + "1M_recipes/layer1.json" +yummly_train = data_root + "Yummly/train.json" diff --git a/yummly_ingredients_list.ipynb b/yummly_ingredients_list.ipynb new file mode 100644 index 0000000..47201e8 --- /dev/null +++ b/yummly_ingredients_list.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from json_buffered_reader import JSON_buffered_reader as JSON_br\n", + "\n", + "import settings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* load all ingredients from the yummly dataset and merge them into a huge set" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "ingredients = []\n", + "ingredient_count = {}\n", + "\n", + "min_count = 100" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "for recipe in JSON_br(settings.yummly_train):\n", + " for ingredient in recipe['ingredients']:\n", + " if ingredient in ingredient_count:\n", + " ingredient_count[ingredient] += 1\n", + " if ingredient_count[ingredient] == min_count:\n", + " ingredients.append(ingredient)\n", + " else:\n", + " ingredient_count[ingredient] = 1\n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "all_ingredients_set = set(ingredients)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "648" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(all_ingredients_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* save to python file:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "filename = 'cooking_ingredients.py'" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "file_obj = open(filename,'w')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "file_obj.write(\"#!/usr/bin/env python3\\n\")\n", + "\n", + "file_obj.write(\"\\ningredients = [\\n\")\n", + "\n", + "\n", + "first_item = ingredients[0]\n", + "\n", + "file_obj.write(' \"' + first_item + '\"')\n", + "for ingredient in ingredients[1:]:\n", + " file_obj.write(',\\n \"' + ingredient + '\"')\n", + "\n", + "file_obj.write(\"\\n]\\n\")\n", + "\n", + "file_obj.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}