graph-search

Final project for DS595 NLP

https://github.com/shineef/graph-search

Science Score: 18.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
  • .zenodo.json file
  • DOI references
  • Academic links in README
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (0.7%) to scientific vocabulary
Last synced: 10 months ago · JSON representation ·

Repository

Final project for DS595 NLP

Basic Info
  • Host: GitHub
  • Owner: shineef
  • Language: Python
  • Default Branch: main
  • Size: 3.91 KB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created about 2 years ago · Last pushed about 2 years ago
Metadata Files
Citation

Owner

  • Login: shineef
  • Kind: user

Citation (citation recommendation/data_preprocess.py)

from collections import defaultdict
from scipy.sparse import lil_matrix
import os
import json
import torch
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from torch_sparse import tensor

def get_data(features = 64):
    train_file_path = os.path.join(os.getcwd(), 'mixed.txt')

    with open(train_file_path, encoding='utf-8') as f:
        train_json_data = json.load(f)

    paper_ids = set(str(paper['publication_ID']) for paper in train_json_data)
    paper_citation_list = [(str(paper['publication_ID']), 
                            [cit for cit in str(paper['Citations']).split(';') if cit in paper_ids])
                        for paper in train_json_data if 'Citations' in paper]
    
    # create ids set and give them index
    unique_ids = paper_ids
    id_to_index = {pid: idx for idx, pid in enumerate(unique_ids)}
    index_to_id = {idx: pid for pid, idx in id_to_index.items()}

    paper_citation_indexed = [(id_to_index[str(pc[0])], [id_to_index[cit] for cit in pc[1] if cit in id_to_index]) 
                          for pc in paper_citation_list if str(pc[0]) in id_to_index]
    
    num_papers = len(id_to_index)
    adj_matrix = lil_matrix((num_papers, num_papers))

    index_to_data = {id_to_index[str(paper['publication_ID'])]: paper 
                 for paper in train_json_data if 'publication_ID' in paper}
    
    for row_idx, col_indices in paper_citation_indexed:
        for col_idx in col_indices:
            adj_matrix[row_idx, col_idx] = 1

    row, col = adj_matrix.nonzero()
    edge_index = torch.stack((torch.tensor(row), torch.tensor(col)), dim=0)
    edge_index = edge_index.to(torch.long)
    adj_tensor = tensor.SparseTensor(row=edge_index[0], 
                                    col=edge_index[1], 
                                    sparse_sizes=(num_papers, num_papers))
    
    paper_texts = [
        (str(paper['title']) + ' ' + str(paper['abstract']) + ' ' + (' '.join(str(keyword) for keyword in paper['keywords']) if isinstance(paper['keywords'], (list, tuple)) else '')).lower()
        for paper in train_json_data
        if 'publication_ID' in paper and 'title' in paper and 'abstract' in paper and 'keywords' in paper
    ]

    vectorizer = TfidfVectorizer(stop_words='english', max_features=features)
    node_features = vectorizer.fit_transform(paper_texts)

    # convert to dense tensor
    node_features = node_features.toarray()

    # create node embeddings
    node_embeddings = np.zeros((len(paper_ids), node_features.shape[1]))
    for pid, idx in id_to_index.items():
        node_embeddings[idx] = node_features[idx]

    # create node years
    node_years = np.zeros((len(paper_ids), 1))
    for paper in train_json_data:
        if 'publication_ID' in paper and 'pubDate' in paper:
            pid = str(paper['publication_ID'])
            if pid in id_to_index:
                idx = id_to_index[pid]
                year = int(paper['pubDate'][:4])  # extract year
                node_years[idx] = year

    return adj_tensor, torch.tensor(node_embeddings, dtype=torch.float), torch.tensor(node_years, dtype=torch.float), edge_index, index_to_data, index_to_id, vectorizer, unique_ids, id_to_index

GitHub Events

Total
Last Year