Science Score: 31.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic links in README
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (0.5%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Basic Info
  • Host: GitHub
  • Owner: vedantkesharia
  • Language: Jupyter Notebook
  • Default Branch: master
  • Size: 29.5 MB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 2 years ago · Last pushed almost 2 years ago
Metadata Files
Citation

Owner

  • Login: vedantkesharia
  • Kind: user

Citation (citation.ipynb)

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>abstract</th>\n",
       "      <th>authors</th>\n",
       "      <th>n_citation</th>\n",
       "      <th>references</th>\n",
       "      <th>title</th>\n",
       "      <th>venue</th>\n",
       "      <th>year</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>In this paper, a robust 3D triangular mesh wat...</td>\n",
       "      <td>['S. Ben Jabra', 'Ezzeddine Zagrouba']</td>\n",
       "      <td>50</td>\n",
       "      <td>['09cb2d7d-47d1-4a85-bfe5-faa8221e644b', '10aa...</td>\n",
       "      <td>A new approach of 3D watermarking based on ima...</td>\n",
       "      <td>international symposium on computers and commu...</td>\n",
       "      <td>2008</td>\n",
       "      <td>4ab3735c-80f1-472d-b953-fa0557fed28b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>We studied an autoassociative neural network w...</td>\n",
       "      <td>['Joaquín J. Torres', 'Jesús M. Cortés', 'Joaq...</td>\n",
       "      <td>50</td>\n",
       "      <td>['4017c9d2-9845-4ad2-ad5b-ba65523727c5', 'b118...</td>\n",
       "      <td>Attractor neural networks with activity-depend...</td>\n",
       "      <td>Neurocomputing</td>\n",
       "      <td>2007</td>\n",
       "      <td>4ab39729-af77-46f7-a662-16984fb9c1db</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>It is well-known that Sturmian sequences are t...</td>\n",
       "      <td>['Genevi eve Paquin', 'Laurent Vuillon']</td>\n",
       "      <td>50</td>\n",
       "      <td>['1c655ee2-067d-4bc4-b8cc-bc779e9a7f10', '2e4e...</td>\n",
       "      <td>A characterization of balanced episturmian seq...</td>\n",
       "      <td>Electronic Journal of Combinatorics</td>\n",
       "      <td>2007</td>\n",
       "      <td>4ab3a4cf-1d96-4ce5-ab6f-b3e19fc260de</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>One of the fundamental challenges of recognizi...</td>\n",
       "      <td>['Yaser Sheikh', 'Mumtaz Sheikh', 'Mubarak Shah']</td>\n",
       "      <td>221</td>\n",
       "      <td>['056116c1-9e7a-4f9b-a918-44eb199e67d6', '05ac...</td>\n",
       "      <td>Exploring the space of a human action</td>\n",
       "      <td>international conference on computer vision</td>\n",
       "      <td>2005</td>\n",
       "      <td>4ab3a98c-3620-47ec-b578-884ecf4a6206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>This paper generalizes previous optimal upper ...</td>\n",
       "      <td>['Efraim Laksman', 'Håkan Lennerstad', 'Magnus...</td>\n",
       "      <td>0</td>\n",
       "      <td>['01a765b8-0cb3-495c-996f-29c36756b435', '5dbc...</td>\n",
       "      <td>Generalized upper bounds on the minimum distan...</td>\n",
       "      <td>Ima Journal of Mathematical Control and Inform...</td>\n",
       "      <td>2015</td>\n",
       "      <td>4ab3b585-82b4-4207-91dd-b6bce7e27c4e</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                            abstract  \\\n",
       "0  In this paper, a robust 3D triangular mesh wat...   \n",
       "1  We studied an autoassociative neural network w...   \n",
       "2  It is well-known that Sturmian sequences are t...   \n",
       "3  One of the fundamental challenges of recognizi...   \n",
       "4  This paper generalizes previous optimal upper ...   \n",
       "\n",
       "                                             authors  n_citation  \\\n",
       "0             ['S. Ben Jabra', 'Ezzeddine Zagrouba']          50   \n",
       "1  ['Joaquín J. Torres', 'Jesús M. Cortés', 'Joaq...          50   \n",
       "2           ['Genevi eve Paquin', 'Laurent Vuillon']          50   \n",
       "3  ['Yaser Sheikh', 'Mumtaz Sheikh', 'Mubarak Shah']         221   \n",
       "4  ['Efraim Laksman', 'Håkan Lennerstad', 'Magnus...           0   \n",
       "\n",
       "                                          references  \\\n",
       "0  ['09cb2d7d-47d1-4a85-bfe5-faa8221e644b', '10aa...   \n",
       "1  ['4017c9d2-9845-4ad2-ad5b-ba65523727c5', 'b118...   \n",
       "2  ['1c655ee2-067d-4bc4-b8cc-bc779e9a7f10', '2e4e...   \n",
       "3  ['056116c1-9e7a-4f9b-a918-44eb199e67d6', '05ac...   \n",
       "4  ['01a765b8-0cb3-495c-996f-29c36756b435', '5dbc...   \n",
       "\n",
       "                                               title  \\\n",
       "0  A new approach of 3D watermarking based on ima...   \n",
       "1  Attractor neural networks with activity-depend...   \n",
       "2  A characterization of balanced episturmian seq...   \n",
       "3              Exploring the space of a human action   \n",
       "4  Generalized upper bounds on the minimum distan...   \n",
       "\n",
       "                                               venue  year  \\\n",
       "0  international symposium on computers and commu...  2008   \n",
       "1                                     Neurocomputing  2007   \n",
       "2                Electronic Journal of Combinatorics  2007   \n",
       "3        international conference on computer vision  2005   \n",
       "4  Ima Journal of Mathematical Control and Inform...  2015   \n",
       "\n",
       "                                     id  \n",
       "0  4ab3735c-80f1-472d-b953-fa0557fed28b  \n",
       "1  4ab39729-af77-46f7-a662-16984fb9c1db  \n",
       "2  4ab3a4cf-1d96-4ce5-ab6f-b3e19fc260de  \n",
       "3  4ab3a98c-3620-47ec-b578-884ecf4a6206  \n",
       "4  4ab3b585-82b4-4207-91dd-b6bce7e27c4e  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from tensorflow.keras.preprocessing.text import Tokenizer\n",
    "from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional\n",
    "from tensorflow.keras.optimizers import Adam\n",
    "from sklearn.metrics import mean_absolute_error, mean_squared_error\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Load the data\n",
    "file_path = './research_paper_dataset.csv'  # Adjust the file path if needed\n",
    "data = pd.read_csv(file_path)\n",
    "\n",
    "# Display the first few rows of the dataframe\n",
    "data.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['abstract'] = data['abstract'].fillna('')\n",
    "data['title'] = data['title'].fillna('')\n",
    "\n",
    "# Combine title and abstract for text processing\n",
    "data['text'] = data['title'].astype(str) + ' ' + data['abstract'].astype(str)\n",
    "\n",
    "# Tokenize the text data\n",
    "tokenizer = Tokenizer(num_words=20000)\n",
    "tokenizer.fit_on_texts(data['text'])\n",
    "sequences = tokenizer.texts_to_sequences(data['text'])\n",
    "\n",
    "# Pad the sequences\n",
    "maxlen = 300  # Maximum length of sequences\n",
    "X = pad_sequences(sequences, maxlen=maxlen)\n",
    "\n",
    "# Prepare the target variable\n",
    "y = data['n_citation'].values\n",
    "\n",
    "# Split the data into training and testing sets\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "\u001b[1m5000/5000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3957s\u001b[0m 790ms/step - loss: 42457.8242 - val_loss: 39802.1094\n",
      "Epoch 2/5\n",
      "\u001b[1m5000/5000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3860s\u001b[0m 772ms/step - loss: 29888.7852 - val_loss: 39584.2227\n",
      "Epoch 3/5\n",
      "\u001b[1m5000/5000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4297s\u001b[0m 860ms/step - loss: 35240.3516 - val_loss: 39380.0938\n",
      "Epoch 4/5\n",
      "\u001b[1m5000/5000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3154s\u001b[0m 631ms/step - loss: 34060.9727 - val_loss: 39255.8672\n",
      "Epoch 5/5\n",
      "\u001b[1m5000/5000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3194s\u001b[0m 639ms/step - loss: 28336.0449 - val_loss: 39219.7031\n"
     ]
    }
   ],
   "source": [
    "# Build the LSTM model\n",
    "model = Sequential()\n",
    "model.add(Embedding(input_dim=20000, output_dim=128, input_shape=(maxlen,)))\n",
    "model.add(Bidirectional(LSTM(64, return_sequences=True)))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Bidirectional(LSTM(32)))\n",
    "model.add(Dropout(0.5))\n",
    "model.add(Dense(1, activation='linear'))\n",
    "\n",
    "# Compile the model\n",
    "model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')\n",
    "\n",
    "# Train the model\n",
    "history = model.fit(X_train, y_train, epochs=5, batch_size=128, validation_split=0.2, verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m6250/6250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m522s\u001b[0m 84ms/step\n",
      "Mean Absolute Error: 36.5341725893414\n",
      "Root Mean Squared Error: 186.62826772904592\n"
     ]
    },
    {
     "data": {
      "image/png": "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jtWrV2PYsGE4c+YMrly5Ak9PTwQGBiIyMhK33347ACAyMhL5+fl2+6uqqkJhYSEiIyOlMnWvuKt5faMyNeuJiIiInN9lU4fVarUbYA0AoaGhCAwMxM6dO5Gfn49HH30UAKDT6VBUVITMzEyp7M6dO2G1WjF48GCpzJ49e1BZWSmVSU1NRXx8PIKCgqQyaWlpdp+ZmpoKnU7XKm0kIiIi9+PU0DRv3jzs2bMH586dQ1ZWFubNm4ddu3ZhwoQJAIA1a9bgl19+wZkzZ/DVV1/hz3/+M15++WXEx8cDALp3747hw4fj+eefx4EDB7B3717MmDEDTz31FKKjowEATz/9NFQqFaZMmYLs7Gx88803WL58OWbPni3VY+bMmdi2bRvef/99nDp1CgsXLsTBgwcxY8aMtv+jEBERkWsSTjR58mQRFxcnVCqVCAsLE0OHDhU7duyQ1s+ZM0dEREQILy8v0aVLF/H+++8Lq9Vqt4+rV6+K8ePHCz8/P6HVasWzzz4riouL7cocPXpU3HPPPUKtVovbbrtNLF68uF5dNmzYILp27SpUKpXo0aOHSElJaVJbDAaDACAMBkOTtiMiIiLnacrvt8vN0+SumjLPAxEREbkGt5yniYiIiMiVMTQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMTg1NK1euRK9evaDVaqHVaqHT6bB161ZpvV6v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QH5+PgdBExERUbvUrNA0f/58vPLKK+jYsSMGDRoEnU4HwNbr1Ldv3xatIBEREZEraPaUA3q9Hnl5eejduzeUSlv2OnDgALRaLbp169ailXQHnHKAiIjI/TTl99uzuR8SGRmJyMhIXLx4EQAQExPDiS2JiIio3WrW6Tmr1Yq33noLAQEBiIuLQ1xcHAIDA/H222/DarW2dB2JiIiInK5ZPU2vvfYaPv/8cyxevBh33303AODnn3/GwoULUV5ejnfeeadFK0lERETkbM0a0xQdHY1Vq1bh0UcftXv/v//9L/7yl7/gjz/+aLEKuguOaSIiInI/rX4blcLCQoeDvbt164bCwsLm7JKIiIjIpTUrNPXu3RsrVqyo9/6KFSvQq1evm64UERERkatp1pimJUuWYOTIkfjhhx+kOZrS09ORm5uLLVu2tGgFiYiIiFxBs3qa7r//fvz666947LHHUFRUhKKiIowdOxbZ2dn48ssvW7qORERERE7X7MktHTl69Cj69esHi8XSUrt0GxwITkRE5H5afSA4ERER0a2GoYmIiIhIBoYmIiIiIhmadPXc2LFjG11fVFR0M3UhIiIicllNCk0BAQE3XP/MM8/cVIWIiIiIXFGTQtOaNWtaqx5ERERELs2pY5pWrlyJXr16QavVQqvVQqfTYevWrQCAc+fOQaFQOFw2btwo7ePChQsYOXIkNBoNwsPD8be//Q1VVVV2n7Nr1y7069cParUanTt3xtq1a+vV5eOPP0bHjh3h7e2NwYMH48CBA63adiIiInIvTg1NMTExWLx4MTIzM3Hw4EE8+OCDGD16NLKzsxEbG4u8vDy75c0334Sfnx9GjBgBALBYLBg5ciQqKiqwb98+/POf/8TatWsxf/586TPOnj2LkSNH4k9/+hOOHDmCWbNm4bnnnsP27dulMt988w1mz56NBQsW4NChQ+jduzeSkpKQn5/f5n8TIiIick0tOrllSwgODsbSpUsxZcqUeuv69u2Lfv364fPPPwcAbN26FY888gguXbqEiIgIAMCqVaswZ84cFBQUQKVSYc6cOUhJScHx48el/Tz11FMoKirCtm3bAACDBw/GwIEDpfvpWa1WxMbG4qWXXsLcuXNl1ZuTWxIREbkft5zc0mKxYP369TCZTNL97GrLzMzEkSNH7MJUeno6evbsKQUmAEhKSoLRaER2drZU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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Predict on the test set\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "# Calculate the evaluation metrics\n",
    "mae = mean_absolute_error(y_test, y_pred)\n",
    "rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n",
    "\n",
    "print(f\"Mean Absolute Error: {mae}\")\n",
    "print(f\"Root Mean Squared Error: {rmse}\")\n",
    "\n",
    "# Plot the training history\n",
    "plt.plot(history.history['loss'], label='train_loss')\n",
    "plt.plot(history.history['val_loss'], label='val_loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R-squared: 0.018681049346923828\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n",
    "r2 = r2_score(y_test, y_pred)\n",
    "print(f\"R-squared: {r2}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 37ms/step\n",
      "Predicted Citation Count: 15.985666275024414\n"
     ]
    }
   ],
   "source": [
    "# Test on a new abstract\n",
    "import os\n",
    "import pickle\n",
    "test_abstract = \"This paper introduces a novel approach to quantum computing...\"\n",
    "test_title = \"Quantum Computing Advancements\"\n",
    "test_text = test_title + ' ' + test_abstract\n",
    "\n",
    "# Preprocess the test abstract\n",
    "test_sequence = tokenizer.texts_to_sequences([test_text])\n",
    "test_padded = pad_sequences(test_sequence, maxlen=maxlen)\n",
    "\n",
    "# Predict the citation count for the new abstract\n",
    "predicted_citation = model.predict(test_padded)\n",
    "print(f\"Predicted Citation Count: {predicted_citation[0][0]}\")\n",
    "\n",
    "# Save the model and tokenizer to files\n",
    "model_save_path = './citation_model.keras'\n",
    "tokenizer_save_path = './tokenizer.pkl'\n",
    "\n",
    "# Delete the existing model file if it exists\n",
    "if os.path.exists(model_save_path):\n",
    "    os.remove(model_save_path)\n",
    "\n",
    "# Save the Keras model in the new format\n",
    "model.save(model_save_path)\n",
    "\n",
    "# Save the tokenizer\n",
    "with open(tokenizer_save_path, 'wb') as tokenizer_file:\n",
    "    pickle.dump(tokenizer, tokenizer_file)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# # Test on a new abstract\n",
    "# import os\n",
    "# test_abstract = \"This paper introduces a novel approach to quantum computing...\"\n",
    "# test_title = \"Quantum Computing Advancements\"\n",
    "# test_text = test_title + ' ' + test_abstract\n",
    "\n",
    "# # Preprocess the test abstract\n",
    "# test_sequence = tokenizer.texts_to_sequences([test_text])\n",
    "# test_padded = pad_sequences(test_sequence, maxlen=maxlen)\n",
    "\n",
    "# # Predict the citation count for the new abstract\n",
    "# predicted_citation = model.predict(test_padded)\n",
    "# print(f\"Predicted Citation Count: {predicted_citation[0][0]}\")\n",
    "\n",
    "# # Save the model and tokenizer to files\n",
    "# model_save_path = './citation_model.h5'\n",
    "# tokenizer_save_path = './tokenizer.pkl'\n",
    "\n",
    "# # Delete the existing model file if it exists\n",
    "# if os.path.exists(model_save_path):\n",
    "#     os.remove(model_save_path)\n",
    "\n",
    "# # Save the Keras model\n",
    "# model.save(model_save_path)\n",
    "\n",
    "# # Save the tokenizer\n",
    "# with open(tokenizer_save_path, 'wb') as tokenizer_file:\n",
    "#     pickle.dump(tokenizer, tokenizer_file)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}

GitHub Events

Total
Last Year