4331 lines
491 KiB
Text
4331 lines
491 KiB
Text
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d35ac8ce-0f92-46f5-9ba4-a46970f0ce19",
|
||
"metadata": {},
|
||
"source": [
|
||
"# cognee - demo"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bd981778-0c84-4542-8e6f-1a7712184873",
|
||
"metadata": {
|
||
"editable": true,
|
||
"slideshow": {
|
||
"slide_type": ""
|
||
},
|
||
"tags": []
|
||
},
|
||
"source": [
|
||
"## Let's tackle the problem first\n",
|
||
"\n",
|
||
"Since LLMs appeared, people have tried to personalize them.\n",
|
||
"You usually saw that by people doing \"prompt engineering\" and adding specific instructions to the LLM\n",
|
||
"\"Become a sales agent\" or \"Become a programmer\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d8e606b1-94d3-43ce-bb4b-dbadff7f4ca6",
|
||
"metadata": {},
|
||
"source": [
|
||
"The next popular thing was RAGs (Retrieval Augmented Generation) systems that connect to a vector store and search for similar data so they could enrich LLM response"
|
||
]
|
||
},
|
||
{
|
||
"attachments": {
|
||
"df72c97a-cb3b-4e3c-bd68-d7bc986353c6.png": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAABGcAAAISCAYAAABh6KIgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAAqACAAQAAAABAAAEZ6ADAAQAAAABAAACEgAAAADwIQMWAAAgAElEQVR4nOzdd5wV1dnA8d+ZuXc7uwtLh4VdEKQIrAVQqQZQE1RAjf21J7HGEmNiYowmeVPeJGqM0RQLYOyFbkwURMWCgAIiIG0XEFjKwvZ675z3jyl35t5dJCbCLveZz4d7Z+aU73nOXLacPXNGaa01zWwaUHEntIqd0xqU8uf1lXB3NaA0GhWsK7F28cUXX3zxxRdffPHFF1988cUXX/yk9I3YgQ4kqvgxGxVXndL+pCDmpim7EV6KW0SruBPiiy+++OKLL7744osvvvjiiy+++MnpK21pHVTtIl5xrVHOEJH/fPyWkBZ3ormyOtZ+8cUXX3zxxRdffPHFF1988cUXX/yk9I3EGv15Yw2DhDEcN3tCGcAZHNJeniDjc8QXX3zxxRdffPHFF1988cUXX3zxk9hX2t4CjQhUp8Ed3olLIXY2eCZh086LaiYNEF988cUXX3zxxRdffPHFF1988cVPVl9prXV8A1R8Kw5hCxT5gvIJyeKLL7744osvvvjiiy+++OKLL774Seob2sulnALa3vUUHajRrTgI2VN+AkGpYCb/gjcKd4qQc1Z88cUXX3zxxRdffPHFF1988cUXP0l9pbWlnVPu4E3C1sLpQ94C5f0B+FLFF1988cUXX3zxxRdffPHFF1988ZPRN9yjlhpmp2mvHt18lkNomG+UKOCIL7744osvvvjiiy+++OKLL7744ievryytdbNt0trJ3HyLDxJLMILmK7cTNGjVUhbxxRdffPHFF1988cUXX3zxxRdf/KPfN5S/pkClCgikxjK47Q4m+sraGdxRn4RsboKKE8QXX3zxxRdffPHFF1988cUXX3zxk8yPzZzRdmbv/SCb9prdfMbElPgzsWNvT3zxxRdffPHFF1988cUXX3zxxRc/CX3DK+LueEsOa+efs+/bVU4B91Qsv/2e2GQVl0s5O7684osvvvjiiy+++OKLL7744osvvvhJ6BtupsSKVGBfq7jkQPN0XDnnrI6la3+qxqkv1kjxxRdffPHFF1988cUXX3zxxRdf/GT0ldZ2FV6V2leDvyUH2dycWoNSsfeEDF9QXnzxxRdffPHFF1988cUXX3zxxRc/2XyDuHK6mYZp3yveaFBsc3O6DQo0DO1l0M5LfA3iiy+++OKLL7744osvvvjiiy+++MnqK639mq9R3m5iQ90jb6QIDvqc8Pg6Wt7EF1988cUXX3zxxRdffPHFF1988ZPLjxucicMPWqWd+u+xsdwtBSS++OKLL7744osvvvjiiy+++OKLn0y+4T9JXF63Gh3I4e4qoLmViePyBupSXppCBzDxxRdffPHFF1988cUXX3zxxRdf/GT0jVjm+Hpj2VV8MeXm8FelfU1Sce3T3rFOWPZYfPHFF1988cUXX3zxxRdffPHFFz95fSM+UwxuDg1uKpCggjX52q1RXnuVUygQiPjiiy+++OKLL7744osvvvjiiy9+kvoG4CxArALNUC2M8Gh/zco5cJetCdbvpMWOVcKrk0t88cUXX3zxxRdffPHFF1988cUXP0l9+1Hayi3sLxLbVPy+0r5GKn8F4Ce0igXga2/gWHzxxRdffPHFF1988cUXX3zxxRc/iX0jtqt9rzakA0nBgsp98WEa0H7Cm/ejvLq0VzB+E1988cUXX3zxxRdffPHFF1988cVPPt+InbBb4y+m3Ok6B2uoCpZVLeRTThDK34TAm/jiiy+++OKLL7744osvvvjiiy9+UvpOC7TGm1/j27RDuO/NbbG0lnNpt4Eq4Sziiy+++OKLL7744osvvvjiiy+++MnqxwZnWihzcDMx4WBB+DNpFZgAJL744osvvvjiiy+++OKLL7744ouflL6RUAhf7b5pPc1XEkvQzmsgq/a/ayC2WI4idh+W+OKLL7744osvvvjiiy+++OKLL36y+vbMGZ3YgOAp31Ezeb/05tYlvvjiiy+++OKLL7744osvvvjii5+kvj1zJgGLGwFC2bmby6u9F99x8JxOOOPsu3WJL7744osvvvjiiy+++OKLL7744iepb4D2Zu/EKlBxWYPtC4AqLr+K39G+NujEbOKLL7744osvvvjiiy+++OKLL774Sez7FgTWsRYElhX2n/cdf8nNX41WwUaKL7744osvvvjiiy+++OKLL7744ieb71sQWPneWhrjiR0njvYknHDetT/FLQ0qPkTxxRdffPHFF1988cUXX3zxxRdf/OTzvcGZYBWg4p+wHV+Zim++SkxzRoC8FK/RKu6E+OKLL7744osvvvjiiy+++OKLL35y+kpbOn71G7SP0lqjlEo4H78lpMWdaK6sjrVffPHFF1988cUXX3zxxRdffPHFFz8pfSOxRn/eWMMgYQzHzZ5QBnAGh7SXJ8j4HPHFF1988cUXX3zxxRdffPHFF1/8JPaVtrdAIwLVaXCHd+JSiJ0NnknYtPOimkkDxBdffPHFF1988cUXX3zxxRdffPGT1bef1hTXABXfikPYAkW+oHxCsvjiiy+++OKLL7744osvvvjiiy9+kvqG9nIpp4C2dz1FB2p0Kw5C9pSfQFAqmMm/4I3CnSLknBVffPHFF1988cUXX3zxxRdffPHFT1JfaW1p55Q7eJOwtXD6kLdAeX8AvlTxxRdffPHFF1988cUXX3zxxRdf/GT0DfeopYbZadqrRzef5RAa5hslCjjiiy+++OKLL7744osvvvjiiy+++MnrK0tr3WybtHYyN9/ig8QSjKD5yu0EDVq1lEV88cUXX3zxxRdffPHFF1988cUX/+j3DeWvKVCpAgKpsQxuu4OJvrJ2BnfUJyGbm6DiBPHFF1988cUXX3zxxRdffPHFF1/8JPNjM2e0ndl7P8imvWY3nzExJf5M7NjbE1988cUXX3zxxRdffPHFF1988cVPQt/wirg73pLD2vnn7Pt2lVPAPRXLb78nNlnF5VLOji+v+OKLL7744osvvvjiiy+++OKLL34S+oabKbEiFdjXKi450DwdV845q2Pp2p+qceqLNVJ88cUXX3zxxRdffPHFF1988cUXPxl9pbVdhVel9tXgb8lBNjen1qBU7D0hwxeUF1988cUXX3zxxRdffPHFF1988cVPNt8grpxupmHa94o3GhTb3JxugwINQ3sZtPMSX4P44osvvvjiiy+++OKLL7744osvfrL6Smu/5muUt5vYUPfIGymCgz4nPL6OljfxxRdffPHFF1988cUXX3zxxRdf/OTy4wZn4vCDVmmn/ntsLHdLAYkvvvjiiy+++OKLL7744osvvvjiJ5Nv+E8Sl9etRgdyuLsKaG5l4ri8gbqUl6bQAUx88cUXX3zxxRdffPHFF1988cUXPxl9I5Y5vt5YdhVfTLk5/FVpX5NUXPu0d6wTlj0WX3zxxRdffPHFF1988cUXX3zxxU9e34jPFIObQ4ObCiSoYE2+dmuU117lFAoEIr744osvvvjiiy+++OKLL7744oufpL4BOAsQq0AzVAsjPNpfs3IO3GVrgvU7abFjlfDq5BJffPHFF1988cUXX3zxxRdffPHFT1LffpS2cgv7i8Q2Fb+vtK+Ryl8B+AmtYgH42hs4Fl988cUXX3zxxRdffPHFF1988cVPYt+I7Wrfqw3pQFKwoHJffJgGtJ/w5v0ory7tFYzfxBdffPHFF1988cUXX3zxxRdffPGTzzdiJ+zW+Ispd7rOwRqqgmVVC/mUE4TyNyHwJr744osvvvjiiy+++OKLL7744ouflL7TAq3x5tf4Nu0Q7ntzWyyt5VzabaBKOIv44osvvvjiiy+++OKLL7744osvfrL6scGZFsoc3ExMOFgQ/kxaBSYAiS+++OKLL7744osvvvjiiy+++OInpW8kFMJXu29aT/OVxBK08xrIqv3vGogtlqOI3Yclvvjiiy+++OKLL7744osvvvjii5+svj1zRic2IHjKd9RM3i+9uXWJL7744osvvvjiiy+++OKLL7744iepb8+cScDiRoBQdu7m8mrvxXccPKcTzjj7bl3iiy+++OKLL7744osvvvjiiy+++EnqG6C92TuxClRc1mD7AqCKy6/id7SvDToxm/jiiy+++OKLL7744osvvvjiiy9+Evu+BYF1rAWBZYX9533HX3LzV6NVsJHiiy+++OKLL7744osvvvjiiy+++Mnm+xYEVr63lsZ4YseJoz0JJ5x37U9xS4OKD1F88cUXX3zxxRdffPHFF1988cUXP/l8b3AmWAWo+Cdsx1em4puvEtOcESAvxWu0ijshvvjiiy+++OKLL7744osvvvjii5+cvtKWjl/9Bu2jtNYopRLOx28JaXEnmiurY+0XX3zxxRdffPHFF1988cUXX3zxxU9K37fmTHNVBJp58CjiTnqvwRurnCwaVHNhii+++OKLL7744osvvvjii38wf9u2bXz66afktc/jpBEnYhhmUsUvvvhHo6+0vXmjQ3YGYpk0uMM7cSmBZhyktU6VLTUIxBdffPHFF1988cUXX3zxxf9if86sV7jl1tuc85pjBwzk9/f/nuMGH3dY/CMdv/jiH62+PXMmrgEq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"
|
||
}
|
||
},
|
||
"cell_type": "markdown",
|
||
"id": "23e74f22-f43c-4f03-afe0-b423cbaa412a",
|
||
"metadata": {},
|
||
"source": [
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b6a98710-a14b-4a14-bb56-d3ae055e94d9",
|
||
"metadata": {},
|
||
"source": [
|
||
"The problem lies in the nature of the search. If you just find some keywords, and return one or many documents from vectorstore this way, you will have an issue with the the way you would use to organise and prioritise documents. \n",
|
||
"If you search for an apple, you might get both the information of your last laptop purchase, and the information about apple as a fruit.\n",
|
||
"This fact makes it difficult to use vector databases and implies we might need another layer on top of them to have a semantic model LLMs could use"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "8a8942b5-91d6-4746-b35d-00f58bc16d7b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import logging\n",
|
||
"\n",
|
||
"from langchain.prompts import ChatPromptTemplate\n",
|
||
"import json\n",
|
||
"from langchain.document_loaders import TextLoader\n",
|
||
"from langchain.document_loaders import DirectoryLoader\n",
|
||
"from langchain.chains import create_extraction_chain\n",
|
||
"from langchain.chat_models import ChatOpenAI\n",
|
||
"import re\n",
|
||
"\n",
|
||
"from dotenv import load_dotenv\n",
|
||
"import os\n",
|
||
"\n",
|
||
"# Load environment variables from .env file\n",
|
||
"load_dotenv()\n",
|
||
"import instructor\n",
|
||
"from openai import OpenAI\n",
|
||
"\n",
|
||
"\n",
|
||
"aclient = instructor.patch(OpenAI())\n",
|
||
"\n",
|
||
"from typing import Optional, List\n",
|
||
"from pydantic import BaseModel, Field\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "14484e25-fae8-4306-b03f-dae91fe5d0aa",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"input_article_one = \"\"\" In the nicest possible way, Britons have always been a bit silly about animals. “Keeping pets, for the English, is not so much a leisure activity as it is an entire way of life,” wrote the anthropologist Kate Fox in Watching the English, nearly 20 years ago. Our dogs, in particular, have been an acceptable outlet for emotions and impulses we otherwise keep strictly controlled – our latent desire to be demonstratively affectionate, to be silly and chat to strangers. If this seems like an exaggeration, consider the different reactions you’d get if you struck up a conversation with someone in a park with a dog, versus someone on the train.\n",
|
||
"\n",
|
||
"Indeed, British society has been set up to accommodate these four-legged ambassadors. In the UK – unlike Australia, say, or New Zealand – dogs are not just permitted on public transport but often openly encouraged. Many pubs and shops display waggish signs, reading, “Dogs welcome, people tolerated”, and have treat jars on their counters. The other day, as I was waiting outside a cafe with a friend’s dog, the barista urged me to bring her inside.\n",
|
||
"\n",
|
||
"For years, Britons’ non-partisan passion for animals has been consistent amid dwindling common ground. But lately, rather than bringing out the best in us, our relationship with dogs is increasingly revealing us at our worst – and our supposed “best friends” are paying the price.\n",
|
||
"\n",
|
||
"As with so many latent traits in the national psyche, it all came unleashed with the pandemic, when many people thought they might as well make the most of all that time at home and in local parks with a dog. Between 2019 and 2022, the number of pet dogs in the UK rose from about nine million to 13 million. But there’s long been a seasonal surge around this time of year, substantial enough for the Dogs Trust charity to coin its famous slogan back in 1978: “A dog is for life, not just for Christmas.”\n",
|
||
"\n",
|
||
"Green spaces, meanwhile, have been steadily declining, and now many of us have returned to the office, just as those “pandemic dogs” are entering their troublesome teens. It’s a combustible combination and we are already seeing the results: the number of dog attacks recorded by police in England and Wales rose by more than a third between 2018 and 2022.\n",
|
||
"\n",
|
||
"At the same time, sites such as Pets4Homes.co.uk are replete with listings for dogs that, their owners accept “with deep regret”, are no longer suited to their lifestyles now that lockdown is over. It may have felt as if it would go on for ever, but was there ever any suggestion it was going to last the average dog’s lifespan of a decade?\n",
|
||
"\n",
|
||
"Living beings are being downgraded to mere commodities. You can see it reflected the “designer” breeds currently in fashion, the French bulldogs and pugs that look cute but spend their entire lives in discomfort. American XL bully dogs, now so controversial, are often sought after as a signifier of masculinity: roping an entire other life in service of our egos. Historically, many of Britain’s most popular breeds evolved to hunt vermin, retrieve game, herd, or otherwise do a specific job alongside humans; these days we are breeding and buying them for their aesthetic appeal.\n",
|
||
"\n",
|
||
"Underpinning this is a shift to what was long disdained as the “American” approach: treating pets as substitutes for children. In the past in Britain, dogs were treasured on their own terms, for the qualities that made them dogs, and as such, sometimes better than people: their friendliness and trustingness and how they opened up the world for us. They were indulged, certainly – by allowing them on to the sofa or in our beds, for instance, when we’d sworn we never would – but in ways that did not negate or deny their essential otherness.\n",
|
||
"\n",
|
||
"Now we have more dogs of such ludicrous proportions, they struggle to function as dogs at all – and we treat them accordingly, indulging them as we would ourselves: by buying unnecessary things. The total spend on pets in the UK has more than doubled in the past decade, reaching nearly £10bn last year. That huge rise has not just come from essentials: figures from the marketing agency Mintel suggest that one in five UK owners like their pet to “keep up with the latest trends” in grooming or, heaven forbid, outfits.\n",
|
||
"\n",
|
||
"These days pet “boutiques” – like the one that recently opened on my street in Norwich, selling “cold-pressed” dog treats, “paw and nose balms” and spa services – are a widespread sign of gentrification. But it’s not just wealthier areas: this summer in Great Yarmouth, one of the most deprived towns in the country, I noticed seaside stalls selling not one but two brands of ice-cream for dogs.\n",
|
||
"\n",
|
||
"It suggests dog-lovers have become untethered from their companions’ desires, let alone their needs. Let’s be honest: most dogs would be thrilled to bits to be eating a paper bag, or even their own faeces. And although they are certainly delighted by ice-cream, they don’t need it. But the ways we ourselves find solace – in consumption, by indulging our simian “treat brain” with things that we don’t need and/or aren’t good for us – we have simply extended to our pets.\n",
|
||
"\n",
|
||
"It’s hard not to see the rise in dog-friendly restaurants, cinema screenings and even churches as similar to the ludicrous expenditure: a way to placate the two-legged being on the end of the lead (regardless of the experience of others in the vicinity).\n",
|
||
"\n",
|
||
"Meanwhile, many dogs suffer daily deprivation, their worlds made small and monotonous by our busy modern schedules. These are social animals: it’s not natural for them to live without other dogs, let alone in an empty house for eight hours a day, Monday to Friday. If we are besieged by badly behaved dogs, the cause isn’t hard to pinpoint. Many behavioural problems can be alleviated and even addressed by sufficient exercise, supervision and consistent routines, but instead of organising our lives so that our pets may thrive, we show our love with a Halloween-themed cookie, or a new outfit for Instagram likes.\n",
|
||
"\n",
|
||
"It’s easy to forget that we are sharing our homes with a descendant of the wolf when it is dressed in sheep’s clothing; but the more we learn about animals, the clearer it becomes that our treatment of them, simultaneously adoring and alienated, means they are leading strange, unsatisfying simulacra of the lives they ought to lead.\n",
|
||
"\n",
|
||
"But for as long as we choose to share our lives with pets, the bar should be the same as for any relationship we value: being prepared to make sacrifices for their wellbeing, prioritising quality time and care, and loving them as they are – not for how they reflect on us, or how we’d like them to be.\n",
|
||
"\n",
|
||
"\n",
|
||
"\"\"\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "50d5afda-418f-436b-b467-004863193d4a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"input_article_two = \"\"\"Lee Parkin had been the proud owner of his terrier-spaniel cross Izzy for nearly 10 years when he stepped out for what would be his last walk with his beloved pet.\n",
|
||
"\n",
|
||
"He was walking Izzy near his home in Doncaster when an XL bully pounced on her, mounting a 20-minute attack and ultimately killing the dog in front of Parkin, who desperately intervened in vain.\n",
|
||
"\n",
|
||
"“It was such a nice day,” he said. “We were walking a normal field where I go, and I saw this dog loose. It appeared wild by its demeanour.”\n",
|
||
"\n",
|
||
"Parkin, 50, took his dog through a gate but found himself cornered. The dog approached and started circling them. And then, he says, “it just grabbed her”.\n",
|
||
"\n",
|
||
"“I’ve never encountered a bigger, stronger dog before in my life,” he says. “I’ve dealt with dogs attacking another dog before.”\n",
|
||
"\n",
|
||
"Lee Parkin and his dog Izzy\n",
|
||
"Lee Parkin and his dog Izzy. Photograph: Lee Parkin\n",
|
||
"Parkin did his best to fight the dog off. “I smashed both hands against it, I twisted its balls, I kicked it in its back end. It did nothing whatsoever. I just shouted for help.”\n",
|
||
"\n",
|
||
"At first there were no other people around, but “all of a sudden” there were about three other men, possibly including the owner, attempting to remove the animal.\n",
|
||
"\n",
|
||
"A passerby gave him a lift to the vet but Izzy was “bleeding so profusely” he could hear her choking on her own blood. Her bones had been crushed.\n",
|
||
"\n",
|
||
"The owners were handed a caution and the dog remains alive and living nearby.\n",
|
||
"\n",
|
||
"“It was dangerously out of control,” Parkin says of the XL bully. “I’ve been brought up with dogs all my life. There’s no place for this type of dog in society.”\n",
|
||
"\n",
|
||
"He welcomes the incoming ban on XL bullies but says he does not think it is enough and it will not work.\n",
|
||
"\n",
|
||
"He believes the majority of XL bully owners will not be fazed by the ban and will keep their dogs and ignore the new law and regulations.\n",
|
||
"\n",
|
||
"“The only effective thing that I’ve seen the police doing is turning up and shooting these dogs, which is what I think they should be doing,” Parkin adds.\n",
|
||
"\n",
|
||
"He was left with significant mental impacts from the attack and was subsequently diagnosed with post-traumatic stress disorder. He received counselling but still struggles with walking dogs, and often rises very early in the morning to avoid other owners. He also carries a dog spray.\n",
|
||
"\n",
|
||
"Marie Hay’s siberian husky, Naevia, survived a savage attack on the beach in Redcar on the North Yorkshire coast by two XL bullies – but has been left with life-changing injuries. Hay, like Parkin, has also been left with mental scars.\n",
|
||
"\n",
|
||
"The owner of the dog that attacked seven-year-old Naevia is facing a criminal trial next year.\n",
|
||
"\n",
|
||
"“We must have only been three minutes and the guy pulls up and basically he’s just got his dogs out of the car. They run down to the bottom of the beach and one starts to run towards Naevia.\n",
|
||
"\n",
|
||
"“The owner turned to me and said: ‘They’re friendly, don’t worry,’ because I must have pulled a face at the size of the dog.\n",
|
||
"\n",
|
||
"skip past newsletter promotion\n",
|
||
"Sign up to First Edition\n",
|
||
"\n",
|
||
"Free daily newsletter\n",
|
||
"Our morning email breaks down the key stories of the day, telling you what’s happening and why it matters\n",
|
||
"\n",
|
||
"Enter your email address\n",
|
||
"Sign up\n",
|
||
"Privacy Notice: Newsletters may contain info about charities, online ads, and content funded by outside parties. For more information see our Privacy Policy. We use Google reCaptcha to protect our website and the Google Privacy Policy and Terms of Service apply.\n",
|
||
"after newsletter promotion\n",
|
||
"“But then the first one jumped on Naevia’s chest and just started tearing into her.\n",
|
||
"\n",
|
||
"“So she was screaming, screaming like a baby. And then the other one just came out of nowhere. The attack lasted about 12 minutes.”\n",
|
||
"\n",
|
||
"An American bully XL with cropped ears. The practice is illegal in England and Wales, but it is still carried out by unscrupulous owners.\n",
|
||
"Perfect pets or dangerous dogs? The sudden, surprising rise of American bully XLs\n",
|
||
"Read more\n",
|
||
"Hay said several people attempted to remove the dogs but were initially unsuccessful. They attempted to lift the dogs by the legs and her 20-year-old daughter was bitten, as were other people who intervened.\n",
|
||
"\n",
|
||
"The owner eventually placed a harness on one of them and put it in the car, while Hay had to walk the other dog back to the car on a lead.\n",
|
||
"\n",
|
||
"Naevia lost 83% of her blood. “She was bleeding to death on the beach … she had hundreds of bite marks all over, she had an incision that ripped her chest open.\n",
|
||
"\n",
|
||
"“She had to have between eight and 10 operations. She’s now in kidney failure because of the stress that it caused on her kidneys. She had to have two blood transfusions.”\n",
|
||
"\n",
|
||
"Hay said the vet bills were more than £30,000, which she has been able to cover through donations on a fundraising website.\n",
|
||
"\n",
|
||
"Like Parkin, Hay struggles to go out for walks now, due to the stress caused by the incident.\n",
|
||
"\n",
|
||
"“I carry a full kit that I’ve made myself, it’s got a rape alarm, a couple of extra dog leads … I’m constantly in fear.”\n",
|
||
"\n",
|
||
"Hay says she is “100%” supportive of the new ban. She says she accepts that a dog’s behaviour is partly down to the owners but is confident the breed plays a part too.\"\"\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e328a903-d084-4d07-9b95-0a9196d7f719",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8861e1e7-b438-42e4-a16c-afffad738bd3",
|
||
"metadata": {},
|
||
"source": [
|
||
"## We start using Cognee by getting the prepared data and understanding what type of data it is, using LLMs"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "14ef9446-ec16-4657-9f83-a4c1c9ef2eba",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"id": "f97f11f1-4490-49ea-b193-1f858e72893b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from cognitive_architecture.modules.cognify.llm.classify_content import classify_into_categories\n",
|
||
"from cognitive_architecture.modules.cognify.llm.content_to_cog_layers import content_to_cog_layers\n",
|
||
"from cognitive_architecture.modules.cognify.llm.content_to_propositions import generate_graph\n",
|
||
"from cognitive_architecture.shared.data_models import ContentPrediction, KnowledgeGraph, CognitiveLayer"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "84da594a-459e-4ec5-9a5c-3a6cc3ab98af",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/d_/1x0yyl7n5g5cc8vlgchdr06m0000gn/T/ipykernel_42190/1302222322.py:1: RuntimeWarning: coroutine 'classify_into_categories' was never awaited\n",
|
||
" required_layers_one = await classify_into_categories(input_article_one, \"classify_content.txt\", ContentPrediction)\n",
|
||
"RuntimeWarning: Enable tracemalloc to get the object allocation traceback\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"required_layers_one = await classify_into_categories(input_article_one, \"classify_content.txt\", ContentPrediction)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "f56ae869-0dce-41f2-9db0-5f8d5eccba52",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"{'label': {'type': 'TEXT', 'subclass': [<TextSubclass.ARTICLES: 'Articles, essays, and reports'>]}}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(required_layers_one.dict())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "6e64e72f-d18b-4d21-85d6-55ed3621124a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"#note that you can provide your own Pydantic model that would represent your own categorisation\n",
|
||
"required_layers_two = await classify_into_categories(input_article_two, \"classify_content.txt\", ContentPrediction)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"id": "cdeb3631-fb55-4580-a5e5-d2a193a44e79",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"{'label': {'type': 'TEXT', 'subclass': [<TextSubclass.NEWS_STORIES: 'News stories and blog posts'>]}}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(required_layers_two.dict())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b236853e-ae7c-4cde-b2b6-d8199973c2a5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Now that we have content categories, it is time to provide them to our graph generation prompt"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "daa406c9-db89-43a9-a6b2-0ddc1e04bb22",
|
||
"metadata": {},
|
||
"source": [
|
||
"The goal of this section is to make sure that we can turn our information into a set of relevant cognitive layers.\n",
|
||
"Layers can be anything like \"word\", or \"sentence\" to some categories like \"movies\" or \"fruits\" \n",
|
||
"In this case, we let the LLM decide what the appropriate layers are."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"id": "fad0c4b0-cd61-4c3c-9964-47f019278060",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"{'data_type': 'text', 'context_name': 'Articles', 'layer_name': 'Articles, essays, and reports'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def transform_dict(original):\n",
|
||
" # Extract the first subclass from the list (assuming there could be more)\n",
|
||
" subclass_enum = original['label']['subclass'][0]\n",
|
||
"\n",
|
||
" # The data type is derived from 'type' and converted to lowercase\n",
|
||
" data_type = original['label']['type'].lower()\n",
|
||
" \n",
|
||
" # The context name is the name of the Enum member (e.g., 'NEWS_STORIES')\n",
|
||
" context_name = subclass_enum.name.replace('_', ' ').title()\n",
|
||
" \n",
|
||
" # The layer name is the value of the Enum member (e.g., 'News stories and blog posts')\n",
|
||
" layer_name = subclass_enum.value\n",
|
||
"\n",
|
||
" # Construct the new dictionary\n",
|
||
" new_dict = {\n",
|
||
" 'data_type': data_type,\n",
|
||
" 'context_name': context_name,\n",
|
||
" 'layer_name': layer_name\n",
|
||
" }\n",
|
||
"\n",
|
||
" return new_dict\n",
|
||
"\n",
|
||
"# Transform the original dictionary\n",
|
||
"transformed_dict_1 = transform_dict(required_layers_one.dict())\n",
|
||
"transformed_dict_2 = transform_dict(required_layers_two.dict())\n",
|
||
"\n",
|
||
"print(transformed_dict)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 27,
|
||
"id": "06b483bf-2fa0-414f-8253-27ffe9a2881c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/var/folders/d_/1x0yyl7n5g5cc8vlgchdr06m0000gn/T/ipykernel_42190/3144296709.py:1: RuntimeWarning: coroutine 'content_to_cog_layers' was never awaited\n",
|
||
" cognitive_layers_one = await content_to_cog_layers(\"generate_cog_layers.txt\", transformed_dict_1, response_model=CognitiveLayer)\n",
|
||
"RuntimeWarning: Enable tracemalloc to get the object allocation traceback\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"cognitive_layers_one = await content_to_cog_layers(\"generate_cog_layers.txt\", transformed_dict_1, response_model=CognitiveLayer)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "35461aff-fd80-4eb2-94b2-66c742db8e55",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"cognitive_layers_two = await content_to_cog_layers(\"generate_cog_layers.txt\", transformed_dict_2, response_model=CognitiveLayer))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "57e227bc-363d-437f-9430-c5d14aff6a31",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "4112063c-e94c-4876-965e-1785e0682329",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "7c5baaed-5447-425b-bc9c-03d071d66187",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "ee9c8dad-00ee-48ec-bcb5-8b9c74f91141",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "f4f59ef6-5cdd-478c-a96e-d2de2cc0e04f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "15631e68-61dc-4955-853f-52bf0cb93fbb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "36ef0bd6-9510-4265-a736-5e10ef1799d0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "8d377859-ed21-4408-ae72-79e8bc9a5309",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"id": "41d06ecb-83b9-4284-8d88-6a3f710cb457",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Extracted Layer Names: ['Cultural Norms', 'Emotional Outlet', 'Animal Welfare Concerns', 'Pandemic Influence', 'Consumerism and Pet Treatment', 'Social and Behavioral Implications', 'Policy and Infrastructure', 'Economic Factors', 'Long-term Commitment and Responsibility']\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"cognitive_layers_one = [layer_subgroup.name for layer_subgroup in cognitive_layers_one.cognitive_layers]\n",
|
||
"\n",
|
||
"print(\"Extracted Layer Names:\", cognitive_layers_one)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"id": "1a287a2a-2fb5-4ad3-a69e-80ed2e2ffa5a",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Extracted Layer Names: ['Incident Overview', 'Key Individuals', 'Geographic Context', 'Temporal Context', 'Legal and Societal Implications', 'Animal Behavior and Characteristics', 'Victim Impact', 'Community Response', 'Policy and Regulation', 'Economic Aspects', 'Narrative Tone and Style']\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"cognitive_layers_two = [layer_subgroup.name for layer_subgroup in cognitive_layers_two.cognitive_layers]\n",
|
||
"\n",
|
||
"print(\"Extracted Layer Names:\", cognitive_layers_two)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "609b1287-e0bf-42a5-856a-f2e0d859ea8b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "001466ea-d805-444e-9d70-5505d83eb980",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "07014c19-e981-4150-afc0-78800062f6e0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "619a765d-1fa9-49ce-9b6c-66e81a50e409",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"id": "dbce6243-7501-42d1-b944-f80811ae903d",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"id": "12a0d829-1387-4e32-84a1-1ad7b6edf0dc",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"id": "12bf38da-019d-4568-af21-21507c60f906",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"id": "4a19cc82-b892-47f3-99db-b70edccefda5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Layer processed is: Cultural Norms\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='For Britons, keeping pets is an entire way of life.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=2, description='Pets, especially dogs, serve as outlets for emotions and social interaction within controlled social norms.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=3, description='Dogs are encouraged and welcomed in public spaces such as pubs, shops, and public transport.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=4, description='The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=5, description='The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=6, description=\"Ownership of certain dog breeds is seen as a status symbol and a reflection of owner's identity.\", category='cultural norms', memory_type='semantic', created_at=None, summarized=None), Node(id=7, description='An increase in spending on non-essential pet products and services reflects a shift in how pets are viewed and treated.', category='cultural norms', memory_type='semantic', created_at=None, summarized=None)] edges=[Edge(source=1, target=2, description='forms part of', created_at=None, summarized=None), Edge(source=2, target=3, description='influences norms about', created_at=None, summarized=None), Edge(source=5, target=4, description='contributes to', created_at=None, summarized=None), Edge(source=6, target=4, description='impacts', created_at=None, summarized=None), Edge(source=7, target=5, description='associated with', created_at=None, summarized=None), Edge(source=1, target=5, description='underlies changes in', created_at=None, summarized=None), Edge(source=7, target=4, description='reflects negative aspects of', created_at=None, summarized=None)]\n",
|
||
"Layer processed is: Emotional Outlet\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='Britons use pets, especially dogs, as an emotional outlet for affection and social interaction.', category='concept', memory_type='semantic', created_at=None, summarized=None), Node(id=2, description='Pets in Britain are often treated as substitutes for children and valued for aesthetics, leading to questionable breeding practices.', category='concept', memory_type='semantic', created_at=None, summarized=None), Node(id=3, description='During the pandemic, the number of pet dogs in the UK rose from about nine million to 13 million, leading to issues such as increased dog attacks.', category='event', memory_type='episodic', created_at=None, summarized=None), Node(id=4, description='The COVID-19 pandemic led to a surge in pet ownership as people stayed home, but many pets are being rehomed as life returns to normal.', category='event', memory_type='episodic', created_at=None, summarized=None), Node(id=5, description='The rise in spending on non-essential pet items, like grooming and outfits, reflects a change in how Britons care for their pets.', category='concept', memory_type='semantic', created_at=None, summarized=None), Node(id=6, description='The shift from working at home to returning to the workplace has resulted in lifestyle changes not suitable for pet ownership.', category='event', memory_type='episodic', created_at=None, summarized=None), Node(id=7, description=\"Many dogs develop behavioral problems due to lack of exercise, supervision, and consistent routines, exacerbated by their owners' busy schedules.\", category='concept', memory_type='semantic', created_at=None, summarized=None)] edges=[Edge(source=1, target=2, description='The emotional outlet for affection using pets has evolved into treating pets similarly to children and focusing on aesthetic values.', created_at=None, summarized=None), Edge(source=3, target=4, description='The pandemic effect on staying home contributed to the pet overpopulation issue.', created_at=None, summarized=None), Edge(source=4, target=6, description='The end of the COVID-19 pandemic lockdowns has led to changing lifestyles that are impacting pet ownership.', created_at=None, summarized=None), Edge(source=6, target=7, description='Changes in daily routines and returning to the workplace have led to an increase in dog behavior issues.', created_at=None, summarized=None), Edge(source=1, target=5, description='The need for an emotional outlet through pet ownership has influenced consumption patterns, leading to spending on non-essential items for pets.', created_at=None, summarized=None)]\n",
|
||
"Layer processed is: Animal Welfare Concerns\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='Concerns over the welfare of animals, especially dogs, in British society', category='issue', memory_type='semantic', created_at=None, summarized=None), Node(id=2, description='The culture of pet ownership in Britain, with a focus on dogs being part of lifestyle and an outlet for emotions', category='culturalAspect', memory_type='semantic', created_at=None, summarized=None), Node(id=3, description='Increase in the number of pet dogs in the UK from about 9 million to 13 million between 2019 and 2022', category='event', memory_type='episodic', created_at=2022.0, summarized=None), Node(id=4, description=\"Challenges faced by 'pandemic dogs' as they enter adolescence and owners return to offices\", category='issue', memory_type='semantic', created_at=None, summarized=None), Node(id=5, description='Rise in dog attacks recorded by police in England and Wales by more than a third between 2018 and 2022', category='event', memory_type='episodic', created_at=2022.0, summarized=None), Node(id=6, description=\"Re-homing of dogs post lockdown as owners' lifestyles change and the pandemic ends\", category='issue', memory_type='semantic', created_at=None, summarized=None), Node(id=7, description='The trend of treating living beings, particularly dogs, as commodities rather than sentient beings', category='issue', memory_type='semantic', created_at=None, summarized=None), Node(id=8, description=\"Health problems associated with 'designer' dog breeds like French bulldogs and pugs\", category='issue', memory_type='semantic', created_at=None, summarized=None), Node(id=9, description='The use of certain dog breeds as status symbols, particularly regarding masculinity', category='socialAspect', memory_type='semantic', created_at=None, summarized=None), Node(id=10, description='A shift in pet ownership where pets are increasingly being treated as substitutes for children', category='trend', memory_type='semantic', created_at=None, summarized=None), Node(id=11, description='The growth of the pet industry in the UK, with spending reaching nearly £10bn', category='industry', memory_type='semantic', created_at=None, summarized=None), Node(id=12, description='Rising consumerism in pet ownership, with pets being indulged with non-essential items and services', category='trend', memory_type='semantic', created_at=None, summarized=None), Node(id=13, description='The negative impact of busy modern lifestyles on dog welfare, leading to behavioral problems', category='issue', memory_type='semantic', created_at=None, summarized=None)] edges=[Edge(source=2, target=1, description='The culture of pet ownership in Britain has led to concerns over animal welfare', created_at=None, summarized=None), Edge(source=3, target=4, description='The increase in pet dogs during the pandemic has resulted in challenges as situations normalize', created_at=None, summarized=None), Edge(source=4, target=5, description=\"The challenges faced by 'pandemic dogs' contribute to the rise in dog attacks\", created_at=None, summarized=None), Edge(source=6, target=7, description='Post-lockdown re-homing of dogs reflects the trend of dogs being treated as commodities', created_at=None, summarized=None), Edge(source=8, target=7, description=\"Health problems in 'designer' dog breeds are a consequence of treating dogs as commodities\", created_at=None, summarized=None), Edge(source=9, target=7, description='Certain dog breeds being used as status symbols is part of the commodification of dogs', created_at=None, summarized=None), Edge(source=10, target=12, description='The trend of treating pets as children has led to increased consumerism in pet ownership', created_at=None, summarized=None), Edge(source=11, target=12, description='Growth of the pet industry has fueled the rise of consumerism in pet ownership', created_at=None, summarized=None), Edge(source=12, target=13, description='The trend of pet consumerism can negatively impact the welfare of dogs amid busy modern lifestyles', created_at=None, summarized=None)]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"layer_1_graph = await generate_graph(input_article_one, cognitive_layers_one)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"id": "15dc7863-0f4c-47ae-89ef-2656e8478249",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Layer processed is: Incident Overview\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.', category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=2, description='Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=3, description=\"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\", category='event', memory_type='episodic', created_at=None, summarized=None), Node(id=4, description='The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.', category='location', memory_type='semantic', created_at=None, summarized=None), Node(id=5, description='An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.', category='animal', memory_type='semantic', created_at=None, summarized=None), Node(id=6, description='Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.', category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=7, description='Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=8, description='A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.', category='event', memory_type='episodic', created_at=None, summarized=None), Node(id=9, description='The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.', category='location', memory_type='semantic', created_at=None, summarized=None)] edges=[Edge(source=1, target=2, description='owned', created_at=None, summarized=None), Edge(source=1, target=3, description='involved in', created_at=None, summarized=None), Edge(source=2, target=3, description='killed in', created_at=None, summarized=None), Edge(source=3, target=4, description='took place in', created_at=None, summarized=None), Edge(source=3, target=5, description='involved', created_at=None, summarized=None), Edge(source=5, target=4, description='located in', created_at=None, summarized=None), Edge(source=6, target=7, description='owned', created_at=None, summarized=None), Edge(source=6, target=8, description='involved in', created_at=None, summarized=None), Edge(source=7, target=8, description='injured in', created_at=None, summarized=None), Edge(source=8, target=9, description='occurred at', created_at=None, summarized=None), Edge(source=5, target=9, description='related to attack at', created_at=None, summarized=None)]\n",
|
||
"Layer processed is: Key Individuals\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.', category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=2, description='Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=3, description='An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=4, description=\"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\", category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=5, description='Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.', category='animal', memory_type='episodic', created_at=None, summarized=None)] edges=[Edge(source=1, target=2, description='owned', created_at=None, summarized=None), Edge(source=3, target=2, description='attacked and killed', created_at=None, summarized=None), Edge(source=4, target=5, description='owned', created_at=None, summarized=None), Edge(source=3, target=5, description='attacked', created_at=None, summarized=None)]\n",
|
||
"Layer processed is: Geographic Context\n",
|
||
"Layer graph is: nodes=[Node(id=1, description='Lee Parkin, a 50-year-old man, owner of Izzy.', category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=2, description='Izzy, a terrier-spaniel cross owned by Lee Parkin.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=3, description='XL bully, a type of dog that attacked Izzy and Naevia.', category='animal', memory_type='semantic', created_at=None, summarized=None), Node(id=4, description='Marie Hay, owner of a Siberian Husky named Naevia.', category='person', memory_type='episodic', created_at=None, summarized=None), Node(id=5, description='Naevia, a seven-year-old Siberian Husky owned by Marie Hay.', category='animal', memory_type='episodic', created_at=None, summarized=None), Node(id=6, description=\"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\", category='location', memory_type='semantic', created_at=None, summarized=None), Node(id=7, description='Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.', category='location', memory_type='semantic', created_at=None, summarized=None)] edges=[Edge(source=1, target=2, description='owned', created_at=None, summarized=None), Edge(source=2, target=6, description='was killed in', created_at=None, summarized=None), Edge(source=5, target=7, description='was attacked at', created_at=None, summarized=None)]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"layer_2_graph = await generate_graph(input_article_two, cognitive_layers_two)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"id": "58644c64-7ef0-415f-8e41-e2edcf5fd15b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import networkx as nx\n",
|
||
"import uuid\n",
|
||
"from datetime import datetime\n",
|
||
"\n",
|
||
"def create_user_content_graph(user_id, custom_user_properties=None, required_layers=None, default_fields=None, existing_graph=None):\n",
|
||
"\n",
|
||
" category_name = required_layers.dict()['name']\n",
|
||
" subgroup_names = [subgroup['name'] for subgroup in required_layers.dict()['cognitive_subgroups']]\n",
|
||
"\n",
|
||
" \n",
|
||
" # Construct the additional_categories structure\n",
|
||
" additional_categories = {\n",
|
||
" category_name: subgroup_names\n",
|
||
"}\n",
|
||
"\n",
|
||
" # Define default fields for all nodes if not provided\n",
|
||
" if default_fields is None:\n",
|
||
" default_fields = {\n",
|
||
" 'created_at': datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"),\n",
|
||
" 'updated_at': datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n",
|
||
" }\n",
|
||
"\n",
|
||
" # Merge custom user properties with default properties; custom properties take precedence\n",
|
||
" user_properties = {**default_fields, **(custom_user_properties or {})}\n",
|
||
"\n",
|
||
" # Default content categories\n",
|
||
" content_categories = {\n",
|
||
" \"Temporal\": [\"Historical events\", \"Schedules and timelines\"],\n",
|
||
" \"Positional\": [\"Geographical locations\", \"Spatial data\"],\n",
|
||
" \"Propositions\": [\"Hypotheses and theories\", \"Claims and arguments\"],\n",
|
||
" \"Personalization\": [\"User preferences\", \"User information\"]\n",
|
||
" }\n",
|
||
"\n",
|
||
" # Update content categories with any additional categories provided\n",
|
||
" if additional_categories:\n",
|
||
" content_categories.update(additional_categories)\n",
|
||
"\n",
|
||
" G = existing_graph if existing_graph else nx.MultiDiGraph()\n",
|
||
"\n",
|
||
" # Check if the user node already exists, if not, add the user node with properties\n",
|
||
" if not G.has_node(user_id):\n",
|
||
" G.add_node(user_id, **user_properties)\n",
|
||
"\n",
|
||
" # Add or update content category nodes and their edges\n",
|
||
" for category, subclasses in content_categories.items():\n",
|
||
" category_properties = {**default_fields, 'type': 'category'}\n",
|
||
"\n",
|
||
" # Add or update the category node\n",
|
||
" if not G.has_node(category):\n",
|
||
" G.add_node(category, **category_properties)\n",
|
||
" G.add_edge(user_id, category, relationship='created')\n",
|
||
"\n",
|
||
" # Add or update subclass nodes and their edges\n",
|
||
" for subclass in subclasses:\n",
|
||
" # Using both category and subclass names to ensure uniqueness within categories\n",
|
||
" subclass_node_id = f\"{category}:{subclass}\"\n",
|
||
"\n",
|
||
" # Check if subclass node exists before adding, based on node content\n",
|
||
" if not any(subclass == data.get('content') for _, data in G.nodes(data=True)):\n",
|
||
" subclass_properties = {**default_fields, 'type': 'subclass', 'content': subclass}\n",
|
||
" G.add_node(subclass_node_id, **subclass_properties)\n",
|
||
" G.add_edge(category, subclass_node_id, relationship='includes')\n",
|
||
"\n",
|
||
" return G\n",
|
||
"\n",
|
||
" # # Add content category nodes and their edges\n",
|
||
" # for category, subclasses in content_categories.items():\n",
|
||
" # category_properties = {**default_fields, 'type': 'category'}\n",
|
||
" # G.add_node(category, **category_properties)\n",
|
||
" # G.add_edge(user_id, category, relationship='created')\n",
|
||
"\n",
|
||
" # # Add subclass nodes and their edges\n",
|
||
" # for subclass in subclasses:\n",
|
||
" # unique_id = str(uuid.uuid4())\n",
|
||
" # subclass_node_id = f\"{subclass} - {unique_id}\"\n",
|
||
" # subclass_properties = {**default_fields, 'type': 'subclass', 'content': subclass}\n",
|
||
" # G.add_node(subclass_node_id, **subclass_properties)\n",
|
||
" # G.add_edge(category, subclass_node_id, relationship='includes')\n",
|
||
"\n",
|
||
" # return G\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 264,
|
||
"id": "dd3f0e55-9f9d-4804-9ad6-31afd2088ab5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# G = None"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "2cc7c3bb-7cc0-453b-beab-2983a703ccda",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"id": "199ef3ab-5e73-40d2-b531-6a402edf3f17",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Nodes in the graph:\n",
|
||
"[('user123', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'username': 'exampleUser', 'email': 'user@example.com'}), ('Temporal', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'category'}), ('Temporal:Historical events', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Historical events'}), ('Temporal:Schedules and timelines', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Schedules and timelines'}), ('Positional', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'category'}), ('Positional:Geographical locations', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Geographical locations'}), ('Positional:Spatial data', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Spatial data'}), ('Propositions', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'category'}), ('Propositions:Hypotheses and theories', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Hypotheses and theories'}), ('Propositions:Claims and arguments', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Claims and arguments'}), ('Personalization', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'category'}), ('Personalization:User preferences', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'User preferences'}), ('Personalization:User information', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'User information'}), ('Natural Language Text', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'category'}), ('Natural Language Text:Articles, essays, and reports', {'created_at': '2024-03-04 20:16:14', 'updated_at': '2024-03-04 20:16:14', 'type': 'subclass', 'content': 'Articles, essays, and reports'})]\n",
|
||
"\n",
|
||
"Edges in the graph:\n",
|
||
"[('user123', 'Temporal', {'relationship': 'created'}), ('user123', 'Positional', {'relationship': 'created'}), ('user123', 'Propositions', {'relationship': 'created'}), ('user123', 'Personalization', {'relationship': 'created'}), ('user123', 'Natural Language Text', {'relationship': 'created'}), ('Temporal', 'Temporal:Historical events', {'relationship': 'includes'}), ('Temporal', 'Temporal:Schedules and timelines', {'relationship': 'includes'}), ('Positional', 'Positional:Geographical locations', {'relationship': 'includes'}), ('Positional', 'Positional:Spatial data', {'relationship': 'includes'}), ('Propositions', 'Propositions:Hypotheses and theories', {'relationship': 'includes'}), ('Propositions', 'Propositions:Claims and arguments', {'relationship': 'includes'}), ('Personalization', 'Personalization:User preferences', {'relationship': 'includes'}), ('Personalization', 'Personalization:User information', {'relationship': 'includes'}), ('Natural Language Text', 'Natural Language Text:Articles, essays, and reports', {'relationship': 'includes'})]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Example usage\n",
|
||
"user_id = 'user123'\n",
|
||
"custom_user_properties = {\n",
|
||
" 'username': 'exampleUser',\n",
|
||
" 'email': 'user@example.com'\n",
|
||
"}\n",
|
||
"\n",
|
||
"# additional_categories = {\n",
|
||
"# \"Natural Language Text\": [\"Articles, essays, and reports\", \"Books and manuscripts\"]\n",
|
||
"# }\n",
|
||
"\n",
|
||
"G = create_user_content_graph(user_id, custom_user_properties, required_layers_one)\n",
|
||
"\n",
|
||
"# Accessing the graph\n",
|
||
"print(\"Nodes in the graph:\")\n",
|
||
"print(G.nodes(data=True))\n",
|
||
"print(\"\\nEdges in the graph:\")\n",
|
||
"print(G.edges(data=True))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"id": "b3160a1d-a6ea-40ce-a521-37ad26d31ffb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"CognitiveCategory(name='Natural Language Text', cognitive_subgroups=[CognitiveLayerSubgroup(id=1, name='Articles, essays, and reports', data_type='TEXT')])"
|
||
]
|
||
},
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"required_layers_one"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "b254dfc9-ce85-4175-9d1e-c0f1ede67e3b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "a77b4f24-3046-4ab6-9ba1-c802096498df",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"id": "4dab2ff0-0d12-4a00-a4e4-fb901e701bd3",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"B = create_user_content_graph(user_id, custom_user_properties, required_layers_two, existing_graph=G)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 269,
|
||
"id": "627d42fd-d2ce-4ccd-a2a1-2f7ac2f463cf",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"MultiDiGraph with 16 nodes and 15 edges\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(B)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 28,
|
||
"id": "512f15be-0114-4c8c-9754-e82f2fa16344",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
" <iframe id=\"c0c61865-27b7-401e-b556-9ae95d3a43b8\" src=\"https://hub.graphistry.com/graph/graph.html?dataset=91e37ce03b8e4c27a059052620515d11&type=arrow&viztoken=56cd2bf0-4901-4ac1-8af3-2478ec74c9e1&usertag=1daaf574-pygraphistry-0.33.0&splashAfter=1709580519&info=true\"\n",
|
||
" allowfullscreen=\"true\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\"\n",
|
||
" oallowfullscreen=\"true\" msallowfullscreen=\"true\"\n",
|
||
" style=\"width:100%; height:500px; border: 1px solid #DDD; overflow: hidden\"\n",
|
||
" \n",
|
||
" >\n",
|
||
" </iframe>\n",
|
||
" \n",
|
||
" <script>\n",
|
||
" try {\n",
|
||
" $(\"#c0c61865-27b7-401e-b556-9ae95d3a43b8\").bind('mousewheel', function(e) { e.preventDefault(); });\n",
|
||
" } catch (e) { console.error('exn catching scroll', e); }\n",
|
||
" </script>\n",
|
||
" "
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"execution_count": 28,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import graphistry\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# Assuming Graphistry is already configured with API key\n",
|
||
"# graphistry.register(api=3, username='your_username', password='your_password')\n",
|
||
"\n",
|
||
"# Convert NetworkX graph to a Pandas DataFrame\n",
|
||
"edges = nx.to_pandas_edgelist(B)\n",
|
||
"graphistry.register(api=3, username='Vasilije1990', password='Q@HLdgv5SMUsGxy') \n",
|
||
"\n",
|
||
"# Visualize the graph\n",
|
||
"graphistry.edges(edges, 'source', 'target').plot()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "40866ff1-7c2d-4682-851c-de2442984cd5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"print(G)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "a3127724-3bef-416e-8631-ba6cea645196",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 29,
|
||
"id": "fe634bcb-0c00-4a2a-8bcb-687a2fcf847c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def append_data_to_graph(G, category_name, subclass_content, new_data, layer_uuid, layer_decomposition_uuid):\n",
|
||
" # Find the node ID for the subclass within the category\n",
|
||
" subclass_node_id = None\n",
|
||
" for node, data in G.nodes(data=True):\n",
|
||
" if subclass_content in node:\n",
|
||
" subclass_node_id = node\n",
|
||
"\n",
|
||
" print(subclass_node_id)\n",
|
||
"\n",
|
||
" if not subclass_node_id:\n",
|
||
" print(f\"Subclass '{subclass_content}' under category '{category_name}' not found in the graph.\")\n",
|
||
" return G\n",
|
||
"\n",
|
||
" # Mapping from old node IDs to new node IDs\n",
|
||
" node_id_mapping = {}\n",
|
||
"\n",
|
||
" # Add nodes from the Pydantic object\n",
|
||
" for node in new_data.nodes:\n",
|
||
" unique_node_id =uuid.uuid4()\n",
|
||
" new_node_id = f\"{node.description} - {str(layer_uuid)} - {str(layer_decomposition_uuid)} - {str(unique_node_id)}\"\n",
|
||
" G.add_node(new_node_id, \n",
|
||
" created_at=datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"), \n",
|
||
" updated_at=datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"), \n",
|
||
" description=node.description, \n",
|
||
" category=node.category, \n",
|
||
" memory_type=node.memory_type, \n",
|
||
" layer_uuid = str(layer_uuid),\n",
|
||
" layer_decomposition_uuid = str(layer_decomposition_uuid),\n",
|
||
" id = str(unique_node_id),\n",
|
||
" type='detail')\n",
|
||
" G.add_edge(subclass_node_id, new_node_id, relationship='detail')\n",
|
||
"\n",
|
||
" # Store the mapping from old node ID to new node ID\n",
|
||
" node_id_mapping[node.id] = new_node_id\n",
|
||
"\n",
|
||
" # Add edges from the Pydantic object using the new node IDs\n",
|
||
" for edge in new_data.edges:\n",
|
||
" # Use the mapping to get the new node IDs\n",
|
||
" source_node_id = node_id_mapping.get(edge.source)\n",
|
||
" target_node_id = node_id_mapping.get(edge.target)\n",
|
||
"\n",
|
||
" if source_node_id and target_node_id:\n",
|
||
" G.add_edge(source_node_id, target_node_id, description=edge.description, relationship='relation')\n",
|
||
" else:\n",
|
||
" print(f\"Could not find mapping for edge from {edge.source} to {edge.target}\")\n",
|
||
"\n",
|
||
" return G\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# Assuming `pydata` is your Pydantic model instance containing the nodes and edges information\n",
|
||
"# and `G` is your existing graph\n",
|
||
"\n",
|
||
"# # Here's how you would call this function:\n",
|
||
"# category_name = list(additional_categories.keys())[0]\n",
|
||
"# subclass_content = list(additional_categories.values())[0][0]\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "8d6a9eb5-387e-45a3-9dc9-5f8ac36fdd38",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 30,
|
||
"id": "7f1cde10-3d83-4800-9ef4-f8eaa39cf772",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"CognitiveCategory(name='Natural Language Text', cognitive_subgroups=[CognitiveLayerSubgroup(id=1, name='Articles, essays, and reports', data_type='TEXT')])"
|
||
]
|
||
},
|
||
"execution_count": 30,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"required_layers_one"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 31,
|
||
"id": "66630223-3ba0-4384-95d2-df2995e15271",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def append_to_graph(layer_graphs, required_layers, G):\n",
|
||
" layer_uuid = uuid.uuid4()\n",
|
||
" category_name = required_layers.dict()['name']\n",
|
||
" subgroup_names = [subgroup['name'] for subgroup in required_layers.dict()['cognitive_subgroups']]\n",
|
||
" for subgroup in subgroup_names:\n",
|
||
"\n",
|
||
" for layer_decomposition in layer_graphs:\n",
|
||
" layer_decomposition_uuid = uuid.uuid4()\n",
|
||
" F = append_data_to_graph(G, category_name[0], subgroup, layer_decomposition, layer_uuid, layer_decomposition_uuid)\n",
|
||
" \n",
|
||
" # Print updated graph for verification\n",
|
||
" print(\"Updated Nodes:\", F)\n",
|
||
" return F\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 32,
|
||
"id": "89ae9422-e26e-4180-be99-e21bae5229e5",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Natural Language Text:Articles, essays, and reports\n",
|
||
"Updated Nodes: MultiDiGraph with 24 nodes and 30 edges\n",
|
||
"Natural Language Text:Articles, essays, and reports\n",
|
||
"Updated Nodes: MultiDiGraph with 31 nodes and 42 edges\n",
|
||
"Natural Language Text:Articles, essays, and reports\n",
|
||
"Updated Nodes: MultiDiGraph with 44 nodes and 64 edges\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"\n",
|
||
"U = append_to_graph(layer_1_graph, required_layers_one, G)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 33,
|
||
"id": "b15feb48-6c19-4b18-81d8-d28651ea63f4",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Natural Language Text:News stories and blog posts\n",
|
||
"Updated Nodes: MultiDiGraph with 53 nodes and 84 edges\n",
|
||
"Natural Language Text:News stories and blog posts\n",
|
||
"Updated Nodes: MultiDiGraph with 58 nodes and 93 edges\n",
|
||
"Natural Language Text:News stories and blog posts\n",
|
||
"Updated Nodes: MultiDiGraph with 65 nodes and 103 edges\n",
|
||
"Natural Language Text:Personal narratives and stories\n",
|
||
"Updated Nodes: MultiDiGraph with 74 nodes and 123 edges\n",
|
||
"Natural Language Text:Personal narratives and stories\n",
|
||
"Updated Nodes: MultiDiGraph with 79 nodes and 132 edges\n",
|
||
"Natural Language Text:Personal narratives and stories\n",
|
||
"Updated Nodes: MultiDiGraph with 86 nodes and 142 edges\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"R = append_to_graph(layer_2_graph, required_layers_two, U)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 434,
|
||
"id": "17199837-35b8-4530-bf03-efbc3486b71d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
" <iframe id=\"4aa34af4-749b-4374-8f8a-1ad923fba0ba\" src=\"https://hub.graphistry.com/graph/graph.html?dataset=910057ce4aad4aa3ba4092b6f411e2c3&type=arrow&viztoken=0b35f51c-75ff-4dfe-b607-7c641c2982e0&usertag=1daaf574-pygraphistry-0.33.0&splashAfter=1709658314&info=true\"\n",
|
||
" allowfullscreen=\"true\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\"\n",
|
||
" oallowfullscreen=\"true\" msallowfullscreen=\"true\"\n",
|
||
" style=\"width:100%; height:500px; border: 1px solid #DDD; overflow: hidden\"\n",
|
||
" \n",
|
||
" >\n",
|
||
" </iframe>\n",
|
||
" \n",
|
||
" <script>\n",
|
||
" try {\n",
|
||
" $(\"#4aa34af4-749b-4374-8f8a-1ad923fba0ba\").bind('mousewheel', function(e) { e.preventDefault(); });\n",
|
||
" } catch (e) { console.error('exn catching scroll', e); }\n",
|
||
" </script>\n",
|
||
" "
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"execution_count": 434,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import graphistry\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# Assuming Graphistry is already configured with API key\n",
|
||
"# graphistry.register(api=3, username='your_username', password='your_password')\n",
|
||
"\n",
|
||
"# Convert NetworkX graph to a Pandas DataFrame\n",
|
||
"edges = nx.to_pandas_edgelist(R)\n",
|
||
"graphistry.register(api=3, username='Vasilije1990', password='Q@HLdgv5SMUsGxy') \n",
|
||
"\n",
|
||
"# Visualize the graph\n",
|
||
"graphistry.edges(edges, 'source', 'target').plot()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 315,
|
||
"id": "187f4220-45b1-43cc-9ab3-1e51264544c5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# print(R.nodes(data=True))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "f17dc174-f325-44b9-8fc7-761146aca2d0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e4eee8a7-5d3b-4848-9cdb-2b397e158519",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"## Utility to check if relationships are as they should be"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 36,
|
||
"id": "3adc8483-3207-44f1-abf5-275e925e04d4",
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Graph Relationships with Node Attributes:\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, username: exampleUser, email: user@example.com] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category]: Relationship [created]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, username: exampleUser, email: user@example.com] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category]: Relationship [created]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, username: exampleUser, email: user@example.com] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category]: Relationship [created]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, username: exampleUser, email: user@example.com] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category]: Relationship [created]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, username: exampleUser, email: user@example.com] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category]: Relationship [created]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Historical events]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Schedules and timelines]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Geographical locations]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Spatial data]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Hypotheses and theories]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Claims and arguments]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: User preferences]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: User information]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: category] -> Target [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories]: Relationship [includes]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: For Britons, keeping pets is an entire way of life., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: d443269f-44ff-4c10-ab4a-fab9ead0f904, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Pets, especially dogs, serve as outlets for emotions and social interaction within controlled social norms., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 2d588b35-062e-44e7-bbb2-1642ba0411e3, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Dogs are encouraged and welcomed in public spaces such as pubs, shops, and public transport., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 6a34c9bd-0dee-4db0-8258-86d2dd87303d, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 630b58dd-65f6-4d55-b3fc-67b59d696b4c, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 54db7b9e-5f2f-4287-9185-7214eb8f0ccd, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Ownership of certain dog breeds is seen as a status symbol and a reflection of owner's identity., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 53b9fc97-7c9e-46f1-ab2c-741405fa12ac, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: An increase in spending on non-essential pet products and services reflects a shift in how pets are viewed and treated., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: e221c461-f9c1-4d99-9ae5-25299b6e0516, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Britons use pets, especially dogs, as an emotional outlet for affection and social interaction., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 9dce0831-6e87-4fd9-93ba-e6944b22929b, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Pets in Britain are often treated as substitutes for children and valued for aesthetics, leading to questionable breeding practices., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: f800260d-6de1-4a5f-a501-f5d58f3258c3, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: During the pandemic, the number of pet dogs in the UK rose from about nine million to 13 million, leading to issues such as increased dog attacks., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: d4beb707-c19e-45fc-8fa9-387e4410282f, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic led to a surge in pet ownership as people stayed home, but many pets are being rehomed as life returns to normal., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 2f3e9b5f-17bf-4346-9cfc-104fdd467ff9, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in spending on non-essential pet items, like grooming and outfits, reflects a change in how Britons care for their pets., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: a75bae98-0748-4c4d-b807-5d3e19a9d638, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The shift from working at home to returning to the workplace has resulted in lifestyle changes not suitable for pet ownership., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 446383f7-ebbd-4ca1-891f-f0294bb11782, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Many dogs develop behavioral problems due to lack of exercise, supervision, and consistent routines, exacerbated by their owners' busy schedules., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 28368449-6e7a-4dd5-89fb-7dac13995c63, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Concerns over the welfare of animals, especially dogs, in British society, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 0caf3fc9-0ad7-4012-b278-89335518e5fe, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The culture of pet ownership in Britain, with a focus on dogs being part of lifestyle and an outlet for emotions, category: culturalAspect, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 1f26c212-a164-49f5-8029-c7a36519ef41, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Increase in the number of pet dogs in the UK from about 9 million to 13 million between 2019 and 2022, category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: b55e1f62-4294-456f-b42f-3283e3cb5a46, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Challenges faced by 'pandemic dogs' as they enter adolescence and owners return to offices, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 2ff11ce2-c8d9-45cd-aadb-e6875fb98708, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rise in dog attacks recorded by police in England and Wales by more than a third between 2018 and 2022, category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 67cba62f-e3ae-4db8-8c6e-b7be5e6149cb, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Re-homing of dogs post lockdown as owners' lifestyles change and the pandemic ends, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: ec1f580b-fadd-48bc-bf70-558cb6a2df05, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The trend of treating living beings, particularly dogs, as commodities rather than sentient beings, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4dd3cb46-ca57-46ca-9781-e8b917491720, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Health problems associated with 'designer' dog breeds like French bulldogs and pugs, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 8d2c705d-f257-4611-8baa-d73f37c77bbb, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The use of certain dog breeds as status symbols, particularly regarding masculinity, category: socialAspect, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 7ee6f0a7-cf4a-4659-a886-1f0b40d75b97, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: A shift in pet ownership where pets are increasingly being treated as substitutes for children, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: bce65459-262a-4a6b-a319-5deb8e6d0d96, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The growth of the pet industry in the UK, with spending reaching nearly £10bn, category: industry, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4343ab14-2ab3-4e94-b25c-cf1efe8b81c6, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rising consumerism in pet ownership, with pets being indulged with non-essential items and services, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 48d756f6-2b24-4f43-950e-c4670d14c8c4, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Articles, essays, and reports] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The negative impact of busy modern lifestyles on dog welfare, leading to behavioral problems, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 737bce65-bb12-4d3e-ad1e-ecd756e1e842, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0025c486-d9eb-4820-9b95-f48a97c51d9b, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 1531d1cb-3f68-46d7-a366-48d19f26bc93, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 2b18da1f-bd6f-49a6-b058-0387898dc5dc, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 5fddebc9-5092-46b6-9fa3-8c6170eb2e16, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 58b37c6f-1574-4b93-8ee5-16a22f01aa41, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: c7bea689-6862-482a-b156-4fc1be3fa07f, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 69dea290-4f26-495f-b6df-c994d6de5f69, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0f371d44-7362-434d-843f-813add8f25c6, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 49ab2d1b-9163-485f-81c8-8667fc707554, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 3a6f81c3-ecdc-483e-88dd-59068ae332b1, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 5560940a-8504-40bc-94d4-71aa399af5ab, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: ff3446b4-59ea-4ef9-969a-4afac7706aa6, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 9872ba50-8783-49b4-8fc4-9c53aae7cf57, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, a 50-year-old man, owner of Izzy., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 18b461fc-af3d-4e67-8cdb-3a02eb42192c, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 3a63bd68-0238-4865-9ea1-d7f88f58d6e8, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: XL bully, a type of dog that attacked Izzy and Naevia., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: b168a539-5398-4588-b4a4-6963c73b5526, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay, owner of a Siberian Husky named Naevia., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 99675528-5a7f-4941-b378-87b03e151cf4, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a seven-year-old Siberian Husky owned by Marie Hay., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 6ebecd15-37bd-4553-9c33-89df1fea543c, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 90cde4a1-7b75-4e61-844f-5a5f5e602690, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: News stories and blog posts] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: f866a9f5-3b89-418e-a94b-37923e0c4982, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b507af42-4ef7-4cb6-8df1-236d9abc4832, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 3a47799d-afa6-4ff0-b34b-627c81e46059, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b0a798cb-39c3-4cab-a67c-778bc4e2df21, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: c61a5496-bb75-445c-9ae4-a4cca37cd794, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: e0a882a8-f8b1-4a9f-b154-fa061eaa684b, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b086b7b2-daf2-47f2-9a1e-35812afd9313, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 1b10518f-3973-4f79-9dab-3ef238c2cbaa, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 59cca039-7f8b-4da5-b67d-51ac14e7c74c, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 7c87ffb5-0359-4421-8e03-61457119ca4b, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: f38b0084-b074-4e47-ae66-cccb9827a87f, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: a942b1b8-7ff2-4177-83ef-022bb69affac, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 88635a41-2a86-4bcc-bd34-affe7e302208, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 13374d73-bb3b-4e2f-8a94-ff90f0056970, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, a 50-year-old man, owner of Izzy., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 504729be-4ffc-493a-9cc8-1ae4ffc799e1, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 517b7476-e446-4986-8445-0a2cb14e543f, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: XL bully, a type of dog that attacked Izzy and Naevia., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 13a45934-879a-4fe4-90e9-0a5277e56297, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay, owner of a Siberian Husky named Naevia., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 3fce46e3-8006-4940-bc47-e011408f663c, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a seven-year-old Siberian Husky owned by Marie Hay., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 939465bc-c763-4122-9328-984c5c59f712, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 3cc5365b-b9e7-46d7-81c8-e125af634e32, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:16:14, updated_at: 2024-03-04 20:16:14, type: subclass, content: Personal narratives and stories] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 4aa02775-42e7-41d5-b91f-1f8a764657ed, type: detail]: Relationship [detail]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: For Britons, keeping pets is an entire way of life., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: d443269f-44ff-4c10-ab4a-fab9ead0f904, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Pets, especially dogs, serve as outlets for emotions and social interaction within controlled social norms., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 2d588b35-062e-44e7-bbb2-1642ba0411e3, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: For Britons, keeping pets is an entire way of life., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: d443269f-44ff-4c10-ab4a-fab9ead0f904, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 54db7b9e-5f2f-4287-9185-7214eb8f0ccd, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Pets, especially dogs, serve as outlets for emotions and social interaction within controlled social norms., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 2d588b35-062e-44e7-bbb2-1642ba0411e3, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Dogs are encouraged and welcomed in public spaces such as pubs, shops, and public transport., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 6a34c9bd-0dee-4db0-8258-86d2dd87303d, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 54db7b9e-5f2f-4287-9185-7214eb8f0ccd, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 630b58dd-65f6-4d55-b3fc-67b59d696b4c, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Ownership of certain dog breeds is seen as a status symbol and a reflection of owner's identity., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 53b9fc97-7c9e-46f1-ab2c-741405fa12ac, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 630b58dd-65f6-4d55-b3fc-67b59d696b4c, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: An increase in spending on non-essential pet products and services reflects a shift in how pets are viewed and treated., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: e221c461-f9c1-4d99-9ae5-25299b6e0516, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 54db7b9e-5f2f-4287-9185-7214eb8f0ccd, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: An increase in spending on non-essential pet products and services reflects a shift in how pets are viewed and treated., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: e221c461-f9c1-4d99-9ae5-25299b6e0516, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare., category: cultural norms, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: 67200cb4-16fc-40f9-b231-c9e720aeb14a, id: 630b58dd-65f6-4d55-b3fc-67b59d696b4c, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Britons use pets, especially dogs, as an emotional outlet for affection and social interaction., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 9dce0831-6e87-4fd9-93ba-e6944b22929b, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Pets in Britain are often treated as substitutes for children and valued for aesthetics, leading to questionable breeding practices., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: f800260d-6de1-4a5f-a501-f5d58f3258c3, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Britons use pets, especially dogs, as an emotional outlet for affection and social interaction., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 9dce0831-6e87-4fd9-93ba-e6944b22929b, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The rise in spending on non-essential pet items, like grooming and outfits, reflects a change in how Britons care for their pets., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: a75bae98-0748-4c4d-b807-5d3e19a9d638, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: During the pandemic, the number of pet dogs in the UK rose from about nine million to 13 million, leading to issues such as increased dog attacks., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: d4beb707-c19e-45fc-8fa9-387e4410282f, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic led to a surge in pet ownership as people stayed home, but many pets are being rehomed as life returns to normal., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 2f3e9b5f-17bf-4346-9cfc-104fdd467ff9, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The COVID-19 pandemic led to a surge in pet ownership as people stayed home, but many pets are being rehomed as life returns to normal., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 2f3e9b5f-17bf-4346-9cfc-104fdd467ff9, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The shift from working at home to returning to the workplace has resulted in lifestyle changes not suitable for pet ownership., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 446383f7-ebbd-4ca1-891f-f0294bb11782, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The shift from working at home to returning to the workplace has resulted in lifestyle changes not suitable for pet ownership., category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 446383f7-ebbd-4ca1-891f-f0294bb11782, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Many dogs develop behavioral problems due to lack of exercise, supervision, and consistent routines, exacerbated by their owners' busy schedules., category: concept, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: ccf6645e-9fad-441b-821d-b1d47b93ebca, id: 28368449-6e7a-4dd5-89fb-7dac13995c63, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The culture of pet ownership in Britain, with a focus on dogs being part of lifestyle and an outlet for emotions, category: culturalAspect, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 1f26c212-a164-49f5-8029-c7a36519ef41, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Concerns over the welfare of animals, especially dogs, in British society, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 0caf3fc9-0ad7-4012-b278-89335518e5fe, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Increase in the number of pet dogs in the UK from about 9 million to 13 million between 2019 and 2022, category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: b55e1f62-4294-456f-b42f-3283e3cb5a46, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Challenges faced by 'pandemic dogs' as they enter adolescence and owners return to offices, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 2ff11ce2-c8d9-45cd-aadb-e6875fb98708, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Challenges faced by 'pandemic dogs' as they enter adolescence and owners return to offices, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 2ff11ce2-c8d9-45cd-aadb-e6875fb98708, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rise in dog attacks recorded by police in England and Wales by more than a third between 2018 and 2022, category: event, memory_type: episodic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 67cba62f-e3ae-4db8-8c6e-b7be5e6149cb, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Re-homing of dogs post lockdown as owners' lifestyles change and the pandemic ends, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: ec1f580b-fadd-48bc-bf70-558cb6a2df05, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The trend of treating living beings, particularly dogs, as commodities rather than sentient beings, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4dd3cb46-ca57-46ca-9781-e8b917491720, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Health problems associated with 'designer' dog breeds like French bulldogs and pugs, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 8d2c705d-f257-4611-8baa-d73f37c77bbb, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The trend of treating living beings, particularly dogs, as commodities rather than sentient beings, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4dd3cb46-ca57-46ca-9781-e8b917491720, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The use of certain dog breeds as status symbols, particularly regarding masculinity, category: socialAspect, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 7ee6f0a7-cf4a-4659-a886-1f0b40d75b97, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The trend of treating living beings, particularly dogs, as commodities rather than sentient beings, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4dd3cb46-ca57-46ca-9781-e8b917491720, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: A shift in pet ownership where pets are increasingly being treated as substitutes for children, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: bce65459-262a-4a6b-a319-5deb8e6d0d96, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rising consumerism in pet ownership, with pets being indulged with non-essential items and services, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 48d756f6-2b24-4f43-950e-c4670d14c8c4, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The growth of the pet industry in the UK, with spending reaching nearly £10bn, category: industry, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 4343ab14-2ab3-4e94-b25c-cf1efe8b81c6, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rising consumerism in pet ownership, with pets being indulged with non-essential items and services, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 48d756f6-2b24-4f43-950e-c4670d14c8c4, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: Rising consumerism in pet ownership, with pets being indulged with non-essential items and services, category: trend, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 48d756f6-2b24-4f43-950e-c4670d14c8c4, type: detail] -> Target [created_at: 2024-03-04 20:28:36, updated_at: 2024-03-04 20:28:36, description: The negative impact of busy modern lifestyles on dog welfare, leading to behavioral problems, category: issue, memory_type: semantic, layer_uuid: 66009783-f985-47e5-9553-d60573e7cc33, layer_decomposition_uuid: d0c2bd1c-7cec-4e5a-af13-dbb655623dda, id: 737bce65-bb12-4d3e-ad1e-ecd756e1e842, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0025c486-d9eb-4820-9b95-f48a97c51d9b, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 1531d1cb-3f68-46d7-a366-48d19f26bc93, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0025c486-d9eb-4820-9b95-f48a97c51d9b, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 2b18da1f-bd6f-49a6-b058-0387898dc5dc, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 1531d1cb-3f68-46d7-a366-48d19f26bc93, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 2b18da1f-bd6f-49a6-b058-0387898dc5dc, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 2b18da1f-bd6f-49a6-b058-0387898dc5dc, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 5fddebc9-5092-46b6-9fa3-8c6170eb2e16, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 2b18da1f-bd6f-49a6-b058-0387898dc5dc, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 5fddebc9-5092-46b6-9fa3-8c6170eb2e16, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0f371d44-7362-434d-843f-813add8f25c6, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 58b37c6f-1574-4b93-8ee5-16a22f01aa41, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: c7bea689-6862-482a-b156-4fc1be3fa07f, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 58b37c6f-1574-4b93-8ee5-16a22f01aa41, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 69dea290-4f26-495f-b6df-c994d6de5f69, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: c7bea689-6862-482a-b156-4fc1be3fa07f, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 69dea290-4f26-495f-b6df-c994d6de5f69, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 69dea290-4f26-495f-b6df-c994d6de5f69, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 83b60dcf-0a04-474f-962b-121cc518e610, id: 0f371d44-7362-434d-843f-813add8f25c6, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 49ab2d1b-9163-485f-81c8-8667fc707554, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 3a6f81c3-ecdc-483e-88dd-59068ae332b1, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 5560940a-8504-40bc-94d4-71aa399af5ab, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 3a6f81c3-ecdc-483e-88dd-59068ae332b1, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 5560940a-8504-40bc-94d4-71aa399af5ab, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 9872ba50-8783-49b4-8fc4-9c53aae7cf57, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: ff3446b4-59ea-4ef9-969a-4afac7706aa6, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 6fb85c94-f488-4f31-8e7c-a5905580a78c, id: 9872ba50-8783-49b4-8fc4-9c53aae7cf57, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, a 50-year-old man, owner of Izzy., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 18b461fc-af3d-4e67-8cdb-3a02eb42192c, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 3a63bd68-0238-4865-9ea1-d7f88f58d6e8, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 3a63bd68-0238-4865-9ea1-d7f88f58d6e8, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 90cde4a1-7b75-4e61-844f-5a5f5e602690, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a seven-year-old Siberian Husky owned by Marie Hay., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: 6ebecd15-37bd-4553-9c33-89df1fea543c, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f, id: f866a9f5-3b89-418e-a94b-37923e0c4982, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b507af42-4ef7-4cb6-8df1-236d9abc4832, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 3a47799d-afa6-4ff0-b34b-627c81e46059, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b507af42-4ef7-4cb6-8df1-236d9abc4832, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 3a47799d-afa6-4ff0-b34b-627c81e46059, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 3a47799d-afa6-4ff0-b34b-627c81e46059, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b0a798cb-39c3-4cab-a67c-778bc4e2df21, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 3a47799d-afa6-4ff0-b34b-627c81e46059, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: c61a5496-bb75-445c-9ae4-a4cca37cd794, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: c61a5496-bb75-445c-9ae4-a4cca37cd794, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b0a798cb-39c3-4cab-a67c-778bc4e2df21, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin., category: animal, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: c61a5496-bb75-445c-9ae4-a4cca37cd794, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 59cca039-7f8b-4da5-b67d-51ac14e7c74c, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: e0a882a8-f8b1-4a9f-b154-fa061eaa684b, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b086b7b2-daf2-47f2-9a1e-35812afd9313, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: e0a882a8-f8b1-4a9f-b154-fa061eaa684b, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 1b10518f-3973-4f79-9dab-3ef238c2cbaa, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: b086b7b2-daf2-47f2-9a1e-35812afd9313, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 1b10518f-3973-4f79-9dab-3ef238c2cbaa, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies., category: event, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 1b10518f-3973-4f79-9dab-3ef238c2cbaa, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 92562711-f2a9-4ce6-9c7d-d5226080f982, id: 59cca039-7f8b-4da5-b67d-51ac14e7c74c, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 7c87ffb5-0359-4421-8e03-61457119ca4b, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: f38b0084-b074-4e47-ae66-cccb9827a87f, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: a942b1b8-7ff2-4177-83ef-022bb69affac, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: f38b0084-b074-4e47-ae66-cccb9827a87f, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: a942b1b8-7ff2-4177-83ef-022bb69affac, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 13374d73-bb3b-4e2f-8a94-ff90f0056970, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 88635a41-2a86-4bcc-bd34-affe7e302208, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 84fa9b73-12c0-4486-a0eb-3a03a81ca135, id: 13374d73-bb3b-4e2f-8a94-ff90f0056970, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Lee Parkin, a 50-year-old man, owner of Izzy., category: person, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 504729be-4ffc-493a-9cc8-1ae4ffc799e1, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 517b7476-e446-4986-8445-0a2cb14e543f, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Izzy, a terrier-spaniel cross owned by Lee Parkin., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 517b7476-e446-4986-8445-0a2cb14e543f, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 3cc5365b-b9e7-46d7-81c8-e125af634e32, type: detail]: Relationship [relation]\n",
|
||
"Source [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Naevia, a seven-year-old Siberian Husky owned by Marie Hay., category: animal, memory_type: episodic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 939465bc-c763-4122-9328-984c5c59f712, type: detail] -> Target [created_at: 2024-03-04 20:28:37, updated_at: 2024-03-04 20:28:37, description: Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies., category: location, memory_type: semantic, layer_uuid: d0fde4d0-c358-44b2-b698-a19314a336e0, layer_decomposition_uuid: 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d, id: 4aa02775-42e7-41d5-b91f-1f8a764657ed, type: detail]: Relationship [relation]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def list_graph_relationships_with_node_attributes(graph):\n",
|
||
" print(\"Graph Relationships with Node Attributes:\")\n",
|
||
" for source, target, data in graph.edges(data=True):\n",
|
||
" # Get source and target node attributes\n",
|
||
" source_attrs = graph.nodes[source]\n",
|
||
" target_attrs = graph.nodes[target]\n",
|
||
" relationship = data.get('relationship', 'No relationship specified')\n",
|
||
"\n",
|
||
" # Format and print source and target node attributes along with the relationship\n",
|
||
" source_attrs_formatted = ', '.join([f\"{k}: {v}\" for k, v in source_attrs.items()])\n",
|
||
" target_attrs_formatted = ', '.join([f\"{k}: {v}\" for k, v in target_attrs.items()])\n",
|
||
" \n",
|
||
" print(f\"Source [{source_attrs_formatted}] -> Target [{target_attrs_formatted}]: Relationship [{relationship}]\")\n",
|
||
"\n",
|
||
"# Assuming 'F' is your graph instance\n",
|
||
"list_graph_relationships_with_node_attributes(G)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "734a1d1d-a583-4d3f-a1e2-a33f339bfaf0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "1ace3c0f-93f3-47aa-81d6-0e3297971b5a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "de96473f-620c-4d14-8e43-380507d06988",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Collecting qdrant-client\n",
|
||
" Using cached qdrant_client-1.7.3-py3-none-any.whl.metadata (9.3 kB)\n",
|
||
"Collecting grpcio>=1.41.0 (from qdrant-client)\n",
|
||
" Downloading grpcio-1.62.0-cp311-cp311-macosx_10_10_universal2.whl.metadata (4.0 kB)\n",
|
||
"Collecting grpcio-tools>=1.41.0 (from qdrant-client)\n",
|
||
" Downloading grpcio_tools-1.62.0-cp311-cp311-macosx_10_10_universal2.whl.metadata (6.2 kB)\n",
|
||
"Requirement already satisfied: httpx>=0.14.0 in ./.venv/lib/python3.11/site-packages (from httpx[http2]>=0.14.0->qdrant-client) (0.27.0)\n",
|
||
"Requirement already satisfied: numpy>=1.21 in ./.venv/lib/python3.11/site-packages (from qdrant-client) (1.26.4)\n",
|
||
"Collecting portalocker<3.0.0,>=2.7.0 (from qdrant-client)\n",
|
||
" Using cached portalocker-2.8.2-py3-none-any.whl.metadata (8.5 kB)\n",
|
||
"Requirement already satisfied: pydantic>=1.10.8 in ./.venv/lib/python3.11/site-packages (from qdrant-client) (2.6.2)\n",
|
||
"Requirement already satisfied: urllib3<3,>=1.26.14 in ./.venv/lib/python3.11/site-packages (from qdrant-client) (2.0.7)\n",
|
||
"Collecting protobuf<5.0dev,>=4.21.6 (from grpcio-tools>=1.41.0->qdrant-client)\n",
|
||
" Downloading protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl.metadata (541 bytes)\n",
|
||
"Requirement already satisfied: setuptools in ./.venv/lib/python3.11/site-packages (from grpcio-tools>=1.41.0->qdrant-client) (69.1.1)\n",
|
||
"Requirement already satisfied: anyio in ./.venv/lib/python3.11/site-packages (from httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (3.7.1)\n",
|
||
"Requirement already satisfied: certifi in ./.venv/lib/python3.11/site-packages (from httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (2024.2.2)\n",
|
||
"Requirement already satisfied: httpcore==1.* in ./.venv/lib/python3.11/site-packages (from httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (1.0.4)\n",
|
||
"Requirement already satisfied: idna in ./.venv/lib/python3.11/site-packages (from httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (3.6)\n",
|
||
"Requirement already satisfied: sniffio in ./.venv/lib/python3.11/site-packages (from httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (1.3.1)\n",
|
||
"Requirement already satisfied: h11<0.15,>=0.13 in ./.venv/lib/python3.11/site-packages (from httpcore==1.*->httpx>=0.14.0->httpx[http2]>=0.14.0->qdrant-client) (0.14.0)\n",
|
||
"Collecting h2<5,>=3 (from httpx[http2]>=0.14.0->qdrant-client)\n",
|
||
" Using cached h2-4.1.0-py3-none-any.whl.metadata (3.6 kB)\n",
|
||
"Requirement already satisfied: annotated-types>=0.4.0 in ./.venv/lib/python3.11/site-packages (from pydantic>=1.10.8->qdrant-client) (0.6.0)\n",
|
||
"Requirement already satisfied: pydantic-core==2.16.3 in ./.venv/lib/python3.11/site-packages (from pydantic>=1.10.8->qdrant-client) (2.16.3)\n",
|
||
"Requirement already satisfied: typing-extensions>=4.6.1 in ./.venv/lib/python3.11/site-packages (from pydantic>=1.10.8->qdrant-client) (4.10.0)\n",
|
||
"Collecting hyperframe<7,>=6.0 (from h2<5,>=3->httpx[http2]>=0.14.0->qdrant-client)\n",
|
||
" Using cached hyperframe-6.0.1-py3-none-any.whl.metadata (2.7 kB)\n",
|
||
"Collecting hpack<5,>=4.0 (from h2<5,>=3->httpx[http2]>=0.14.0->qdrant-client)\n",
|
||
" Using cached hpack-4.0.0-py3-none-any.whl (32 kB)\n",
|
||
"Using cached qdrant_client-1.7.3-py3-none-any.whl (206 kB)\n",
|
||
"Downloading grpcio-1.62.0-cp311-cp311-macosx_10_10_universal2.whl (10.0 MB)\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.0/10.0 MB\u001b[0m \u001b[31m19.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m0:01\u001b[0m\n",
|
||
"\u001b[?25hDownloading grpcio_tools-1.62.0-cp311-cp311-macosx_10_10_universal2.whl (5.1 MB)\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.1/5.1 MB\u001b[0m \u001b[31m21.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n",
|
||
"\u001b[?25hUsing cached portalocker-2.8.2-py3-none-any.whl (17 kB)\n",
|
||
"Using cached h2-4.1.0-py3-none-any.whl (57 kB)\n",
|
||
"Downloading protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl (394 kB)\n",
|
||
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m394.2/394.2 kB\u001b[0m \u001b[31m13.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
|
||
"\u001b[?25hUsing cached hyperframe-6.0.1-py3-none-any.whl (12 kB)\n",
|
||
"Installing collected packages: protobuf, portalocker, hyperframe, hpack, grpcio, h2, grpcio-tools, qdrant-client\n",
|
||
"Successfully installed grpcio-1.62.0 grpcio-tools-1.62.0 h2-4.1.0 hpack-4.0.0 hyperframe-6.0.1 portalocker-2.8.2 protobuf-4.25.3 qdrant-client-1.7.3\n",
|
||
"\n",
|
||
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.0\u001b[0m\n",
|
||
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"!pip install qdrant-client"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 294,
|
||
"id": "c5e2c97c-9b80-4e4b-a80c-940e5428419e",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# def extract_node_descriptions(data):\n",
|
||
"# descriptions = []\n",
|
||
"# for node_id, attributes in data:\n",
|
||
"# # Check if both 'description' and 'layer_id' are in the attributes\n",
|
||
"# if 'description' in attributes and 'layer_id' in attributes and 'layer_uuid' in attributes:\n",
|
||
"# descriptions.append({\n",
|
||
"# 'node_id': node_id, \n",
|
||
"# 'description': attributes['description'],\n",
|
||
"# 'layer_uuid': attributes['layer_uuid'] # Include layer_id\n",
|
||
"# })\n",
|
||
"# return descriptions\n",
|
||
"\n",
|
||
"# # Extract the node descriptions\n",
|
||
"# node_descriptions = extract_node_descriptions(R.nodes(data=True))\n",
|
||
"\n",
|
||
"# # Display the results (displaying a subset for brevity)\n",
|
||
"# for item in node_descriptions[:5]: # Adjust the slice as needed for display\n",
|
||
"# print(item)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 303,
|
||
"id": "a0a7fac1-0e8b-41de-b33f-435496ec1865",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# descriptions = []\n",
|
||
"# for node_id, attributes in R.nodes(data=True):\n",
|
||
"# if 'description' in attributes:\n",
|
||
"# descriptions.append({'node_id': node_id, 'description': attributes['description'], 'layer_uuid': attributes['layer_uuid'], 'layer_decomposition_uuid': attributes['layer_decomposition_uuid']})\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "fee432d0-75de-43b2-9a3b-3b8844a2cf19",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 37,
|
||
"id": "c214724e-4bb3-4b75-b104-77ac98348394",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"{'node_id': 'd443269f-44ff-4c10-ab4a-fab9ead0f904', 'description': 'For Britons, keeping pets is an entire way of life.', 'layer_uuid': '66009783-f985-47e5-9553-d60573e7cc33', 'layer_decomposition_uuid': '67200cb4-16fc-40f9-b231-c9e720aeb14a'}\n",
|
||
"{'node_id': '2d588b35-062e-44e7-bbb2-1642ba0411e3', 'description': 'Pets, especially dogs, serve as outlets for emotions and social interaction within controlled social norms.', 'layer_uuid': '66009783-f985-47e5-9553-d60573e7cc33', 'layer_decomposition_uuid': '67200cb4-16fc-40f9-b231-c9e720aeb14a'}\n",
|
||
"{'node_id': '6a34c9bd-0dee-4db0-8258-86d2dd87303d', 'description': 'Dogs are encouraged and welcomed in public spaces such as pubs, shops, and public transport.', 'layer_uuid': '66009783-f985-47e5-9553-d60573e7cc33', 'layer_decomposition_uuid': '67200cb4-16fc-40f9-b231-c9e720aeb14a'}\n",
|
||
"{'node_id': '630b58dd-65f6-4d55-b3fc-67b59d696b4c', 'description': 'The rise in pet ownership and the desire for designer breeds can lead to negative outcomes for animal welfare.', 'layer_uuid': '66009783-f985-47e5-9553-d60573e7cc33', 'layer_decomposition_uuid': '67200cb4-16fc-40f9-b231-c9e720aeb14a'}\n",
|
||
"{'node_id': '54db7b9e-5f2f-4287-9185-7214eb8f0ccd', 'description': 'The COVID-19 pandemic saw a surge in pet ownership, leading to growing concerns about pet abandonment and the treatment of pets as commodities.', 'layer_uuid': '66009783-f985-47e5-9553-d60573e7cc33', 'layer_decomposition_uuid': '67200cb4-16fc-40f9-b231-c9e720aeb14a'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"def extract_node_descriptions(data):\n",
|
||
" descriptions = []\n",
|
||
" for node_id, attributes in data:\n",
|
||
" if 'description' in attributes:\n",
|
||
" descriptions.append({'node_id': attributes['id'], 'description': attributes['description'], 'layer_uuid': attributes['layer_uuid'], 'layer_decomposition_uuid': attributes['layer_decomposition_uuid'] })\n",
|
||
" return descriptions\n",
|
||
"\n",
|
||
"# Extract the node descriptions\n",
|
||
"node_descriptions = extract_node_descriptions(R.nodes(data=True))\n",
|
||
"\n",
|
||
"# Display the results (displaying a subset for brevity)\n",
|
||
"for item in node_descriptions[:5]: # Adjust the slice as needed for display\n",
|
||
" print(item)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "74b65ea2-b325-4bed-8286-0f2030462794",
|
||
"metadata": {},
|
||
"source": [
|
||
"## HOW TO CONNECT INTERLAYERS WITH SEMANTIC SEARCH"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 295,
|
||
"id": "7adbc416-bca9-47e2-9bfc-7ab5de5aeabf",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"## Idea here is to pass descriptions to the vectorstore and embed them, then do a semantic search for each description to other one and retrieve only those between layers that have a connection\n",
|
||
"## We load each layer as a qdrant collection and then search the terms in other collection to establish links between layers, after that is done, we save the relevant IDs and create connections in the graph"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 187,
|
||
"id": "65178488-6424-4f40-8420-edf921ff1678",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from openai import OpenAI\n",
|
||
"client = OpenAI()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 225,
|
||
"id": "d8e722e9-bffe-430f-bedd-b38dfbe1774e",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from openai import AsyncOpenAI\n",
|
||
"client = AsyncOpenAI()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 238,
|
||
"id": "19ba87f3-a9d9-43d6-8a8d-b2491ace5330",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def get_embedding_b(text):\n",
|
||
" client = OpenAI()\n",
|
||
" response = client.embeddings.create(\n",
|
||
" input=[text],\n",
|
||
" model=\"text-embedding-3-large\" # Choose an appropriate engine for your use case\n",
|
||
" ).data[0].embedding\n",
|
||
"\n",
|
||
" return response"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "8812936f-2b3c-4084-a75a-a79ac8726a62",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "599cd4f9-4f8d-4321-83a5-fa153d029115",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "ModuleNotFoundError",
|
||
"evalue": "No module named 'cognitive_architecture.openai_tools'",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
|
||
"Cell \u001b[0;32mIn[4], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01masyncio\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcognitive_architecture\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mopenai_tools\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m async_get_embedding_with_backoff\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Ensure your async function is defined in a cell above or within this cell\u001b[39;00m\n\u001b[1;32m 4\u001b[0m \n\u001b[1;32m 5\u001b[0m \u001b[38;5;66;03m# async def run_async_function(text):\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 10\u001b[0m \n\u001b[1;32m 11\u001b[0m \u001b[38;5;66;03m# Use asyncio.run() to run the async function\u001b[39;00m\n\u001b[1;32m 12\u001b[0m loop \u001b[38;5;241m=\u001b[39m asyncio\u001b[38;5;241m.\u001b[39mget_event_loop()\n",
|
||
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'cognitive_architecture.openai_tools'"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import asyncio\n",
|
||
"from cognitive_architecture.openai_tools import async_get_embedding_with_backoff\n",
|
||
"# Ensure your async function is defined in a cell above or within this cell\n",
|
||
"\n",
|
||
"# async def run_async_function(text):\n",
|
||
"# text = \"Your input text here\"\n",
|
||
"# model = \"text-embedding-ada-002\" # Or any other model you wish to use\n",
|
||
"# embedding = await async_get_embedding_with_backoff(text, model)\n",
|
||
"# print(embedding)\n",
|
||
"\n",
|
||
"# Use asyncio.run() to run the async function\n",
|
||
"loop = asyncio.get_event_loop()\n",
|
||
"\n",
|
||
"# Create and add the task to the event loop\n",
|
||
"# Replace 'your_text_here' with the actual text you want to process\n",
|
||
"task = loop.create_task(async_get_embedding_with_backoff('your_text_here'))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "39932ec2-3197-46db-bf68-ee2868ab15d1",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"!pip install nest_asyncio\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 227,
|
||
"id": "b14cc96a-ecd4-4532-a8d0-02071f8d93fc",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"import asyncio\n",
|
||
"import nest_asyncio\n",
|
||
"\n",
|
||
"# Apply nest_asyncio to the current event loop\n",
|
||
"nest_asyncio.apply()\n",
|
||
"\n",
|
||
"# Your async function and the list of texts remain the same\n",
|
||
"texts = [\"Text 1\", \"Text 2\", \"Text 3\"] # Example list of texts\n",
|
||
"\n",
|
||
"async def get_embeddings(texts):\n",
|
||
" tasks = [async_get_embedding_with_backoff(text,\"text-embedding-3-large\") for text in texts]\n",
|
||
" results = await asyncio.gather(*tasks)\n",
|
||
" return results\n",
|
||
"\n",
|
||
"# # Now you can run your async function directly using await in the notebook cell\n",
|
||
"# embeddings = await get_embeddings(texts)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 217,
|
||
"id": "9238422f-5a1b-48b9-9ea8-e0973bca2f8a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "7befc950-f0d5-4807-909e-1946c17e3a9b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 66,
|
||
"id": "0c4670d9-c7e3-476e-be90-7cb52efd6f3b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# embedding = get_embedding(\"Example text to encode\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 67,
|
||
"id": "d9ce8103-375d-4e77-8d64-46edc753b375",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# some_embeddings = []\n",
|
||
"# some_text = [\"bla\", \"blwea\"]\n",
|
||
"# for st in some_text:\n",
|
||
"# some_embeddings.append(get_embedding(st))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 228,
|
||
"id": "91763457-bf41-4e60-ad8f-0bd5542b250a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from qdrant_client import models, QdrantClient"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 229,
|
||
"id": "c35342d7-a3ce-491b-971d-142b52110bca",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"qdrant = QdrantClient(\":memory:\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 230,
|
||
"id": "e8ccd86e-01d0-44ac-9376-c848bed1adad",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from qdrant_client.http import models as rest"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 441,
|
||
"id": "6470ed2b-1842-43f2-9ac4-88db32909ec6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# unique_layer_uuids"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 231,
|
||
"id": "92c76fe6-bdbb-40d6-b136-3b83b1d85b32",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"unique_layer_uuids = set(node['layer_decomposition_uuid'] for node in node_descriptions)\n",
|
||
"# Create a new collection in Qdrant\n",
|
||
"def create_collection(collection_name):\n",
|
||
" qdrant.recreate_collection(\n",
|
||
" collection_name=collection_name,\n",
|
||
" vectors_config={\n",
|
||
" 'content': rest.VectorParams(\n",
|
||
" distance=rest.Distance.COSINE,\n",
|
||
" size=3072,\n",
|
||
" )\n",
|
||
" }\n",
|
||
" )\n",
|
||
"for layer in unique_layer_uuids:\n",
|
||
" create_collection(layer)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 440,
|
||
"id": "3c53de05-65d2-4232-bb23-f1b50fbd36c8",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# for item in node_descriptions[:5]: # Adjust the slice as needed for display\n",
|
||
"# print(item)\n",
|
||
"# print(item['description'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 233,
|
||
"id": "b810075a-3c1a-4e2e-98d6-150427951491",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# collection_schema = qdrant.get_collection(collection_name=\"97597864-a11a-4058-b854-8f21864c7e06\")\n",
|
||
"\n",
|
||
"# # Print the schema to inspect it\n",
|
||
"# print(collection_schema)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 234,
|
||
"id": "313a893d-31b5-4599-8f6f-2a2cd0759fa0",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# collection_name = 'Articles'\n",
|
||
"\n",
|
||
"# # Create a new collection in Qdrant\n",
|
||
"# def create_collection(collection_name):\n",
|
||
"# qdrant.recreate_collection(\n",
|
||
"# collection_name=collection_name,\n",
|
||
"# vectors_config={\n",
|
||
"# 'content': rest.VectorParams(\n",
|
||
"# distance=rest.Distance.COSINE,\n",
|
||
"# size=3072,\n",
|
||
"# )\n",
|
||
"# }\n",
|
||
"# )\n",
|
||
"\n",
|
||
"# Function to upload embeddings to Qdrant\n",
|
||
"# def upload_embedding(id, metadata, some_embeddings, collection_name):\n",
|
||
"# qdrant.upload_points(\n",
|
||
"# collection_name=collection_name,\n",
|
||
"# points=[\n",
|
||
"# models.PointStruct(\n",
|
||
"# id=idx, vector={\"content\":doc}, payload=metadata\n",
|
||
"# )\n",
|
||
"# for idx, doc in enumerate(some_embeddings)\n",
|
||
"# ],\n",
|
||
"# )\n",
|
||
"\n",
|
||
"# # Example usage\n",
|
||
"# upload_embedding(1, (\"meta\":1}, some_embeddings, collection_name)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 235,
|
||
"id": "1aed2283-f889-42d2-bbc2-05341a145583",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"async def upload_embedding(id, metadata, some_embeddings, collection_name):\n",
|
||
" print(id)\n",
|
||
" # if some_embeddings and isinstance(some_embeddings[0], list):\n",
|
||
" # some_embeddings = [item for sublist in some_embeddings for item in sublist]\n",
|
||
" \n",
|
||
" qdrant.upload_points(\n",
|
||
" collection_name=collection_name,\n",
|
||
" points=[\n",
|
||
" models.PointStruct(\n",
|
||
" id=id, vector={\"content\":some_embeddings}, payload=metadata\n",
|
||
" )\n",
|
||
" ]\n",
|
||
" ,\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "317036c5-0d03-46f2-b5c9-26f112b07f0d",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 88,
|
||
"id": "49b94ef4-6f40-474c-8610-367f98860d59",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"async def upload_embeddings(node_descriptions):\n",
|
||
" tasks = []\n",
|
||
"\n",
|
||
" for item in node_descriptions: \n",
|
||
" try:\n",
|
||
" embedding = await get_embeddings(item['description'])\n",
|
||
" # Ensure embedding is not empty and is properly structured\n",
|
||
" # if embedding and all(isinstance(e, float) for sublist in embedding for e in (sublist if isinstance(sublist, list) else [sublist])):\n",
|
||
" # # Flatten embedding if it's a list of lists\n",
|
||
" # if isinstance(embedding[0], list):\n",
|
||
" # embedding = [e for sublist in embedding for e in sublist]\n",
|
||
" # print(f\"Uploading embedding for node_id {item['node_id']} with length {len(embedding)}\")\n",
|
||
"\n",
|
||
" # Create and append the upload task\n",
|
||
" task = asyncio.create_task(upload_embedding(\n",
|
||
" id=item['node_id'],\n",
|
||
" metadata={\"meta\": item['description']},\n",
|
||
" some_embeddings=embedding,\n",
|
||
" collection_name=item['layer_decomposition_uuid']\n",
|
||
" ))\n",
|
||
" tasks.append(task)\n",
|
||
" else:\n",
|
||
" print(f\"Skipping upload for node_id {item['node_id']} due to incorrect embedding format or empty embedding.\")\n",
|
||
" except Exception as e:\n",
|
||
" print(f\"Error processing embedding for node_id {item['node_id']}: {e}\")\n",
|
||
"\n",
|
||
" # Wait for all upload tasks to complete, if any\n",
|
||
" if tasks:\n",
|
||
" await asyncio.gather(*tasks)\n",
|
||
" else:\n",
|
||
" print(\"No valid embeddings to upload.\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 438,
|
||
"id": "fb0235a8-7e91-4d34-9058-0cdd1dc7cfe7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# unique_layer_uuids"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 439,
|
||
"id": "4cd43233-533a-4929-b3f2-7b8a310669a8",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# node_descriptions[:2]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 281,
|
||
"id": "68f5a029-b1d3-4476-896d-711462099d52",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"d443269f-44ff-4c10-ab4a-fab9ead0f904\n",
|
||
"d443269f-44ff-4c10-ab4a-fab9ead0f904\n",
|
||
"2d588b35-062e-44e7-bbb2-1642ba0411e3\n",
|
||
"2d588b35-062e-44e7-bbb2-1642ba0411e3\n",
|
||
"6a34c9bd-0dee-4db0-8258-86d2dd87303d\n",
|
||
"6a34c9bd-0dee-4db0-8258-86d2dd87303d\n",
|
||
"630b58dd-65f6-4d55-b3fc-67b59d696b4c\n",
|
||
"630b58dd-65f6-4d55-b3fc-67b59d696b4c\n",
|
||
"54db7b9e-5f2f-4287-9185-7214eb8f0ccd\n",
|
||
"54db7b9e-5f2f-4287-9185-7214eb8f0ccd\n",
|
||
"53b9fc97-7c9e-46f1-ab2c-741405fa12ac\n",
|
||
"53b9fc97-7c9e-46f1-ab2c-741405fa12ac\n",
|
||
"e221c461-f9c1-4d99-9ae5-25299b6e0516\n",
|
||
"e221c461-f9c1-4d99-9ae5-25299b6e0516\n",
|
||
"9dce0831-6e87-4fd9-93ba-e6944b22929b\n",
|
||
"9dce0831-6e87-4fd9-93ba-e6944b22929b\n",
|
||
"f800260d-6de1-4a5f-a501-f5d58f3258c3\n",
|
||
"f800260d-6de1-4a5f-a501-f5d58f3258c3\n",
|
||
"d4beb707-c19e-45fc-8fa9-387e4410282f\n",
|
||
"d4beb707-c19e-45fc-8fa9-387e4410282f\n",
|
||
"2f3e9b5f-17bf-4346-9cfc-104fdd467ff9\n",
|
||
"2f3e9b5f-17bf-4346-9cfc-104fdd467ff9\n",
|
||
"a75bae98-0748-4c4d-b807-5d3e19a9d638\n",
|
||
"a75bae98-0748-4c4d-b807-5d3e19a9d638\n",
|
||
"446383f7-ebbd-4ca1-891f-f0294bb11782\n",
|
||
"446383f7-ebbd-4ca1-891f-f0294bb11782\n",
|
||
"28368449-6e7a-4dd5-89fb-7dac13995c63\n",
|
||
"28368449-6e7a-4dd5-89fb-7dac13995c63\n",
|
||
"0caf3fc9-0ad7-4012-b278-89335518e5fe\n",
|
||
"0caf3fc9-0ad7-4012-b278-89335518e5fe\n",
|
||
"1f26c212-a164-49f5-8029-c7a36519ef41\n",
|
||
"1f26c212-a164-49f5-8029-c7a36519ef41\n",
|
||
"b55e1f62-4294-456f-b42f-3283e3cb5a46\n",
|
||
"b55e1f62-4294-456f-b42f-3283e3cb5a46\n",
|
||
"2ff11ce2-c8d9-45cd-aadb-e6875fb98708\n",
|
||
"2ff11ce2-c8d9-45cd-aadb-e6875fb98708\n",
|
||
"67cba62f-e3ae-4db8-8c6e-b7be5e6149cb\n",
|
||
"67cba62f-e3ae-4db8-8c6e-b7be5e6149cb\n",
|
||
"ec1f580b-fadd-48bc-bf70-558cb6a2df05\n",
|
||
"ec1f580b-fadd-48bc-bf70-558cb6a2df05\n",
|
||
"4dd3cb46-ca57-46ca-9781-e8b917491720\n",
|
||
"4dd3cb46-ca57-46ca-9781-e8b917491720\n",
|
||
"8d2c705d-f257-4611-8baa-d73f37c77bbb\n",
|
||
"8d2c705d-f257-4611-8baa-d73f37c77bbb\n",
|
||
"7ee6f0a7-cf4a-4659-a886-1f0b40d75b97\n",
|
||
"7ee6f0a7-cf4a-4659-a886-1f0b40d75b97\n",
|
||
"bce65459-262a-4a6b-a319-5deb8e6d0d96\n",
|
||
"bce65459-262a-4a6b-a319-5deb8e6d0d96\n",
|
||
"4343ab14-2ab3-4e94-b25c-cf1efe8b81c6\n",
|
||
"4343ab14-2ab3-4e94-b25c-cf1efe8b81c6\n",
|
||
"48d756f6-2b24-4f43-950e-c4670d14c8c4\n",
|
||
"48d756f6-2b24-4f43-950e-c4670d14c8c4\n",
|
||
"737bce65-bb12-4d3e-ad1e-ecd756e1e842\n",
|
||
"737bce65-bb12-4d3e-ad1e-ecd756e1e842\n",
|
||
"0025c486-d9eb-4820-9b95-f48a97c51d9b\n",
|
||
"0025c486-d9eb-4820-9b95-f48a97c51d9b\n",
|
||
"1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"2b18da1f-bd6f-49a6-b058-0387898dc5dc\n",
|
||
"2b18da1f-bd6f-49a6-b058-0387898dc5dc\n",
|
||
"5fddebc9-5092-46b6-9fa3-8c6170eb2e16\n",
|
||
"5fddebc9-5092-46b6-9fa3-8c6170eb2e16\n",
|
||
"0d22c2e8-a39b-4c71-abe6-88a90cdfd65d\n",
|
||
"0d22c2e8-a39b-4c71-abe6-88a90cdfd65d\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"0f371d44-7362-434d-843f-813add8f25c6\n",
|
||
"0f371d44-7362-434d-843f-813add8f25c6\n",
|
||
"49ab2d1b-9163-485f-81c8-8667fc707554\n",
|
||
"49ab2d1b-9163-485f-81c8-8667fc707554\n",
|
||
"3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"5560940a-8504-40bc-94d4-71aa399af5ab\n",
|
||
"5560940a-8504-40bc-94d4-71aa399af5ab\n",
|
||
"ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"18b461fc-af3d-4e67-8cdb-3a02eb42192c\n",
|
||
"18b461fc-af3d-4e67-8cdb-3a02eb42192c\n",
|
||
"3a63bd68-0238-4865-9ea1-d7f88f58d6e8\n",
|
||
"3a63bd68-0238-4865-9ea1-d7f88f58d6e8\n",
|
||
"b168a539-5398-4588-b4a4-6963c73b5526\n",
|
||
"b168a539-5398-4588-b4a4-6963c73b5526\n",
|
||
"99675528-5a7f-4941-b378-87b03e151cf4\n",
|
||
"99675528-5a7f-4941-b378-87b03e151cf4\n",
|
||
"6ebecd15-37bd-4553-9c33-89df1fea543c\n",
|
||
"6ebecd15-37bd-4553-9c33-89df1fea543c\n",
|
||
"90cde4a1-7b75-4e61-844f-5a5f5e602690\n",
|
||
"90cde4a1-7b75-4e61-844f-5a5f5e602690\n",
|
||
"f866a9f5-3b89-418e-a94b-37923e0c4982\n",
|
||
"f866a9f5-3b89-418e-a94b-37923e0c4982\n",
|
||
"15d3a8af-4e1a-4c3f-9d29-9c46723fd03a\n",
|
||
"15d3a8af-4e1a-4c3f-9d29-9c46723fd03a\n",
|
||
"b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"3a47799d-afa6-4ff0-b34b-627c81e46059\n",
|
||
"3a47799d-afa6-4ff0-b34b-627c81e46059\n",
|
||
"b0a798cb-39c3-4cab-a67c-778bc4e2df21\n",
|
||
"b0a798cb-39c3-4cab-a67c-778bc4e2df21\n",
|
||
"c61a5496-bb75-445c-9ae4-a4cca37cd794\n",
|
||
"c61a5496-bb75-445c-9ae4-a4cca37cd794\n",
|
||
"e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"1b10518f-3973-4f79-9dab-3ef238c2cbaa\n",
|
||
"1b10518f-3973-4f79-9dab-3ef238c2cbaa\n",
|
||
"59cca039-7f8b-4da5-b67d-51ac14e7c74c\n",
|
||
"59cca039-7f8b-4da5-b67d-51ac14e7c74c\n",
|
||
"7c87ffb5-0359-4421-8e03-61457119ca4b\n",
|
||
"7c87ffb5-0359-4421-8e03-61457119ca4b\n",
|
||
"f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"a942b1b8-7ff2-4177-83ef-022bb69affac\n",
|
||
"a942b1b8-7ff2-4177-83ef-022bb69affac\n",
|
||
"88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"504729be-4ffc-493a-9cc8-1ae4ffc799e1\n",
|
||
"504729be-4ffc-493a-9cc8-1ae4ffc799e1\n",
|
||
"517b7476-e446-4986-8445-0a2cb14e543f\n",
|
||
"517b7476-e446-4986-8445-0a2cb14e543f\n",
|
||
"13a45934-879a-4fe4-90e9-0a5277e56297\n",
|
||
"13a45934-879a-4fe4-90e9-0a5277e56297\n",
|
||
"3fce46e3-8006-4940-bc47-e011408f663c\n",
|
||
"3fce46e3-8006-4940-bc47-e011408f663c\n",
|
||
"939465bc-c763-4122-9328-984c5c59f712\n",
|
||
"939465bc-c763-4122-9328-984c5c59f712\n",
|
||
"3cc5365b-b9e7-46d7-81c8-e125af634e32\n",
|
||
"3cc5365b-b9e7-46d7-81c8-e125af634e32\n",
|
||
"4aa02775-42e7-41d5-b91f-1f8a764657ed\n",
|
||
"4aa02775-42e7-41d5-b91f-1f8a764657ed\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for item in node_descriptions: \n",
|
||
" print(item['node_id'])\n",
|
||
" await upload_embedding(id = item['node_id'], metadata = {\"meta\":item['description']}, some_embeddings = get_embedding_b(item['description']), collection_name= item['layer_decomposition_uuid'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 220,
|
||
"id": "9c33fe6a-30fc-4ae9-85c3-c3c0563ab7c6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# import nest_asyncio\n",
|
||
"\n",
|
||
"# # Apply nest_asyncio to the current event loop\n",
|
||
"# nest_asyncio.apply()\n",
|
||
"\n",
|
||
"# await upload_embeddings(node_descriptions)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "302dc698-2c14-4408-81d7-76282524dba3",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# for item in node_descriptions[:5]: \n",
|
||
"# print(item['node_id'])\n",
|
||
"# upload_embedding(id = item['node_id'], metadata = {\"meta\":item['description']}, some_embeddings = get_embedding(item['description']), collection_name= item['layer_decomposition_uuid'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 240,
|
||
"id": "e48f1104-829d-4150-82f6-e42cc53c8e8c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"grouped_data = {}\n",
|
||
"\n",
|
||
"# Iterate through each dictionary in the list\n",
|
||
"for item in node_descriptions:\n",
|
||
" # Get the layer_decomposition_uuid of the current dictionary\n",
|
||
" uuid = item['layer_decomposition_uuid']\n",
|
||
" \n",
|
||
" # Check if this uuid is already a key in the grouped_data dictionary\n",
|
||
" if uuid not in grouped_data:\n",
|
||
" # If not, initialize a new list for this uuid\n",
|
||
" grouped_data[uuid] = []\n",
|
||
" \n",
|
||
" # Append the current dictionary to the list corresponding to its uuid\n",
|
||
" grouped_data[uuid].append(item)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 348,
|
||
"id": "a507c77e-9190-4a71-8321-ccc081121534",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# grouped_data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 282,
|
||
"id": "95cfd736-f2c1-40d3-920c-ebc14c230f21",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# def qdrant_search (collection_name, embedding):\n",
|
||
"# hits = qdrant.search(\n",
|
||
"# collection_name=collection_name,\n",
|
||
"# query_vector=(\n",
|
||
"# \"content\", embedding\n",
|
||
"# ),\n",
|
||
"# limit=3,\n",
|
||
"# )\n",
|
||
"# return hits\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 283,
|
||
"id": "32e3f64e-bdcf-4f28-a17b-774930c1f970",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# for cl, e in relationship_dict:\n",
|
||
"# print(cl)\n",
|
||
"# print(e)\n",
|
||
"# g = qdrant_search(cl, e)\n",
|
||
"# print(g)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 284,
|
||
"id": "bf0e8bb8-9412-4f98-bb83-83abeec0b619",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[ScoredPoint(id='d443269f-44ff-4c10-ab4a-fab9ead0f904', version=0, score=0.4133083905881839, payload={'meta': 'For Britons, keeping pets is an entire way of life.'}, vector=None, shard_key=None),\n",
|
||
" ScoredPoint(id='6a34c9bd-0dee-4db0-8258-86d2dd87303d', version=0, score=0.17809770074247908, payload={'meta': 'Dogs are encouraged and welcomed in public spaces such as pubs, shops, and public transport.'}, vector=None, shard_key=None),\n",
|
||
" ScoredPoint(id='53b9fc97-7c9e-46f1-ab2c-741405fa12ac', version=0, score=0.1524232010928769, payload={'meta': \"Ownership of certain dog breeds is seen as a status symbol and a reflection of owner's identity.\"}, vector=None, shard_key=None)]"
|
||
]
|
||
},
|
||
"execution_count": 284,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# qdrant_search ('67200cb4-16fc-40f9-b231-c9e720aeb14a',get_embedding_b(\"Britons\"))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 307,
|
||
"id": "983c44ef-6486-4abe-ba2b-d953cfea33ca",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"async def qdrant_batch_search(collection_name: str, embeddings: List[List[float]], limits: List[int], with_vectors: List[bool] = None):\n",
|
||
" \"\"\"\n",
|
||
" Perform batch search in a Qdrant collection with dynamic search requests.\n",
|
||
"\n",
|
||
" Args:\n",
|
||
" - collection_name (str): Name of the collection to search in.\n",
|
||
" - embeddings (List[List[float]]): List of embeddings to search for.\n",
|
||
" - limits (List[int]): List of result limits for each search request.\n",
|
||
" - with_vectors (List[bool], optional): List indicating whether to return vectors for each search request.\n",
|
||
" Defaults to None, in which case vectors are not returned.\n",
|
||
"\n",
|
||
" Returns:\n",
|
||
" - results: The search results from Qdrant.\n",
|
||
" \"\"\"\n",
|
||
"\n",
|
||
" # Default with_vectors to False for each request if not provided\n",
|
||
" if with_vectors is None:\n",
|
||
" with_vectors = [False] * len(embeddings)\n",
|
||
"\n",
|
||
"\n",
|
||
" # Ensure with_vectors list matches the length of embeddings and limits\n",
|
||
" if len(with_vectors) != len(embeddings):\n",
|
||
" raise ValueError(\"The length of with_vectors must match the length of embeddings and limits\")\n",
|
||
"\n",
|
||
" # Generate dynamic search requests based on the provided embeddings\n",
|
||
" requests = [\n",
|
||
" rest.SearchRequest( vector=models.NamedVector(\n",
|
||
" name=\"content\",\n",
|
||
" vector=embedding,\n",
|
||
" ),\n",
|
||
" # vector= embedding,\n",
|
||
" limit=3,\n",
|
||
" with_vector=False\n",
|
||
" ) for embedding in embeddings\n",
|
||
" ]\n",
|
||
"\n",
|
||
" # Perform batch search with the dynamically generated requests\n",
|
||
" results = qdrant.search_batch(\n",
|
||
" collection_name=collection_name,\n",
|
||
" requests=requests\n",
|
||
" )\n",
|
||
" \n",
|
||
"\n",
|
||
" return results\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 92,
|
||
"id": "5210715c-66ae-430a-a5d5-469fa2ca860c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# hits = qdrant.search(\n",
|
||
"# collection_name=\"Articles\",\n",
|
||
"# query_vector=(\n",
|
||
"# \"content\", get_embedding(\"bla\")\n",
|
||
"# ),\n",
|
||
"# limit=3,\n",
|
||
"# )\n",
|
||
"# for hit in hits:\n",
|
||
"# print(hit.payload, \"score:\", hit.score)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 93,
|
||
"id": "d6253483-4bd3-426d-88fc-7ac29ed1d5dc",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# b = get_embedding(\"dog\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 94,
|
||
"id": "4a7173ab-3e1b-496d-a56e-c7d05b84f0fc",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# c = []\n",
|
||
"# for collection in unique_layer_uuids:\n",
|
||
"# try:\n",
|
||
"# # c.apend(qdrant_search(collection, b))\n",
|
||
"# c.apend(qdrant_batch_search(collection, [b], [3]))\n",
|
||
"# except:\n",
|
||
"# pass"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 95,
|
||
"id": "5d2ebcac-8dae-4495-bd6c-415edca60b24",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# qdrant_search(collection, b)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 245,
|
||
"id": "91fcac9b-04ec-4238-800d-f291c8e7c13b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"unique_layer_uuids = set(node['layer_decomposition_uuid'] for node in node_descriptions)\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 382,
|
||
"id": "339881a7-664b-4ad4-8579-5996fd1b0676",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" '67200cb4-16fc-40f9-b231-c9e720aeb14a',\n",
|
||
" '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'ccf6645e-9fad-441b-821d-b1d47b93ebca',\n",
|
||
" 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda'}"
|
||
]
|
||
},
|
||
"execution_count": 382,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"# unique_layer_uuids"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 437,
|
||
"id": "8e517772-d4eb-4e7a-9393-1ea695020e65",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# count = 0 # Counter to keep track of how many values we've printed\n",
|
||
"# for uuid, items in grouped_data.items():\n",
|
||
"# print(f\"Group ID: {uuid}, Items: {items}\")\n",
|
||
"# count += 1\n",
|
||
"# if count == 3:\n",
|
||
"# break"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 436,
|
||
"id": "c585ca09-139d-4d00-aed0-68ecaa991564",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"nest_asyncio.apply()\n",
|
||
"async def process_items(grouped_data, unique_layer_uuids):\n",
|
||
" results_to_check = [] # This will hold results excluding self comparisons\n",
|
||
" tasks = [] # List to hold all tasks\n",
|
||
" task_to_info = {} # Dictionary to map tasks to their corresponding group id and item info\n",
|
||
"\n",
|
||
" # Iterate through each group in grouped_data\n",
|
||
" for group_id, items in grouped_data.items():\n",
|
||
" # Filter unique_layer_uuids to exclude the current group_id\n",
|
||
" target_uuids = [uuid for uuid in unique_layer_uuids if uuid != group_id]\n",
|
||
"\n",
|
||
" # Process each item in the group\n",
|
||
" for item in items:\n",
|
||
" # For each target UUID, create an async task for the item's embedding retrieval\n",
|
||
" for target_id in target_uuids:\n",
|
||
" task = asyncio.create_task(async_get_embedding_with_backoff(item['description'], \"text-embedding-3-large\"))\n",
|
||
" tasks.append(task)\n",
|
||
" # Map the task to the target id, item's node_id, and description for later retrieval\n",
|
||
" task_to_info[task] = (target_id, item['node_id'], group_id, item['description'])\n",
|
||
" \n",
|
||
" # Await all tasks to complete and gather results\n",
|
||
" results = await asyncio.gather(*tasks)\n",
|
||
"\n",
|
||
" # Process the results, associating them with their target id, node id, and description\n",
|
||
" for task, embedding in zip(tasks, results):\n",
|
||
" \n",
|
||
" target_id, node_id,group_id, description = task_to_info[task]\n",
|
||
" results_to_check.append([target_id, embedding, description, node_id, group_id])\n",
|
||
"\n",
|
||
" return results_to_check\n",
|
||
"\n",
|
||
" \n",
|
||
"# async def process_items(grouped_data, unique_layer_uuids):\n",
|
||
"# relationship_dict = {}\n",
|
||
"# task_to_id = {} # Dictionary to map tasks to ids\n",
|
||
"# tasks = [] # List to hold all tasks\n",
|
||
"\n",
|
||
"# for id in unique_layer_uuids:\n",
|
||
"# if id not in relationship_dict:\n",
|
||
"# relationship_dict[id] = []\n",
|
||
" \n",
|
||
"# for uuid, items in grouped_data.items():\n",
|
||
"# if uuid != id:\n",
|
||
"# for item in items:\n",
|
||
"# # Create a task for each embedding retrieval\n",
|
||
"# task = asyncio.create_task(async_get_embedding_with_backoff(item['description'],\"text-embedding-3-large\" ))\n",
|
||
"# tasks.append(task)\n",
|
||
"# # Map the task to the corresponding id\n",
|
||
"# task_to_id[task] = id\n",
|
||
"\n",
|
||
"# # Await all tasks to complete and gather results\n",
|
||
"# results = await asyncio.gather(*tasks)\n",
|
||
"\n",
|
||
"# # Process the results and update relationship_dict\n",
|
||
"# for task, result in zip(tasks, results):\n",
|
||
"# id = task_to_id[task] # Get the id associated with this task\n",
|
||
"# if id in relationship_dict:\n",
|
||
"# relationship_dict[id].append(result)\n",
|
||
"# else:\n",
|
||
"# relationship_dict[id] = [result]\n",
|
||
"\n",
|
||
"# return relationship_dict"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 403,
|
||
"id": "933beda7-27e6-45e2-9ce7-3084b6243f54",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"67200cb4-16fc-40f9-b231-c9e720aeb14a\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"ccf6645e-9fad-441b-821d-b1d47b93ebca\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"d0c2bd1c-7cec-4e5a-af13-dbb655623dda\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"83b60dcf-0a04-474f-962b-121cc518e610\n",
|
||
"['796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"6fb85c94-f488-4f31-8e7c-a5905580a78c\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a']\n",
|
||
"796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"92562711-f2a9-4ce6-9c7d-d5226080f982\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"84fa9b73-12c0-4486-a0eb-3a03a81ca135\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n",
|
||
"3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d\n",
|
||
"['83b60dcf-0a04-474f-962b-121cc518e610', '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', '84fa9b73-12c0-4486-a0eb-3a03a81ca135', '92562711-f2a9-4ce6-9c7d-d5226080f982', 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda', 'ccf6645e-9fad-441b-821d-b1d47b93ebca', '67200cb4-16fc-40f9-b231-c9e720aeb14a', '6fb85c94-f488-4f31-8e7c-a5905580a78c']\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"relationship_dict = await process_items(grouped_data, unique_layer_uuids)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "35e868ad-d8cd-4341-8909-fdf791e4ce12",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 258,
|
||
"id": "a23a7517-64f2-4d9f-8cc0-f6dfdd0fe3c1",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# This code compares and runs a semantic search across the nodes and calculates if there are relevant nodes in different layers that interconnect. this is not efficient and needs to be completely redone, batching and ideally done on vectordb side\n",
|
||
"\n",
|
||
"# relationship_dict={}\n",
|
||
"# results_to_check = []\n",
|
||
"# for id in unique_layer_uuids:\n",
|
||
"# if id not in relationship_dict:\n",
|
||
"# relationship_dict[id] = []\n",
|
||
" \n",
|
||
"# for uuid, items in grouped_data.items():\n",
|
||
"# if uuid != id:\n",
|
||
"# # print(\"this id is orig %s\", id)\n",
|
||
"# # print(\"this uuid is relevant for search %s\", uuid)\n",
|
||
"# for item in items:\n",
|
||
"\n",
|
||
"# results_to_check.append([id, [get_embedding(item['description'])]])\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" \n",
|
||
" \n",
|
||
" # results = qdrant_search(id, item['description'])\n",
|
||
"\n",
|
||
" # for result in results:\n",
|
||
" # if result.score > 0.9: # Only consider hits with a score greater than 0.9\n",
|
||
" # # Append result information to the relationship_dict under the current id\n",
|
||
" # relationship_dict[id].append({\n",
|
||
" # 'collection_name_uuid': uuid, # The uuid used for the search\n",
|
||
" # 'searched_node_id': item['node_id'], # The node_id of the hit\n",
|
||
" # 'score': result.score,\n",
|
||
" # 'score_metadata': result.payload,\n",
|
||
" # 'score_id': result.id,\n",
|
||
" # })\n",
|
||
" \n",
|
||
" \n",
|
||
" # print(item['description'])\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 435,
|
||
"id": "69967cdd-3957-4c39-b5d7-8e58d0f8c13c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# unique_layer_uuids"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 630,
|
||
"id": "594825c9-a6c4-4760-bd0e-4d7d3a25d090",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# ff= get_embedding('dog')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 631,
|
||
"id": "7ee6a445-e783-4d43-9d02-e97bc83502f7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# sample_embeddings = [\n",
|
||
"# [0.1, 0.2, 0.3, 0.4], # First sample embedding\n",
|
||
"# [-0.5, 0.8, -0.3, 0.2] # Second sample embedding\n",
|
||
"# ]\n",
|
||
"\n",
|
||
"# # Corresponding limits for each embedding search\n",
|
||
"# search_limits = [3, 2] # Find top 3 for the first embedding and top 2 for the second\n",
|
||
"\n",
|
||
"# # Call the qdrant_batch_search function with the test collection name, sample embeddings, and their limits\n",
|
||
"# search_results = qdrant_batch_search('97597864-a11a-4058-b854-8f21864c7e06', [ff], search_limits)\n",
|
||
"# search_r = qdrant_search('97597864-a11a-4058-b854-8f21864c7e06',ff)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 629,
|
||
"id": "a9cb5f13-d284-4cc5-ac74-78d7f4316148",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# for i in results_to_check[:4]:\n",
|
||
"# print(i[0])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "836a7b57-9b65-43e2-b57a-8f2914061b40",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 424,
|
||
"id": "baff4d94-5e9a-4ba6-a42a-a1b5939fb1fe",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
"# def qdrant_batch_search(results_to_check):\n",
|
||
"# results = []\n",
|
||
"\n",
|
||
"# for result in results_to_check:\n",
|
||
"# # Assuming result[1] is the list of embeddings and you want a limit of 3 for each\n",
|
||
"# embedding_list = result[1] # This should be a list of embeddings\n",
|
||
"# limits = [3] * len(embedding_list) # Create a list with a limit of 3 for each embedding\n",
|
||
"# try:\n",
|
||
"# search_results = qdrant_batch_search(result[0], embedding_list, limits)\n",
|
||
"# results.append(search_results)\n",
|
||
"# except:\n",
|
||
"# pass\n",
|
||
"# return results\n",
|
||
"\n",
|
||
"# async def adapted_qdrant_batch_search(relationship_dict):\n",
|
||
"# search_results_list = []\n",
|
||
"\n",
|
||
"# for id, embeddings_list in relationship_dict.items():\n",
|
||
"# print(id)\n",
|
||
"# # Flatten the list of lists of embeddings for this id\n",
|
||
"# flattened_embeddings = [embedding for sublist in embeddings_list for embedding in sublist]\n",
|
||
"# print(len(flattened_embeddings))\n",
|
||
"\n",
|
||
"# # Set a limit of 3 results for each embedding in the flattened list\n",
|
||
"# limits = [3] * len(embeddings_list)\n",
|
||
"\n",
|
||
"# try:\n",
|
||
"# # Perform the batch search for this id with its flattened embeddings and corresponding limits\n",
|
||
"# id_search_results = await qdrant_batch_search(id, [embeddings_list[0], limits)\n",
|
||
"# search_results_list.append((id, id_search_results))\n",
|
||
"# except Exception as e:\n",
|
||
"# print(f\"Error during batch search for ID {id}: {e}\")\n",
|
||
"# continue\n",
|
||
"\n",
|
||
"# return search_results_list\n",
|
||
"async def adapted_qdrant_batch_search(results_to_check):\n",
|
||
" search_results_list = []\n",
|
||
"\n",
|
||
" for result in results_to_check:\n",
|
||
" id = result[0]\n",
|
||
" embedding = result[1]\n",
|
||
" node_id = result[2]\n",
|
||
" target = result[3]\n",
|
||
" b= result[4]\n",
|
||
"\n",
|
||
" # Assuming each result in results_to_check contains a single embedding\n",
|
||
" limits = [3] * len(embedding) # Set a limit of 3 results for this embedding\n",
|
||
"\n",
|
||
" try:\n",
|
||
" # Perform the batch search for this id with its embedding\n",
|
||
" # Assuming qdrant_batch_search function accepts a single embedding and a list of limits\n",
|
||
" id_search_results = await qdrant_batch_search(id, [embedding], limits)\n",
|
||
" search_results_list.append((id, id_search_results, node_id, target))\n",
|
||
" except Exception as e:\n",
|
||
" print(f\"Error during batch search for ID {id}: {e}\")\n",
|
||
" continue\n",
|
||
"\n",
|
||
" return search_results_list\n",
|
||
"\n",
|
||
"def graph_ready_output(results):\n",
|
||
" relationship_dict={}\n",
|
||
"\n",
|
||
" for result_tuple in results:\n",
|
||
" \n",
|
||
" uuid, scored_points_list, desc, node_id = result_tuple\n",
|
||
" # Unpack the tuple\n",
|
||
" \n",
|
||
" # Ensure there's a list to collect related items for this uuid\n",
|
||
" if uuid not in relationship_dict:\n",
|
||
" relationship_dict[uuid] = []\n",
|
||
" \n",
|
||
" for scored_points in scored_points_list: # Iterate over the list of ScoredPoint lists\n",
|
||
" for scored_point in scored_points: # Iterate over each ScoredPoint object\n",
|
||
" if scored_point.score > 0.9: # Check the score condition\n",
|
||
" # Append a new dictionary to the list associated with the uuid\n",
|
||
" relationship_dict[uuid].append({\n",
|
||
" 'collection_name_uuid': uuid, \n",
|
||
" 'searched_node_id': scored_point.id, \n",
|
||
" 'score': scored_point.score,\n",
|
||
" 'score_metadata': scored_point.payload,\n",
|
||
" 'original_id_for_search': node_id,\n",
|
||
" })\n",
|
||
" return relationship_dict\n",
|
||
"\n",
|
||
"# results = qdrant_search(id, item['description'])\n",
|
||
"\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 348,
|
||
"id": "838bdc96-7712-4b9d-816b-588500d034be",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# results = []\n",
|
||
"\n",
|
||
"# for result in relationship_dict:\n",
|
||
"# # Assuming result[1] is the list of embeddings and you want a limit of 3 for each\n",
|
||
"# embedding_list = result[1] # This should be a list of embeddings\n",
|
||
"# limits = [3] * len(embedding_list) # Create a list with a limit of 3 for each embedding\n",
|
||
"# try:\n",
|
||
"# search_results = qdrant_batch_search(result[0], embedding_list, limits)\n",
|
||
"# results.append(search_results)\n",
|
||
"# except:\n",
|
||
"# pass\n",
|
||
"# return results"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 313,
|
||
"id": "44a0065b-e3a8-431c-af07-c710aa6d1fa4",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# relationship_dict"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 279,
|
||
"id": "849cc731-cf2d-44dc-b363-9e195dab66c6",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# await adapted_qdrant_batch_search(relationship_dict)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 414,
|
||
"id": "9d17db26-2168-4f55-bd14-cf41c18bbda7",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Nodes containing ID '3a63bd68-0238-4865-9ea1-d7f88f58d6e8' in any attribute: ['Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 3a63bd68-0238-4865-9ea1-d7f88f58d6e8']\n",
|
||
"Attributes of node Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 3a63bd68-0238-4865-9ea1-d7f88f58d6e8: {'created_at': '2024-03-04 20:28:37', 'updated_at': '2024-03-04 20:28:37', 'description': 'Izzy, a terrier-spaniel cross owned by Lee Parkin.', 'category': 'animal', 'memory_type': 'episodic', 'layer_uuid': 'd0fde4d0-c358-44b2-b698-a19314a336e0', 'layer_decomposition_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f', 'id': '3a63bd68-0238-4865-9ea1-d7f88f58d6e8', 'type': 'detail'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# desired_id = '3a63bd68-0238-4865-9ea1-d7f88f58d6e8' # Replace this with the actual 'id' you're looking for\n",
|
||
"# nodes_with_desired_id = [] # Initialize variable to store the node if found\n",
|
||
"\n",
|
||
"# # Iterate through all nodes and their attributes in the graph\n",
|
||
"# for node, attrs in CONNECTED_GRAPH.nodes(data=True):\n",
|
||
"# if any(desired_id in str(value) for value in attrs.values()): # Check if any attribute value contains the desired ID\n",
|
||
"# nodes_with_desired_id.append(node) # Add the node to the list if the ID is found in any attribute\n",
|
||
"\n",
|
||
"# # Check if any nodes were found and print the results\n",
|
||
"# if nodes_with_desired_id:\n",
|
||
"# print(f\"Nodes containing ID '{desired_id}' in any attribute: {nodes_with_desired_id}\")\n",
|
||
"# for node in nodes_with_desired_id:\n",
|
||
"# print(f\"Attributes of node {node}: {G.nodes[node]}\")\n",
|
||
"# else:\n",
|
||
"# print(f\"No nodes found containing ID '{desired_id}' in any attribute.\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "9e45b7ed-1bb2-494d-8c5d-2af1cfa26f0f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# CONNECTED_GRAPH.get"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "55c4aa77-00db-4e1e-985f-fb04de74f371",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 314,
|
||
"id": "19eb60cc-554a-423d-a52e-8197e62b9906",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# await qdrant_batch_search('83b60dcf-0a04-474f-962b-121cc518e610',[get_embedding_b(\"bla\")],[3])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 422,
|
||
"id": "3c28c2f1-ecd4-4b2b-8797-c07c89e01d6a",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"results = await adapted_qdrant_batch_search(relationship_dict)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "5992847c-daee-4851-b200-6ef9b5d8d9a7",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 305,
|
||
"id": "cd2094ee-75d2-40a7-bd65-38392a53df4f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# relationship_dict = {}\n",
|
||
"\n",
|
||
"# for result_tuple in results:\n",
|
||
"# uuid, scored_points_list = result_tuple # Unpack the tuple\n",
|
||
" \n",
|
||
"# # Ensure there's a list to collect related items for this uuid\n",
|
||
"# if uuid not in relationship_dict:\n",
|
||
"# relationship_dict[uuid] = []\n",
|
||
" \n",
|
||
"# for scored_points in scored_points_list: # Iterate over the list of ScoredPoint lists\n",
|
||
"# for scored_point in scored_points: # Iterate over each ScoredPoint object\n",
|
||
"# if scored_point.score > 0.9: # Check the score condition\n",
|
||
"# # Append a new dictionary to the list associated with the uuid\n",
|
||
"# relationship_dict[uuid].append({\n",
|
||
"# 'collection_name_uuid': uuid, # Assuming this is the same as the uuid from the result tuple\n",
|
||
"# 'searched_node_id': scored_point.id, # Assuming you want the id of the ScoredPoint object\n",
|
||
"# 'score': scored_point.score,\n",
|
||
"# 'score_metadata': scored_point.payload,\n",
|
||
"# 'score_id': scored_point.id,\n",
|
||
"# })\n",
|
||
"\n",
|
||
"\n",
|
||
"# relationship_dict={}\n",
|
||
"# for result in results:\n",
|
||
"# print(result)\n",
|
||
"# # print(result)\n",
|
||
"# for i in result:\n",
|
||
"# if i !=[]:\n",
|
||
"# # print(i[1])\n",
|
||
"# if i[1].score > 0.1:\n",
|
||
"# print(i)\n",
|
||
"# relationship_dict[id].append({\n",
|
||
"# 'collection_name_uuid': uuid, # The uuid used for the search\n",
|
||
"# 'searched_node_id': item['node_id'], # The node_id of the hit\n",
|
||
"# 'score': result.score,\n",
|
||
"# 'score_metadata': result.payload,\n",
|
||
"# 'score_id': result.id,\n",
|
||
"# })\n",
|
||
"# else:\n",
|
||
"# pass\n",
|
||
" # Only consider hits with a score greater than 0.9\n",
|
||
"# # Append result information to the relationship_dict under the current id\n",
|
||
"# relationship_dict[id].append({\n",
|
||
"# 'collection_name_uuid': uuid, # The uuid used for the search\n",
|
||
"# 'searched_node_id': item['node_id'], # The node_id of the hit\n",
|
||
"# 'score': result.score,\n",
|
||
"# 'score_metadata': result.payload,\n",
|
||
"# 'score_id': result.id,\n",
|
||
"# })\n",
|
||
" \n",
|
||
" \n",
|
||
"# print(item['description'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "bab83148-8143-4d4c-8aa1-506f64de8f95",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 415,
|
||
"id": "cc98c03c-d1bb-4a58-8227-5e4db7d03676",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"('796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" [[ScoredPoint(id='3a63bd68-0238-4865-9ea1-d7f88f58d6e8', version=0, score=0.3264356832472073, payload=None, vector=None, shard_key=None),\n",
|
||
" ScoredPoint(id='90cde4a1-7b75-4e61-844f-5a5f5e602690', version=0, score=0.25116409155343133, payload=None, vector=None, shard_key=None),\n",
|
||
" ScoredPoint(id='18b461fc-af3d-4e67-8cdb-3a02eb42192c', version=0, score=0.21469044119941377, payload=None, vector=None, shard_key=None)]],\n",
|
||
" 'For Britons, keeping pets is an entire way of life.',\n",
|
||
" 'd443269f-44ff-4c10-ab4a-fab9ead0f904')"
|
||
]
|
||
},
|
||
"execution_count": 415,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"results[1]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 425,
|
||
"id": "2b4a8d09-2f80-461d-a95b-e943c1d305e5",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"relationship_d = graph_ready_output(results)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 426,
|
||
"id": "12032d28-3f2a-4a29-93f4-3a5b453605dc",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'83b60dcf-0a04-474f-962b-121cc518e610': [{'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93',\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3a6f81c3-ecdc-483e-88dd-59068ae332b1'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41',\n",
|
||
" 'score': 0.9383203721228301,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': 'c7bea689-6862-482a-b156-4fc1be3fa07f',\n",
|
||
" 'score': 0.9031738514995704,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '9872ba50-8783-49b4-8fc4-9c53aae7cf57'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '0025c486-d9eb-4820-9b95-f48a97c51d9b',\n",
|
||
" 'score': 0.9999951119054207,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '15d3a8af-4e1a-4c3f-9d29-9c46723fd03a'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93',\n",
|
||
" 'score': 1.000000059988928,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b507af42-4ef7-4cb6-8df1-236d9abc4832'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '2b18da1f-bd6f-49a6-b058-0387898dc5dc',\n",
|
||
" 'score': 0.999999997458257,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3a47799d-afa6-4ff0-b34b-627c81e46059'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '5fddebc9-5092-46b6-9fa3-8c6170eb2e16',\n",
|
||
" 'score': 1.000000011544502,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b0a798cb-39c3-4cab-a67c-778bc4e2df21'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '0d22c2e8-a39b-4c71-abe6-88a90cdfd65d',\n",
|
||
" 'score': 0.9999863092459667,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'c61a5496-bb75-445c-9ae4-a4cca37cd794'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41',\n",
|
||
" 'score': 0.9999319831842581,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': 'c7bea689-6862-482a-b156-4fc1be3fa07f',\n",
|
||
" 'score': 0.9999999766141177,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b086b7b2-daf2-47f2-9a1e-35812afd9313'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '69dea290-4f26-495f-b6df-c994d6de5f69',\n",
|
||
" 'score': 0.9999667262300376,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '1b10518f-3973-4f79-9dab-3ef238c2cbaa'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '0f371d44-7362-434d-843f-813add8f25c6',\n",
|
||
" 'score': 0.999999377442629,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '59cca039-7f8b-4da5-b67d-51ac14e7c74c'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93',\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'f38b0084-b074-4e47-ae66-cccb9827a87f'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41',\n",
|
||
" 'score': 0.9383203721228301,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '88635a41-2a86-4bcc-bd34-affe7e302208'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': 'c7bea689-6862-482a-b156-4fc1be3fa07f',\n",
|
||
" 'score': 0.9031738514995704,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '13374d73-bb3b-4e2f-8a94-ff90f0056970'}],\n",
|
||
" '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f': [{'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': '18b461fc-af3d-4e67-8cdb-3a02eb42192c',\n",
|
||
" 'score': 1.0000000492660635,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '504729be-4ffc-493a-9cc8-1ae4ffc799e1'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': '3a63bd68-0238-4865-9ea1-d7f88f58d6e8',\n",
|
||
" 'score': 0.9999909638430637,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '517b7476-e446-4986-8445-0a2cb14e543f'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': 'b168a539-5398-4588-b4a4-6963c73b5526',\n",
|
||
" 'score': 0.9999999987186259,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '13a45934-879a-4fe4-90e9-0a5277e56297'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': '99675528-5a7f-4941-b378-87b03e151cf4',\n",
|
||
" 'score': 0.9999993260326947,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3fce46e3-8006-4940-bc47-e011408f663c'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': '6ebecd15-37bd-4553-9c33-89df1fea543c',\n",
|
||
" 'score': 1.0000000153915702,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '939465bc-c763-4122-9328-984c5c59f712'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': '90cde4a1-7b75-4e61-844f-5a5f5e602690',\n",
|
||
" 'score': 0.9999999726705717,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3cc5365b-b9e7-46d7-81c8-e125af634e32'},\n",
|
||
" {'collection_name_uuid': '796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f',\n",
|
||
" 'searched_node_id': 'f866a9f5-3b89-418e-a94b-37923e0c4982',\n",
|
||
" 'score': 0.9999981225768191,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '4aa02775-42e7-41d5-b91f-1f8a764657ed'}],\n",
|
||
" '84fa9b73-12c0-4486-a0eb-3a03a81ca135': [{'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': 'f38b0084-b074-4e47-ae66-cccb9827a87f',\n",
|
||
" 'score': 0.9515395892645451,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '1531d1cb-3f68-46d7-a366-48d19f26bc93'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '88635a41-2a86-4bcc-bd34-affe7e302208',\n",
|
||
" 'score': 0.93886233238224,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '58b37c6f-1574-4b93-8ee5-16a22f01aa41'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '13374d73-bb3b-4e2f-8a94-ff90f0056970',\n",
|
||
" 'score': 0.9034716970959398,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'c7bea689-6862-482a-b156-4fc1be3fa07f'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '7c87ffb5-0359-4421-8e03-61457119ca4b',\n",
|
||
" 'score': 1.0000000150401713,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '49ab2d1b-9163-485f-81c8-8667fc707554'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': 'f38b0084-b074-4e47-ae66-cccb9827a87f',\n",
|
||
" 'score': 1.0000000663828739,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3a6f81c3-ecdc-483e-88dd-59068ae332b1'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': 'a942b1b8-7ff2-4177-83ef-022bb69affac',\n",
|
||
" 'score': 1.000000017737942,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '5560940a-8504-40bc-94d4-71aa399af5ab'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '88635a41-2a86-4bcc-bd34-affe7e302208',\n",
|
||
" 'score': 0.9999993598583296,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '13374d73-bb3b-4e2f-8a94-ff90f0056970',\n",
|
||
" 'score': 0.9999975500994932,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '9872ba50-8783-49b4-8fc4-9c53aae7cf57'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': 'f38b0084-b074-4e47-ae66-cccb9827a87f',\n",
|
||
" 'score': 0.9515395892645451,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b507af42-4ef7-4cb6-8df1-236d9abc4832'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '88635a41-2a86-4bcc-bd34-affe7e302208',\n",
|
||
" 'score': 0.93886233238224,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b'},\n",
|
||
" {'collection_name_uuid': '84fa9b73-12c0-4486-a0eb-3a03a81ca135',\n",
|
||
" 'searched_node_id': '13374d73-bb3b-4e2f-8a94-ff90f0056970',\n",
|
||
" 'score': 0.9034716970959398,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b086b7b2-daf2-47f2-9a1e-35812afd9313'}],\n",
|
||
" '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d': [{'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '504729be-4ffc-493a-9cc8-1ae4ffc799e1',\n",
|
||
" 'score': 1.0000000492660635,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '18b461fc-af3d-4e67-8cdb-3a02eb42192c'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '517b7476-e446-4986-8445-0a2cb14e543f',\n",
|
||
" 'score': 1.0000000474370807,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3a63bd68-0238-4865-9ea1-d7f88f58d6e8'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '13a45934-879a-4fe4-90e9-0a5277e56297',\n",
|
||
" 'score': 0.9999991449822498,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b168a539-5398-4588-b4a4-6963c73b5526'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '3fce46e3-8006-4940-bc47-e011408f663c',\n",
|
||
" 'score': 0.9999999773199107,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '99675528-5a7f-4941-b378-87b03e151cf4'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '939465bc-c763-4122-9328-984c5c59f712',\n",
|
||
" 'score': 1.0000000153915702,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '6ebecd15-37bd-4553-9c33-89df1fea543c'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '3cc5365b-b9e7-46d7-81c8-e125af634e32',\n",
|
||
" 'score': 0.9999999726705717,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '90cde4a1-7b75-4e61-844f-5a5f5e602690'},\n",
|
||
" {'collection_name_uuid': '3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d',\n",
|
||
" 'searched_node_id': '4aa02775-42e7-41d5-b91f-1f8a764657ed',\n",
|
||
" 'score': 1.0000000557427815,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'f866a9f5-3b89-418e-a94b-37923e0c4982'}],\n",
|
||
" '92562711-f2a9-4ce6-9c7d-d5226080f982': [{'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': '15d3a8af-4e1a-4c3f-9d29-9c46723fd03a',\n",
|
||
" 'score': 1.0000000076286752,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '0025c486-d9eb-4820-9b95-f48a97c51d9b'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b507af42-4ef7-4cb6-8df1-236d9abc4832',\n",
|
||
" 'score': 1.000000059988928,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '1531d1cb-3f68-46d7-a366-48d19f26bc93'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': '3a47799d-afa6-4ff0-b34b-627c81e46059',\n",
|
||
" 'score': 0.999999997458257,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '2b18da1f-bd6f-49a6-b058-0387898dc5dc'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b0a798cb-39c3-4cab-a67c-778bc4e2df21',\n",
|
||
" 'score': 1.000000011544502,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '5fddebc9-5092-46b6-9fa3-8c6170eb2e16'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'c61a5496-bb75-445c-9ae4-a4cca37cd794',\n",
|
||
" 'score': 0.9999999990559993,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '0d22c2e8-a39b-4c71-abe6-88a90cdfd65d'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b',\n",
|
||
" 'score': 0.9999325716139726,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '58b37c6f-1574-4b93-8ee5-16a22f01aa41'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b086b7b2-daf2-47f2-9a1e-35812afd9313',\n",
|
||
" 'score': 0.9999999766141177,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'c7bea689-6862-482a-b156-4fc1be3fa07f'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': '1b10518f-3973-4f79-9dab-3ef238c2cbaa',\n",
|
||
" 'score': 1.000000063164407,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '69dea290-4f26-495f-b6df-c994d6de5f69'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': '59cca039-7f8b-4da5-b67d-51ac14e7c74c',\n",
|
||
" 'score': 0.9999999750870483,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '0f371d44-7362-434d-843f-813add8f25c6'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b507af42-4ef7-4cb6-8df1-236d9abc4832',\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '3a6f81c3-ecdc-483e-88dd-59068ae332b1'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b',\n",
|
||
" 'score': 0.9382967722184876,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b086b7b2-daf2-47f2-9a1e-35812afd9313',\n",
|
||
" 'score': 0.9031738514995704,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '9872ba50-8783-49b4-8fc4-9c53aae7cf57'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b507af42-4ef7-4cb6-8df1-236d9abc4832',\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'f38b0084-b074-4e47-ae66-cccb9827a87f'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b',\n",
|
||
" 'score': 0.9382967722184876,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '88635a41-2a86-4bcc-bd34-affe7e302208'},\n",
|
||
" {'collection_name_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982',\n",
|
||
" 'searched_node_id': 'b086b7b2-daf2-47f2-9a1e-35812afd9313',\n",
|
||
" 'score': 0.9031738514995704,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '13374d73-bb3b-4e2f-8a94-ff90f0056970'}],\n",
|
||
" 'd0c2bd1c-7cec-4e5a-af13-dbb655623dda': [],\n",
|
||
" 'ccf6645e-9fad-441b-821d-b1d47b93ebca': [],\n",
|
||
" '6fb85c94-f488-4f31-8e7c-a5905580a78c': [{'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '3a6f81c3-ecdc-483e-88dd-59068ae332b1',\n",
|
||
" 'score': 0.9515395892645451,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '1531d1cb-3f68-46d7-a366-48d19f26bc93'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6',\n",
|
||
" 'score': 0.9388291030193505,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '58b37c6f-1574-4b93-8ee5-16a22f01aa41'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '9872ba50-8783-49b4-8fc4-9c53aae7cf57',\n",
|
||
" 'score': 0.9031739051820826,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'c7bea689-6862-482a-b156-4fc1be3fa07f'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '3a6f81c3-ecdc-483e-88dd-59068ae332b1',\n",
|
||
" 'score': 0.9512102439110068,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b507af42-4ef7-4cb6-8df1-236d9abc4832'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6',\n",
|
||
" 'score': 0.9388291030193505,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '9872ba50-8783-49b4-8fc4-9c53aae7cf57',\n",
|
||
" 'score': 0.9031739051820826,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'b086b7b2-daf2-47f2-9a1e-35812afd9313'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '49ab2d1b-9163-485f-81c8-8667fc707554',\n",
|
||
" 'score': 1.0000000150401713,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '7c87ffb5-0359-4421-8e03-61457119ca4b'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '3a6f81c3-ecdc-483e-88dd-59068ae332b1',\n",
|
||
" 'score': 1.0000000663828739,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'f38b0084-b074-4e47-ae66-cccb9827a87f'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '5560940a-8504-40bc-94d4-71aa399af5ab',\n",
|
||
" 'score': 1.000000017737942,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': 'a942b1b8-7ff2-4177-83ef-022bb69affac'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': 'ff3446b4-59ea-4ef9-969a-4afac7706aa6',\n",
|
||
" 'score': 1.000000001710429,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '88635a41-2a86-4bcc-bd34-affe7e302208'},\n",
|
||
" {'collection_name_uuid': '6fb85c94-f488-4f31-8e7c-a5905580a78c',\n",
|
||
" 'searched_node_id': '9872ba50-8783-49b4-8fc4-9c53aae7cf57',\n",
|
||
" 'score': 1.0000000355409906,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'original_id_for_search': '13374d73-bb3b-4e2f-8a94-ff90f0056970'}],\n",
|
||
" '67200cb4-16fc-40f9-b231-c9e720aeb14a': []}"
|
||
]
|
||
},
|
||
"execution_count": 426,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"relationship_d"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 354,
|
||
"id": "42e6095b-7b75-4e9d-96c2-f45ca5bdf4bb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import networkx as nx\n",
|
||
"import pytest\n",
|
||
"\n",
|
||
"def test_connect_nodes_in_graph():\n",
|
||
" # Create a mock graph\n",
|
||
" G = nx.Graph()\n",
|
||
" \n",
|
||
" # Add nodes that will be referenced in the relationship_dict\n",
|
||
" # Use the 'id' attribute to match nodes, as used in the connect_nodes_in_graph function\n",
|
||
" G.add_node(\"node1\", id=\"1531d1cb-3f68-46d7-a366-48d19f26bc93\")\n",
|
||
" G.add_node(\"node2\", id=\"58b37c6f-1574-4b93-8ee5-16a22f01aa41\")\n",
|
||
"\n",
|
||
" # Define the relationship_dict based on your test set\n",
|
||
" relationship_dict = {\n",
|
||
" '83b60dcf-0a04-474f-962b-121cc518e610': [\n",
|
||
" {\n",
|
||
" 'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93', # Matches 'node1'\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'score_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41', # Matches 'node2'\n",
|
||
" }\n",
|
||
" ]\n",
|
||
" }\n",
|
||
"\n",
|
||
" # Call the function under test\n",
|
||
" connect_nodes_in_graph(G, relationship_dict)\n",
|
||
"\n",
|
||
" # Assert that the edge has been created as expected between 'node1' and 'node2'\n",
|
||
" assert G.has_edge(\"node1\", \"node2\")\n",
|
||
" assert G[\"node1\"][\"node2\"][\"weight\"] == 0.9515395831652365\n",
|
||
" assert G[\"node1\"][\"node2\"][\"score_metadata\"] is None\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "29b1bbe8-de2f-4b0c-9ae1-16e5547e1544",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 355,
|
||
"id": "f66f9940-9792-4600-a804-ab649384f6d9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"test_connect_nodes_in_graph()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 428,
|
||
"id": "97302500-241e-41b3-9355-4523bcb4d01b",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"def connect_nodes_in_graph(graph, relationship_dict):\n",
|
||
" \"\"\"\n",
|
||
" For each relationship in relationship_dict, check if both nodes exist in the graph based on node attributes.\n",
|
||
" If they do, create a connection (edge) between them.\n",
|
||
"\n",
|
||
" :param graph: A NetworkX graph object\n",
|
||
" :param relationship_dict: A dictionary containing relationships between nodes\n",
|
||
" \"\"\"\n",
|
||
" for id, relationships in relationship_dict.items():\n",
|
||
" for relationship in relationships:\n",
|
||
" searched_node_attr_id = relationship['searched_node_id']\n",
|
||
" print(searched_node_attr_id)\n",
|
||
" score_attr_id = relationship['original_id_for_search']\n",
|
||
" score = relationship['score']\n",
|
||
" \n",
|
||
"\n",
|
||
" # Initialize node keys for both searched_node and score_node\n",
|
||
" searched_node_key, score_node_key = None, None\n",
|
||
"\n",
|
||
" # Find nodes in the graph that match the searched_node_id and score_id from their attributes\n",
|
||
" for node, attrs in graph.nodes(data=True):\n",
|
||
" if 'id' in attrs: # Ensure there is an 'id' attribute\n",
|
||
" if attrs['id'] == searched_node_attr_id:\n",
|
||
" searched_node_key = node\n",
|
||
" elif attrs['id'] == score_attr_id:\n",
|
||
" score_node_key = node\n",
|
||
"\n",
|
||
" # If both nodes are found, no need to continue checking other nodes\n",
|
||
" if searched_node_key and score_node_key:\n",
|
||
" break\n",
|
||
"\n",
|
||
" # Check if both nodes were found in the graph\n",
|
||
" if searched_node_key is not None and score_node_key is not None:\n",
|
||
" print(searched_node_key)\n",
|
||
" print(score_node_key)\n",
|
||
" # If both nodes exist, create an edge between them\n",
|
||
" # You can customize the edge attributes as needed, here we use 'score' as an attribute\n",
|
||
" graph.add_edge(searched_node_key, score_node_key, weight=score, score_metadata=relationship.get('score_metadata'))\n",
|
||
"\n",
|
||
" return graph\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "9266a9f7-06ce-4586-acd9-7c70056675f3",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 371,
|
||
"id": "450ba952-192e-40aa-a51e-0bf0d28b6e12",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"rel_s = {'83b60dcf-0a04-474f-962b-121cc518e610': [{'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93',\n",
|
||
" 'score': 0.9515395831652365,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'score_id': '1531d1cb-3f68-46d7-a366-48d19f26bc93'},\n",
|
||
" {'collection_name_uuid': '83b60dcf-0a04-474f-962b-121cc518e610',\n",
|
||
" 'searched_node_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41',\n",
|
||
" 'score': 0.9383203721228301,\n",
|
||
" 'score_metadata': None,\n",
|
||
" 'score_id': '58b37c6f-1574-4b93-8ee5-16a22f01aa41'}]}"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 432,
|
||
"id": "750c651c-2b95-44ae-83e3-4ae4257781e1",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" Node 1 ID \\\n",
|
||
"108 Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0025c486-d9eb-4820-9b95-f48a97c51d9b \n",
|
||
"\n",
|
||
" Node 2 ID \\\n",
|
||
"108 Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a \n",
|
||
"\n",
|
||
" Weight \\\n",
|
||
"108 0.999995 \n",
|
||
"\n",
|
||
" Node 1 Metadata \\\n",
|
||
"108 {'created_at': '2024-03-04 20:28:37', 'updated_at': '2024-03-04 20:28:37', 'description': 'Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.', 'category': 'person', 'memory_type': 'episodic', 'layer_uuid': 'd0fde4d0-c358-44b2-b698-a19314a336e0', 'layer_decomposition_uuid': '83b60dcf-0a04-474f-962b-121cc518e610', 'id': '0025c486-d9eb-4820-9b95-f48a97c51d9b', 'type': 'detail'} \n",
|
||
"\n",
|
||
" Node 2 Metadata \\\n",
|
||
"108 {'created_at': '2024-03-04 20:28:37', 'updated_at': '2024-03-04 20:28:37', 'description': 'Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.', 'category': 'person', 'memory_type': 'episodic', 'layer_uuid': 'd0fde4d0-c358-44b2-b698-a19314a336e0', 'layer_decomposition_uuid': '92562711-f2a9-4ce6-9c7d-d5226080f982', 'id': '15d3a8af-4e1a-4c3f-9d29-9c46723fd03a', 'type': 'detail'} \n",
|
||
"\n",
|
||
" Edge Score Metadata \n",
|
||
"108 None \n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import networkx as nx\n",
|
||
"\n",
|
||
"pd.set_option('display.max_rows', None) # Show all rows\n",
|
||
"pd.set_option('display.max_columns', None) # Show all columns\n",
|
||
"pd.set_option('display.width', None) # Use maximum possible width to display\n",
|
||
"pd.set_option('display.max_colwidth', None) # Display full content of each column\n",
|
||
"\n",
|
||
"\n",
|
||
"# Assuming G is your graph object already populated with nodes and edges by connect_nodes_in_graph\n",
|
||
"\n",
|
||
"# Step 1: Traverse the graph and collect data\n",
|
||
"data = []\n",
|
||
"for (node1, node2, attr) in CONNECTED_GRAPH.edges(data=True):\n",
|
||
" node1_data = CONNECTED_GRAPH.nodes[node1] # Get metadata for node1\n",
|
||
" node2_data = CONNECTED_GRAPH.nodes[node2] # Get metadata for node2\n",
|
||
" \n",
|
||
" # Collect information: node IDs, edge weight, and any other relevant metadata\n",
|
||
" edge_info = {\n",
|
||
" 'Node 1 ID': node1,\n",
|
||
" 'Node 2 ID': node2,\n",
|
||
" 'Weight': attr.get('weight', None), # Get the weight of the edge\n",
|
||
" 'Node 1 Metadata': node1_data, # Assuming there's meaningful metadata in the graph's nodes\n",
|
||
" 'Node 2 Metadata': node2_data,\n",
|
||
" 'Edge Score Metadata': attr.get('score_metadata', None) # Edge-specific metadata if available\n",
|
||
" }\n",
|
||
" data.append(edge_info)\n",
|
||
"\n",
|
||
"# Step 2: Create a pandas DataFrame from the collected data\n",
|
||
"df = pd.DataFrame(data)\n",
|
||
"df_filtered = df.dropna(subset=['Weight'])\n",
|
||
"\n",
|
||
"# Display the DataFrame\n",
|
||
"print(df_filtered.head(1))\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 429,
|
||
"id": "2c344176-8f70-4a0c-b528-0e85ed810984",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"0025c486-d9eb-4820-9b95-f48a97c51d9b\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0025c486-d9eb-4820-9b95-f48a97c51d9b\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a\n",
|
||
"1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"2b18da1f-bd6f-49a6-b058-0387898dc5dc\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 2b18da1f-bd6f-49a6-b058-0387898dc5dc\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 3a47799d-afa6-4ff0-b34b-627c81e46059\n",
|
||
"5fddebc9-5092-46b6-9fa3-8c6170eb2e16\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 5fddebc9-5092-46b6-9fa3-8c6170eb2e16\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b0a798cb-39c3-4cab-a67c-778bc4e2df21\n",
|
||
"0d22c2e8-a39b-4c71-abe6-88a90cdfd65d\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - c61a5496-bb75-445c-9ae4-a4cca37cd794\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 1b10518f-3973-4f79-9dab-3ef238c2cbaa\n",
|
||
"0f371d44-7362-434d-843f-813add8f25c6\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0f371d44-7362-434d-843f-813add8f25c6\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 59cca039-7f8b-4da5-b67d-51ac14e7c74c\n",
|
||
"1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"18b461fc-af3d-4e67-8cdb-3a02eb42192c\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 18b461fc-af3d-4e67-8cdb-3a02eb42192c\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 504729be-4ffc-493a-9cc8-1ae4ffc799e1\n",
|
||
"3a63bd68-0238-4865-9ea1-d7f88f58d6e8\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 3a63bd68-0238-4865-9ea1-d7f88f58d6e8\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 517b7476-e446-4986-8445-0a2cb14e543f\n",
|
||
"b168a539-5398-4588-b4a4-6963c73b5526\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - b168a539-5398-4588-b4a4-6963c73b5526\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 13a45934-879a-4fe4-90e9-0a5277e56297\n",
|
||
"99675528-5a7f-4941-b378-87b03e151cf4\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 99675528-5a7f-4941-b378-87b03e151cf4\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 3fce46e3-8006-4940-bc47-e011408f663c\n",
|
||
"6ebecd15-37bd-4553-9c33-89df1fea543c\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 6ebecd15-37bd-4553-9c33-89df1fea543c\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 939465bc-c763-4122-9328-984c5c59f712\n",
|
||
"90cde4a1-7b75-4e61-844f-5a5f5e602690\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 90cde4a1-7b75-4e61-844f-5a5f5e602690\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 3cc5365b-b9e7-46d7-81c8-e125af634e32\n",
|
||
"f866a9f5-3b89-418e-a94b-37923e0c4982\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - f866a9f5-3b89-418e-a94b-37923e0c4982\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 4aa02775-42e7-41d5-b91f-1f8a764657ed\n",
|
||
"f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"7c87ffb5-0359-4421-8e03-61457119ca4b\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 7c87ffb5-0359-4421-8e03-61457119ca4b\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 49ab2d1b-9163-485f-81c8-8667fc707554\n",
|
||
"f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"a942b1b8-7ff2-4177-83ef-022bb69affac\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - a942b1b8-7ff2-4177-83ef-022bb69affac\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 5560940a-8504-40bc-94d4-71aa399af5ab\n",
|
||
"88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"504729be-4ffc-493a-9cc8-1ae4ffc799e1\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 504729be-4ffc-493a-9cc8-1ae4ffc799e1\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 18b461fc-af3d-4e67-8cdb-3a02eb42192c\n",
|
||
"517b7476-e446-4986-8445-0a2cb14e543f\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 517b7476-e446-4986-8445-0a2cb14e543f\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 3a63bd68-0238-4865-9ea1-d7f88f58d6e8\n",
|
||
"13a45934-879a-4fe4-90e9-0a5277e56297\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 13a45934-879a-4fe4-90e9-0a5277e56297\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - b168a539-5398-4588-b4a4-6963c73b5526\n",
|
||
"3fce46e3-8006-4940-bc47-e011408f663c\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 3fce46e3-8006-4940-bc47-e011408f663c\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 99675528-5a7f-4941-b378-87b03e151cf4\n",
|
||
"939465bc-c763-4122-9328-984c5c59f712\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 939465bc-c763-4122-9328-984c5c59f712\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 6ebecd15-37bd-4553-9c33-89df1fea543c\n",
|
||
"3cc5365b-b9e7-46d7-81c8-e125af634e32\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 3cc5365b-b9e7-46d7-81c8-e125af634e32\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - 90cde4a1-7b75-4e61-844f-5a5f5e602690\n",
|
||
"4aa02775-42e7-41d5-b91f-1f8a764657ed\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 3f7bb086-5ffc-4f61-8b5d-dcd2e708d01d - 4aa02775-42e7-41d5-b91f-1f8a764657ed\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 796b74e7-f6a6-4d0e-a4d3-4e72212f8b1f - f866a9f5-3b89-418e-a94b-37923e0c4982\n",
|
||
"15d3a8af-4e1a-4c3f-9d29-9c46723fd03a\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 15d3a8af-4e1a-4c3f-9d29-9c46723fd03a\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0025c486-d9eb-4820-9b95-f48a97c51d9b\n",
|
||
"b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"3a47799d-afa6-4ff0-b34b-627c81e46059\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 3a47799d-afa6-4ff0-b34b-627c81e46059\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 2b18da1f-bd6f-49a6-b058-0387898dc5dc\n",
|
||
"b0a798cb-39c3-4cab-a67c-778bc4e2df21\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b0a798cb-39c3-4cab-a67c-778bc4e2df21\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 5fddebc9-5092-46b6-9fa3-8c6170eb2e16\n",
|
||
"c61a5496-bb75-445c-9ae4-a4cca37cd794\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - c61a5496-bb75-445c-9ae4-a4cca37cd794\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0d22c2e8-a39b-4c71-abe6-88a90cdfd65d\n",
|
||
"e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"1b10518f-3973-4f79-9dab-3ef238c2cbaa\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 1b10518f-3973-4f79-9dab-3ef238c2cbaa\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"59cca039-7f8b-4da5-b67d-51ac14e7c74c\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - 59cca039-7f8b-4da5-b67d-51ac14e7c74c\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 0f371d44-7362-434d-843f-813add8f25c6\n",
|
||
"b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n",
|
||
"3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 1531d1cb-3f68-46d7-a366-48d19f26bc93\n",
|
||
"ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - 58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 83b60dcf-0a04-474f-962b-121cc518e610 - c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b507af42-4ef7-4cb6-8df1-236d9abc4832\n",
|
||
"ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - e0a882a8-f8b1-4a9f-b154-fa061eaa684b\n",
|
||
"9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 92562711-f2a9-4ce6-9c7d-d5226080f982 - b086b7b2-daf2-47f2-9a1e-35812afd9313\n",
|
||
"49ab2d1b-9163-485f-81c8-8667fc707554\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 49ab2d1b-9163-485f-81c8-8667fc707554\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 7c87ffb5-0359-4421-8e03-61457119ca4b\n",
|
||
"3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 3a6f81c3-ecdc-483e-88dd-59068ae332b1\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - f38b0084-b074-4e47-ae66-cccb9827a87f\n",
|
||
"5560940a-8504-40bc-94d4-71aa399af5ab\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 5560940a-8504-40bc-94d4-71aa399af5ab\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - a942b1b8-7ff2-4177-83ef-022bb69affac\n",
|
||
"ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - ff3446b4-59ea-4ef9-969a-4afac7706aa6\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 88635a41-2a86-4bcc-bd34-affe7e302208\n",
|
||
"9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 6fb85c94-f488-4f31-8e7c-a5905580a78c - 9872ba50-8783-49b4-8fc4-9c53aae7cf57\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills. - d0fde4d0-c358-44b2-b698-a19314a336e0 - 84fa9b73-12c0-4486-a0eb-3a03a81ca135 - 13374d73-bb3b-4e2f-8a94-ff90f0056970\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"CONNECTED_GRAPH = connect_nodes_in_graph(R, relationship_d)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e86c07ad-0597-48ad-a9bb-f99d45297beb",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 317,
|
||
"id": "fce71784-66c3-4e96-8dbe-01b52478312d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"The graph has 142 edges.\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"num_edges = CONNECTED_GRAPH.number_of_edges()\n",
|
||
"print(f\"The graph has {num_edges} edges.\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 318,
|
||
"id": "1497b257-70f3-4eb1-94f5-fa234eafd574",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" source target relationship description\n",
|
||
"0 user123 Temporal created NaN\n",
|
||
"1 user123 Positional created NaN\n",
|
||
"2 user123 Propositions created NaN\n",
|
||
"3 user123 Personalization created NaN\n",
|
||
"4 user123 Natural Language Text created NaN\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"edges = nx.to_pandas_edgelist(CONNECTED_GRAPH)\n",
|
||
"print(edges.head())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 319,
|
||
"id": "6e2c0c8b-bbcf-43f1-a980-8122e195b48c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Matching Node Keys: []\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"target_id = '31bf1fcd-1b58-4402-aa51-66f9a5ae09e9'\n",
|
||
"\n",
|
||
"# Find the node key(s) with this ID\n",
|
||
"matching_nodes = [node for node, attrs in CONNECTED_GRAPH.nodes(data=True) if attrs.get('id') == target_id]\n",
|
||
"\n",
|
||
"print(\"Matching Node Keys:\", matching_nodes)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 320,
|
||
"id": "d1197355-706a-4b53-8238-3b599e2723c6",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"No node found with ID 31bf1fcd-1b58-4402-aa51-66f9a5ae09e9\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"target_id = '31bf1fcd-1b58-4402-aa51-66f9a5ae09e9'\n",
|
||
"\n",
|
||
"# Find the node key(s) with this ID (assuming IDs are unique, there should be only one match)\n",
|
||
"matching_node_key = None\n",
|
||
"for node, attrs in CONNECTED_GRAPH.nodes(data=True):\n",
|
||
" if attrs.get('id') == target_id:\n",
|
||
" matching_node_key = node\n",
|
||
" break\n",
|
||
"\n",
|
||
"# If a matching node is found, list all nodes it's connected to\n",
|
||
"if matching_node_key is not None:\n",
|
||
" connected_nodes = set([connected_node for _, connected_node in CONNECTED_GRAPH.edges(matching_node_key)])\n",
|
||
" print(f\"Node with ID {target_id} (key: {matching_node_key}) connects to nodes: {connected_nodes}\")\n",
|
||
"else:\n",
|
||
" print(f\"No node found with ID {target_id}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 433,
|
||
"id": "488dfddc-3774-4f8c-9478-117b94fc70f9",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"\n",
|
||
" <iframe id=\"2d690ffe-ece8-42b7-bc46-6d83be2ea182\" src=\"https://hub.graphistry.com/graph/graph.html?dataset=f14855a5888d4611b05a160d4ca444b4&type=arrow&viztoken=dc57ebed-4930-4a3e-ab45-9cdb5db57f4a&usertag=1daaf574-pygraphistry-0.33.0&splashAfter=1709657655&info=true\"\n",
|
||
" allowfullscreen=\"true\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\"\n",
|
||
" oallowfullscreen=\"true\" msallowfullscreen=\"true\"\n",
|
||
" style=\"width:100%; height:500px; border: 1px solid #DDD; overflow: hidden\"\n",
|
||
" \n",
|
||
" >\n",
|
||
" </iframe>\n",
|
||
" \n",
|
||
" <script>\n",
|
||
" try {\n",
|
||
" $(\"#2d690ffe-ece8-42b7-bc46-6d83be2ea182\").bind('mousewheel', function(e) { e.preventDefault(); });\n",
|
||
" } catch (e) { console.error('exn catching scroll', e); }\n",
|
||
" </script>\n",
|
||
" "
|
||
],
|
||
"text/plain": [
|
||
"<IPython.core.display.HTML object>"
|
||
]
|
||
},
|
||
"execution_count": 433,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import graphistry\n",
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# Assuming Graphistry is already configured with API key\n",
|
||
"# graphistry.register(api=3, username='your_username', password='your_password')\n",
|
||
"\n",
|
||
"# Convert NetworkX graph to a Pandas DataFrame\n",
|
||
"edges = nx.to_pandas_edgelist(CONNECTED_GRAPH)\n",
|
||
"graphistry.register(api=3, username='Vasilije1990', password='Q@HLdgv5SMUsGxy') \n",
|
||
"\n",
|
||
"# Visualize the graph\n",
|
||
"graphistry.edges(edges, 'source', 'target').plot()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "11afb7e6-165d-46d3-8a09-7673bf7d6e8e",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "50b67330-db2f-45ab-86a9-7170564c56de",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"## SEARCH \n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "36354c1f-17c3-419a-9c71-4618d2bde8ed",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"#pre filtering\n",
|
||
"# each semantic layer -> make categories, dimensions, on semantic layer given on the LLM\n",
|
||
"# weights need to be used topk and cutoff\n",
|
||
"# entry through entities\n",
|
||
"# combine unstructured and structured\n",
|
||
"# address / entrypoint node/ "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "8cfe6574-e079-495b-b820-1b361d62c25d",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "17d27c7b-5a6d-4ef4-b785-76f5c239afc1",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# add meaning to relationships\n",
|
||
"# check interlayer relationships\n",
|
||
"# move shit to prod"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "de42394d-7a4c-46ac-9a08-6fb2911c11b9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 453,
|
||
"id": "0c33237a-fee9-4480-81cc-d17b5ec497bf",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'27a76d52-5b5e-4e8e-8726-29be55c8b2f1',\n",
|
||
" '48c1a502-48b1-4240-87ac-6558d41e1b6f',\n",
|
||
" '4ef6847a-7036-4861-8df6-a209c53038ca',\n",
|
||
" '771e3cc9-fb2f-422e-a8f8-e067d6b44e34',\n",
|
||
" '7b147696-3654-4e4c-b177-da5a1b44a2c0',\n",
|
||
" '92ae1b09-3dfb-4e0b-920d-83341d1d8c7b',\n",
|
||
" '97597864-a11a-4058-b854-8f21864c7e06',\n",
|
||
" 'b40f5ed5-45cf-43f5-902c-d4928743f8fd',\n",
|
||
" 'c306c248-bbab-44a9-9ae2-448f992e415c',\n",
|
||
" 'dbcbc6c6-db82-48f3-8fa9-e3d372ff3483',\n",
|
||
" 'e81660f7-b9a2-4266-a468-404a49b05888',\n",
|
||
" 'f3b1dd35-0640-40a0-a664-fb037aeb43c7'}"
|
||
]
|
||
},
|
||
"execution_count": 453,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"unique_layer_uuids"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 332,
|
||
"id": "1992d379-9dab-4839-a33a-21861c8c8864",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"async def find_relevant_chunks(query,unique_layer_uuids):\n",
|
||
" out = []\n",
|
||
" query = await get_embeddings(query)\n",
|
||
" # print(query)\n",
|
||
" for id in unique_layer_uuids:\n",
|
||
" result = qdrant_search(id, query[0])\n",
|
||
"\n",
|
||
" if result:\n",
|
||
" result_ = [ result_.id for result_ in result]\n",
|
||
" score_ = [ result_.score for result_ in result]\n",
|
||
" \n",
|
||
" out.append([result_, score_])\n",
|
||
"\n",
|
||
" return out\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 333,
|
||
"id": "139bb41c-ef21-4558-9142-eae912a56c58",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"val = await find_relevant_chunks('uk', unique_layer_uuids)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 334,
|
||
"id": "2e81754a-2a2c-4a51-a678-5fff298d9fe7",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[[['c7bea689-6862-482a-b156-4fc1be3fa07f', '58b37c6f-1574-4b93-8ee5-16a22f01aa41', '69dea290-4f26-495f-b6df-c994d6de5f69'], [0.10496980604641798, 0.08607680886252467, 0.08296533762140104]], [['6ebecd15-37bd-4553-9c33-89df1fea543c', 'b168a539-5398-4588-b4a4-6963c73b5526', '99675528-5a7f-4941-b378-87b03e151cf4'], [0.10060454880247681, 0.09422832938531824, 0.09048113259735407]], [['13374d73-bb3b-4e2f-8a94-ff90f0056970', '88635a41-2a86-4bcc-bd34-affe7e302208', '7c87ffb5-0359-4421-8e03-61457119ca4b'], [0.1105763743356234, 0.08263447659128495, 0.07497919232031232]], [['939465bc-c763-4122-9328-984c5c59f712', '13a45934-879a-4fe4-90e9-0a5277e56297', '3fce46e3-8006-4940-bc47-e011408f663c'], [0.10060454880247681, 0.09420080324132485, 0.09046091116775384]], [['b086b7b2-daf2-47f2-9a1e-35812afd9313', 'e0a882a8-f8b1-4a9f-b154-fa061eaa684b', '1b10518f-3973-4f79-9dab-3ef238c2cbaa'], [0.10496980604641798, 0.08606484768040133, 0.0831070520843658]], [['4dd3cb46-ca57-46ca-9781-e8b917491720', '7ee6f0a7-cf4a-4659-a886-1f0b40d75b97', 'bce65459-262a-4a6b-a319-5deb8e6d0d96'], [0.11607958908310784, 0.0879278593824074, 0.08666557927817456]], [['f800260d-6de1-4a5f-a501-f5d58f3258c3', '9dce0831-6e87-4fd9-93ba-e6944b22929b', 'a75bae98-0748-4c4d-b807-5d3e19a9d638'], [0.07682790557037841, 0.0752726545054383, 0.06904576598032586]], [['2d588b35-062e-44e7-bbb2-1642ba0411e3', '6a34c9bd-0dee-4db0-8258-86d2dd87303d', '630b58dd-65f6-4d55-b3fc-67b59d696b4c'], [0.08260691278813655, 0.0642977938657605, 0.06420510357558001]], [['9872ba50-8783-49b4-8fc4-9c53aae7cf57', 'ff3446b4-59ea-4ef9-969a-4afac7706aa6', '49ab2d1b-9163-485f-81c8-8667fc707554'], [0.11060872514096692, 0.08261564014738146, 0.07497919232031232]]]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"print(val)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 335,
|
||
"id": "aedb2c4b-1af6-4663-8a7d-cf8bbfb3dc77",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"def fetch_context(CONNECTED_GRAPH, id):\n",
|
||
" relevant_context = []\n",
|
||
" for n,attr in CONNECTED_GRAPH.nodes(data=True):\n",
|
||
" if id in n:\n",
|
||
" for n_, attr_ in CONNECTED_GRAPH.nodes(data=True):\n",
|
||
" relevant_layer = attr['layer_uuid']\n",
|
||
"\n",
|
||
" if attr_.get('layer_uuid') == relevant_layer:\n",
|
||
" print(attr_['description'])\n",
|
||
" relevant_context.append(attr_['description'])\n",
|
||
"\n",
|
||
" return relevant_context\n",
|
||
"\n",
|
||
" \n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 336,
|
||
"id": "4f17da0f-749e-4543-9213-24bdaa31a85b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"c7bea689-6862-482a-b156-4fc1be3fa07f\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n",
|
||
"58b37c6f-1574-4b93-8ee5-16a22f01aa41\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n",
|
||
"69dea290-4f26-495f-b6df-c994d6de5f69\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n",
|
||
"Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.\n",
|
||
"Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.\n",
|
||
"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\n",
|
||
"The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.\n",
|
||
"An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.\n",
|
||
"Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.\n",
|
||
"Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.\n",
|
||
"A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.\n",
|
||
"The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.\n",
|
||
"Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.\n",
|
||
"Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.\n",
|
||
"An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.\n",
|
||
"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\n",
|
||
"Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.\n",
|
||
"Lee Parkin, a 50-year-old man, owner of Izzy.\n",
|
||
"Izzy, a terrier-spaniel cross owned by Lee Parkin.\n",
|
||
"XL bully, a type of dog that attacked Izzy and Naevia.\n",
|
||
"Marie Hay, owner of a Siberian Husky named Naevia.\n",
|
||
"Naevia, a seven-year-old Siberian Husky owned by Marie Hay.\n",
|
||
"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\n",
|
||
"Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"context = []\n",
|
||
"\n",
|
||
"for v in val[0][0]:\n",
|
||
" print(v)\n",
|
||
" context.append(fetch_context(CONNECTED_GRAPH, id=v))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 337,
|
||
"id": "1007d1a9-19c4-4d02-a187-ad7c1c514e9d",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"[['Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.'],\n",
|
||
" ['Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.'],\n",
|
||
" ['Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin is a 50-year-old man who owned a terrier-spaniel cross named Izzy and has been diagnosed with post-traumatic stress disorder following a dog attack.',\n",
|
||
" 'Izzy was a terrier-spaniel cross dog owned by Lee Parkin for nearly 10 years, killed by an XL bully dog.',\n",
|
||
" \"A dog attack where an XL bully killed Lee Parkin's dog, Izzy, after a 20-minute attack despite intervention attempts by Lee Parkin and others.\",\n",
|
||
" 'The location where Lee Parkin lived and where the dog attack on his pet Izzy occurred.',\n",
|
||
" 'An XL bully is a type of dog that attacked and killed the terrier-spaniel cross Izzy, and also injured a Siberian husky named Naevia; described as dangerously out of control by Lee Parkin.',\n",
|
||
" 'Marie Hay is the owner of a Siberian husky named Naevia who survived an attack by two XL bullies and has been left with both physical and mental scars.',\n",
|
||
" 'Naevia is a seven-year-old Siberian husky owned by Marie Hay, who survived an attack by two XL bullies but suffered life-changing injuries and kidney failure.',\n",
|
||
" 'A dog attack on a beach in Redcar where Naevia, a Siberian husky, was severely injured by two XL bullies.',\n",
|
||
" 'The location on the North Yorkshire coast where Naevia the Siberian husky was attacked by two XL bullies.',\n",
|
||
" 'Lee Parkin, owner of a terrier-spaniel cross named Izzy, experienced a traumatic event with his pet and suffers from post-traumatic stress disorder.',\n",
|
||
" 'Izzy, a terrier-spaniel cross, was owned by Lee Parkin and was killed by an XL bully during a walk.',\n",
|
||
" 'An XL bully attacked and killed Izzy, a terrier-spaniel cross owned by Lee Parkin in Doncaster.',\n",
|
||
" \"Marie Hay's Siberian husky named Naevia survived an attack by two XL bullies but was left with life-changing injuries and subsequently developed mental scars.\",\n",
|
||
" 'Naevia, a Siberian husky owned by Marie Hay, survived an attack by two XL bullies on a beach in Redcar, resulting in life-changing injuries and causing significant vet bills.',\n",
|
||
" 'Lee Parkin, a 50-year-old man, owner of Izzy.',\n",
|
||
" 'Izzy, a terrier-spaniel cross owned by Lee Parkin.',\n",
|
||
" 'XL bully, a type of dog that attacked Izzy and Naevia.',\n",
|
||
" 'Marie Hay, owner of a Siberian Husky named Naevia.',\n",
|
||
" 'Naevia, a seven-year-old Siberian Husky owned by Marie Hay.',\n",
|
||
" \"Doncaster, the town where Lee Parkin's dog Izzy was killed by an XL bully.\",\n",
|
||
" 'Redcar Beach on the North Yorkshire coast, where Naevia was attacked by two XL bullies.']]"
|
||
]
|
||
},
|
||
"execution_count": 337,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"context"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "217fcdd1-e1f7-48f3-a835-cfd003bd6da9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "f974c87e-4117-4f93-a96c-e4fcd741aed9",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "8c9b14de-85f1-4aec-ab80-54e4b2a8f317",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "eebe4f53-c6ba-466a-8ba2-adee16fb6e21",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 400,
|
||
"id": "cca2637a-eace-4763-ada4-0ce925afd7ce",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "e67c6679-f339-4ad1-b1bc-0c896a973abe",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "418ef758-64e1-4c44-a844-9e3960d9db50",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "675e2037-65a8-4f97-974a-1bfc8789ea78",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"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.11.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|