{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "07f255d7", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd \n", "import numpy as np\n", "import os\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import sys\n", "sys.path.append(\"C:/git/climate-question-answering\")\n", "sys.path.append(\"/mnt/c/git/climate-question-answering\")\n", "\n", "from dotenv import load_dotenv\n", "load_dotenv()" ] }, { "cell_type": "markdown", "id": "4c9258cc-3800-4485-bdd8-889b299b9133", "metadata": {}, "source": [ "# Import objects" ] }, { "cell_type": "code", "execution_count": 2, "id": "6af1a96e", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.llm import get_llm\n", "from climateqa.engine.llm.ollama import get_llm as get_llm_ollama\n", "\n", "llm = get_llm(provider=\"openai\")\n", "# llm = get_llm_ollama(model = \"llama3\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "a9128bfc-4b24-4b25-b7a7-68423b1124b1", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/theolvs/.local/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loading FlashRankRanker model ms-marco-TinyBERT-L-2-v2\n", "Loading model FlashRank model ms-marco-TinyBERT-L-2-v2...\n" ] } ], "source": [ "from climateqa.engine.reranker import get_reranker\n", "\n", "# reranker = get_reranker(\"large\")\n", "reranker = get_reranker(\"nano\")\n", "# from rerankers import Reranker\n", "# # Specific flashrank model.\n", "# # reranker = Reranker('ms-marco-TinyBERT-L-2-v2', model_type='flashrank')\n", "# # reranker = Reranker('ms-marco-MiniLM-L-12-v2', model_type='flashrank')\n", "# # reranker = Reranker('cross-encoder/ms-marco-MiniLM-L-4-v2', model_type='cross-encoder')\n", "# # reranker = Reranker(\"mixedbread-ai/mxbai-rerank-xsmall-v1\", model_type='cross-encoder')\n", "# # reranker = Reranker(\"mixedbread-ai/mxbai-rerank-xsmall-v1\", model_type='cross-encoder')\n", "# reranker = Reranker(\"cohere\", lang='en', api_key = \"XXX\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "942d2705-22dd-46cf-8c31-6daa127e4743", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loading embeddings model: BAAI/bge-base-en-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: BAAI/bge-base-en-v1.5\n", "INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: cuda\n", "/home/theolvs/miniconda3/envs/climateqa/lib/python3.10/site-packages/langchain_core/_api/deprecation.py:119: LangChainDeprecationWarning: The class `Pinecone` was deprecated in LangChain 0.0.18 and will be removed in 0.2.0. An updated version of the class exists in the langchain-pinecone package and should be used instead. To use it run `pip install -U langchain-pinecone` and import as `from langchain_pinecone import Pinecone`.\n", " warn_deprecated(\n" ] } ], "source": [ "from climateqa.engine.vectorstore import get_pinecone_vectorstore\n", "from climateqa.engine.embeddings import get_embeddings_function\n", "from climateqa.knowledge.retriever import ClimateQARetriever\n", "\n", "embeddings_function = get_embeddings_function()\n", "vectorstore = get_pinecone_vectorstore(embeddings_function)" ] }, { "cell_type": "code", "execution_count": 5, "id": "882811c8-5890-4048-8630-d052c5179d7d", "metadata": {}, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 6, "id": "51aed81d-860b-409a-bae0-f0e1eeb0f120", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.is_available()" ] }, { "cell_type": "markdown", "id": "16eb91cb-3bfb-4c0c-b29e-753c954c2399", "metadata": {}, "source": [ "# Semantic Routing" ] }, { "cell_type": "code", "execution_count": 7, "id": "1e769371-1f8c-4f34-89c5-c0f9914d47a0", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.chains.intent_categorization import make_intent_categorization_chain" ] }, { "cell_type": "code", "execution_count": 8, "id": "480ad611-33c7-49ea-b02c-94d6ce1f1d1a", "metadata": { "tags": [] }, "outputs": [], "source": [ "cat_chain = make_intent_categorization_chain(llm)" ] }, { "cell_type": "code", "execution_count": 9, "id": "82cf49d9-d48e-4d5c-8666-bcc95f637371", "metadata": { "tags": [] }, "outputs": [], "source": [ "# for question in SAMPLE_QUESTIONS:\n", "# output = router_chain.invoke({\"input\":question})\n", "# print(question)\n", "# print(output)\n", "# print(\"-\"*100)\n", "# break" ] }, { "cell_type": "code", "execution_count": 10, "id": "d8ef7e0f-ac5f-4323-b02e-753ce2b4afda", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "data": { "text/plain": [ "{'intent': 'search'}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cat_chain.invoke({\"input\":\"Which industries have the highest GHG emissions?\"})" ] }, { "cell_type": "code", "execution_count": 11, "id": "a9c89f2d-c597-47b8-ae50-75eda964e609", "metadata": {}, "outputs": [], "source": [ "from climateqa.knowledge.openalex import OpenAlexRetriever\n", "from climateqa.engine.chains.keywords_extraction import make_keywords_extraction_chain" ] }, { "cell_type": "code", "execution_count": 12, "id": "0c609d34-5767-47a6-90a4-d5987e9499ee", "metadata": {}, "outputs": [], "source": [ "kec = make_keywords_extraction_chain(llm)" ] }, { "cell_type": "code", "execution_count": 13, "id": "5d781cd4-228b-462f-bd0e-55c02084a616", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] } ], "source": [ "output = kec.invoke(\"What is the environmental footprint of artificial intelligence\")" ] }, { "cell_type": "code", "execution_count": 14, "id": "553fd4d4-fe5a-4050-ae31-dffa2c7af7b2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'keywords': ['environmental footprint', 'artificial intelligence']}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output" ] }, { "cell_type": "code", "execution_count": 15, "id": "50a57f08-40e5-4419-8568-0739a13af904", "metadata": {}, "outputs": [], "source": [ "ROUTING_INDEX = {\n", " \"Vector\":[\"IPCC\",\"IPBES\",\"IPOS\"],\n", " \"OpenAlex\":[\"OpenAlex\"],\n", "}\n", "\n", "POSSIBLE_SOURCES = [y for values in ROUTING_INDEX.values() for y in values]" ] }, { "cell_type": "code", "execution_count": 16, "id": "6b45dd9c-58c3-4204-bf44-7b9eb35dcb9d", "metadata": {}, "outputs": [], "source": [ "questions = [\n", " {\"question\":\"What is climate change ?\",\"sources\":[\"IPCC\",\"IPBES\"]},\n", " {\"question\":\"What is the link between El Nino and climate change ?\",\"sources\":[\"IPCC\",\"OpenAlex\"]},\n", "]\n", "\n", "state = {\"remaining_questions\":questions,\"auto_mode\":False,\"sources_input\":[\"OpenAlex\"]}" ] }, { "cell_type": "code", "execution_count": 17, "id": "90b02a8e-6e67-4592-8bc7-959b544e914b", "metadata": {}, "outputs": [ { "ename": "ModuleNotFoundError", "evalue": "No module named 'climateqa.engine.chains.search'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[17], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mclimateqa\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mengine\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchains\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msearch\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m make_search_node\n\u001b[1;32m 3\u001b[0m start_search \u001b[38;5;241m=\u001b[39m make_search_node()\n", "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'climateqa.engine.chains.search'" ] } ], "source": [ "from climateqa.engine.chains.search import make_search_node\n", "\n", "start_search = make_search_node()" ] }, { "cell_type": "code", "execution_count": 18, "id": "347737d8-c4cb-45a7-9e5d-74d1a2e3f5a2", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'start_search' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[18], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m state\u001b[38;5;241m.\u001b[39mupdate(\u001b[43mstart_search\u001b[49m(state))\n\u001b[1;32m 2\u001b[0m state\n", "\u001b[0;31mNameError\u001b[0m: name 'start_search' is not defined" ] } ], "source": [ "state.update(start_search(state))\n", "state" ] }, { "cell_type": "code", "execution_count": 177, "id": "a27425de-1297-417a-af02-fba270df8e38", "metadata": {}, "outputs": [], "source": [ "from climateqa.engine.chains.retrieve_documents import make_retriever_node" ] }, { "cell_type": "code", "execution_count": 178, "id": "fde71c99-8bdd-4fd5-b36e-6804ec21bf2c", "metadata": {}, "outputs": [], "source": [ "retrieve = make_retriever_node(vectorstore,reranker,llm)" ] }, { "cell_type": "code", "execution_count": 179, "id": "cdad5b2f-2103-43d6-9d7f-e2addc2c2c3f", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "... OpenAlex query: climate change\n" ] } ], "source": [ "new_state = await retrieve.ainvoke(state)" ] }, { "cell_type": "code", "execution_count": 183, "id": "751a9a6a-8271-4e89-8754-e2065cd7d737", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7" ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(new_state[\"documents\"])" ] }, { "cell_type": "code", "execution_count": 182, "id": "06db606d-0b04-4e7d-9f55-4f7cefbce654", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'Document' object is not subscriptable", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[182], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mnew_state\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdocuments\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mreranking_score\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n", "\u001b[0;31mTypeError\u001b[0m: 'Document' object is not subscriptable" ] } ], "source": [ "new_state[\"documents\"][1][\"reranking_score\"]" ] }, { "cell_type": "code", "execution_count": 26, "id": "a5ed23f9-bbbe-4a0b-b919-429e08837765", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'IPCC'}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set([\"IPCC\",\"OpenAlex\"]).intersection(set([\"IPCC\",\"IPBES\",\"IPOS\"]))" ] }, { "cell_type": "code", "execution_count": 27, "id": "ca801dc5-958b-4392-88ac-5cb69e5f6fab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'question': \"C'est quoi le réchauffement?\",\n", " 'sources': ['IPCC', 'IPBES'],\n", " 'index': 'Vector'},\n", " {'question': \"C'est quoi le réchauffement?\",\n", " 'sources': ['OpenAlex'],\n", " 'index': 'OpenAlex'},\n", " {'question': \"C'est quoi le YOO?\", 'sources': ['IPBES'], 'index': 'Vector'},\n", " {'question': \"C'est quoi le YOO?\",\n", " 'sources': ['OpenAlex'],\n", " 'index': 'OpenAlex'}]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_questions = []\n", "\n", "for q in questions:\n", " question,sources = q[\"question\"],q[\"sources\"]\n", "\n", " for index,index_sources in ROUTING_INDEX.items():\n", " selected_sources = list(set(sources).intersection(index_sources))\n", " new_questions.append({\"question\":question,\"sources\":selected_sources,\"index\":index})\n", "\n", "new_questions" ] }, { "cell_type": "code", "execution_count": 199, "id": "6091ada7-851c-4ffc-859e-ea33a6fbb310", "metadata": {}, "outputs": [], "source": [ "oa = OpenAlex()" ] }, { "cell_type": "code", "execution_count": 216, "id": "8c5771bb-9074-45e0-afdb-f9eda2cb5ad4", "metadata": {}, "outputs": [], "source": [ "test = oa.search(\"warming AND impoverished communities\")" ] }, { "cell_type": "code", "execution_count": 217, "id": "5ef2094a-2e98-4ed9-b0a6-7536ae8057ca", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | id | \n", "doi | \n", "title | \n", "display_name | \n", "relevance_score | \n", "publication_year | \n", "publication_date | \n", "ids | \n", "language | \n", "primary_location | \n", "... | \n", "cited_by_api_url | \n", "counts_by_year | \n", "updated_date | \n", "created_date | \n", "abstract | \n", "is_oa | \n", "pdf_url | \n", "url | \n", "content | \n", "num_tokens | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "https://openalex.org/W2117777590 | \n", "https://doi.org/10.1111/j.1523-1739.1990.tb002... | \n", "The Onslaught of Alien Species, and Other Chal... | \n", "The Onslaught of Alien Species, and Other Chal... | \n", "155.607010 | \n", "1990 | \n", "1990-09-01 | \n", "{'openalex': 'https://openalex.org/W2117777590... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 1}, {'year':... | \n", "2024-07-01T21:42:17.592681 | \n", "2016-06-24 | \n", "Abstract: Among the many environmental challen... | \n", "False | \n", "None | \n", "https://openalex.org/W2117777590 | \n", "The Onslaught of Alien Species, and Other Chal... | \n", "231 | \n", "
1 | \n", "https://openalex.org/W2057596265 | \n", "https://doi.org/10.1016/j.bjid.2014.11.004 | \n", "Impact of human schistosomiasis in sub-Saharan... | \n", "Impact of human schistosomiasis in sub-Saharan... | \n", "136.459240 | \n", "2015 | \n", "2015-03-01 | \n", "{'openalex': 'https://openalex.org/W2057596265... | \n", "en | \n", "{'is_oa': True, 'landing_page_url': 'https://d... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 18}, {'year'... | \n", "2024-06-26T01:44:20.831726 | \n", "2016-06-24 | \n", "Schistosomiasis, a neglected tropical disease ... | \n", "True | \n", "None | \n", "https://openalex.org/W2057596265 | \n", "Impact of human schistosomiasis in sub-Saharan... | \n", "385 | \n", "
2 | \n", "https://openalex.org/W2094131597 | \n", "https://doi.org/10.1111/j.1472-4642.2010.00637.x | \n", "Half a century of succession in a temperate oa... | \n", "Half a century of succession in a temperate oa... | \n", "129.606600 | \n", "2010 | \n", "2010-02-21 | \n", "{'openalex': 'https://openalex.org/W2094131597... | \n", "en | \n", "{'is_oa': True, 'landing_page_url': 'https://d... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 8}, {'year':... | \n", "2024-07-01T13:42:04.986877 | \n", "2016-06-24 | \n", "Abstract Aim Lowland woodlands in Europe went ... | \n", "True | \n", "https://onlinelibrary.wiley.com/doi/pdfdirect/... | \n", "https://openalex.org/W2094131597 | \n", "Half a century of succession in a temperate oa... | \n", "394 | \n", "
3 | \n", "https://openalex.org/W2042539814 | \n", "https://doi.org/10.1080/0028825x.1964.10428748 | \n", "Facets of the distribution of forest vegetatio... | \n", "Facets of the distribution of forest vegetatio... | \n", "100.425010 | \n", "1964 | \n", "1964-12-01 | \n", "{'openalex': 'https://openalex.org/W2042539814... | \n", "en | \n", "{'is_oa': True, 'landing_page_url': 'https://d... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 2}, {'year':... | \n", "2024-06-26T19:33:50.844463 | \n", "2016-06-24 | \n", "Summary The altitudinal sequences of vegetatio... | \n", "True | \n", "https://www.tandfonline.com/doi/pdf/10.1080/00... | \n", "https://openalex.org/W2042539814 | \n", "Facets of the distribution of forest vegetatio... | \n", "463 | \n", "
4 | \n", "https://openalex.org/W1982291004 | \n", "https://doi.org/10.1016/j.jhevol.2010.04.002 | \n", "The Early–Middle Pleistocene environmental and... | \n", "The Early–Middle Pleistocene environmental and... | \n", "97.537895 | \n", "2011 | \n", "2011-04-01 | \n", "{'openalex': 'https://openalex.org/W1982291004... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W1... | \n", "[{'year': 2024, 'cited_by_count': 3}, {'year':... | \n", "2024-07-01T20:12:53.409576 | \n", "2016-06-24 | \n", "The dispersal of hominins may have been favore... | \n", "True | \n", "None | \n", "https://openalex.org/W1982291004 | \n", "The Early–Middle Pleistocene environmental and... | \n", "312 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
95 | \n", "https://openalex.org/W2079111689 | \n", "https://doi.org/10.1111/j.0030-1299.2004.13255.x | \n", "Impacts of multiple stressors on biodiversity ... | \n", "Impacts of multiple stressors on biodiversity ... | \n", "19.725950 | \n", "2004 | \n", "2004-02-16 | \n", "{'openalex': 'https://openalex.org/W2079111689... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 18}, {'year'... | \n", "2024-06-26T10:03:56.871106 | \n", "2016-06-24 | \n", "Ecosystem resistance to a single stressor reli... | \n", "False | \n", "None | \n", "https://openalex.org/W2079111689 | \n", "Impacts of multiple stressors on biodiversity ... | \n", "193 | \n", "
96 | \n", "https://openalex.org/W2911810635 | \n", "https://doi.org/10.1007/978-981-13-2101-6_1 | \n", "Introduction: The Dynamics of Sustainability a... | \n", "Introduction: The Dynamics of Sustainability a... | \n", "19.628729 | \n", "2019 | \n", "2019-01-01 | \n", "{'openalex': 'https://openalex.org/W2911810635... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2019, 'cited_by_count': 1}] | \n", "2024-06-27T09:59:31.340559 | \n", "2019-02-21 | \n", "Challenges to achieving sustainable communitie... | \n", "False | \n", "None | \n", "https://openalex.org/W2911810635 | \n", "Introduction: The Dynamics of Sustainability a... | \n", "204 | \n", "
97 | \n", "https://openalex.org/W2037356735 | \n", "https://doi.org/10.1046/j.1523-1739.2002.01025.x | \n", "Ecosystem Decay of Amazonian Forest Fragments:... | \n", "Ecosystem Decay of Amazonian Forest Fragments:... | \n", "19.597567 | \n", "2002 | \n", "2002-05-28 | \n", "{'openalex': 'https://openalex.org/W2037356735... | \n", "en | \n", "{'is_oa': True, 'landing_page_url': 'https://d... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W2... | \n", "[{'year': 2024, 'cited_by_count': 24}, {'year'... | \n", "2024-07-02T00:54:07.174641 | \n", "2016-06-24 | \n", "Abstract: We synthesized key findings from the... | \n", "True | \n", "https://onlinelibrary.wiley.com/doi/pdfdirect/... | \n", "https://openalex.org/W2037356735 | \n", "Ecosystem Decay of Amazonian Forest Fragments:... | \n", "199 | \n", "
98 | \n", "https://openalex.org/W4214639054 | \n", "https://doi.org/10.2307/1129836 | \n", "The Determinants of Parenting: A Process Model | \n", "The Determinants of Parenting: A Process Model | \n", "19.509233 | \n", "1984 | \n", "1984-02-01 | \n", "{'openalex': 'https://openalex.org/W4214639054... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W4... | \n", "[{'year': 2024, 'cited_by_count': 76}, {'year'... | \n", "2024-07-02T04:42:30.926004 | \n", "2022-03-02 | \n", "\n", " | False | \n", "None | \n", "https://openalex.org/W4214639054 | \n", "The Determinants of Parenting: A Process Model | \n", "10 | \n", "
99 | \n", "https://openalex.org/W1971797150 | \n", "https://doi.org/10.2307/2092897 | \n", "Tally's Corner: A Study of Negro Streetcorner ... | \n", "Tally's Corner: A Study of Negro Streetcorner ... | \n", "19.464014 | \n", "1968 | \n", "1968-10-01 | \n", "{'openalex': 'https://openalex.org/W1971797150... | \n", "en | \n", "{'is_oa': False, 'landing_page_url': 'https://... | \n", "... | \n", "https://api.openalex.org/works?filter=cites:W1... | \n", "[{'year': 2024, 'cited_by_count': 3}, {'year':... | \n", "2024-06-30T03:20:06.054591 | \n", "2016-06-24 | \n", "Chapter 1 Foreword to the 2003 Edition Chapter... | \n", "False | \n", "None | \n", "https://openalex.org/W1971797150 | \n", "Tally's Corner: A Study of Negro Streetcorner ... | \n", "125 | \n", "
99 rows × 55 columns
\n", "