# Notebook from old-rob/cptac
Path: notebooks/usecase09_clinical_outcomes.ipynb

# Use Case 9: Survival Analysis of Ovarian Cancer--PODXL, RAC2, and Tumor Stage

Through modern statistical methods, we can determine survival risk based on a variety of factors.  In this tutorial, we will walk through a small example of something you could do with our data to understand what factors relate with survival in various different types of cancer.  In this use case, we will be looking at Ovarian Cancer._____no_output_____## Step 1: Import Data and Dependencies_____no_output_____

import pandas as pd
import cptac
import cptac.utils as ut
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import scipy
import lifelines
from lifelines import KaplanMeierFitter
from lifelines import CoxPHFitter
from lifelines.statistics import proportional_hazard_test
%matplotlib inline_____no_output_____ov = cptac.Ovarian()
clinical = ov.get_clinical()
proteomics = ov.get_proteomics()
follow_up = ov.get_followup()

## Step 2: Gather Data from CPTAC API
The Ovarian cancer dataset contains months of follow-up data, including whether a patient is still alive (Vital Status) at each follow-up period.  We will first merge the clinical and follow-up tables together for analysis. Then we will choose a few attributes to focus on, and narrow our dataframe to those attributes. While you could study a wide variety of factors related to survival, we will be focusing on tumor stage, grade and a proteins of interest listed below in *omics_genes*._____no_output_____First we will join the *clinical* and *proteomics* dataframes to contain protein data for proteins of interest, and clinical data for each patient in the same dataframe.  We will then drop the multiindex of that dataframe to allow us to join it with the *follow_up* dataframe._____no_output_____

cols = list(clinical.columns)
omics_genes = ['RAC2', 'PODXL']

clinical_and_protein = ov.join_metadata_to_omics(metadata_df_name="clinical",
                                                 omics_df_name="proteomics",
                                                 metadata_cols=cols,
                                                 omics_genes=omics_genes,
                                                 quiet=True)

clinical_and_protein = ut.reduce_multiindex(clinical_and_protein,
                                            levels_to_drop="Database_ID")_____no_output_____

Next, we will rename the foreign key ("PPID" -> "Patient_ID") on the follow_up table to allow us to easily join that data with the dataframe of clinical and protein data_____no_output_____

follow_up = follow_up.rename({'PPID' : 'Patient_ID'}, axis='columns')
clin_prot_follow = pd.merge(clinical_and_protein, follow_up, on = "Patient_ID")

#Determine columns to focus on, and create a subset to work with
columns_to_focus_on = ['Vital_Status',
                       'Days_Between_Collection_And_Last_Contact',
                       'Days_Between_Collection_And_Death',
                       'Tumor_Stage_Ovary_FIGO']

#This adds the protein data that we got from the clinical and proteomics join
#so that it will be present in our subset of data to work with
for i in range(len(omics_genes)):
    omics_genes[i] += '_proteomics'
    columns_to_focus_on.append(omics_genes[i])

focus_group = clin_prot_follow[columns_to_focus_on].copy().drop_duplicates()_____no_output_____

## Step 3: Kaplan Meier Plotting
Kaplan Meier plots show us the probability of some event occuring over a given length of time, based on some attribute(s).  Oftentimes, they are used to plot the probability of death for clinical attributes, however they could also be used in a variety of other contexts. _____no_output_____We will start by finding all patients that have died during the follow-up period and update the column to contain boolean values, where True denotes that the event occurred ('Deceased'), and False denotes that it did not ('Living').  We will then combine the two columns containing timeframe data ('Days_Between_Collection_And_Last_Contact', and 'Days_Between_Collection_And_Death'), to help us with plotting survival curves. These steps are necessary to fit the requirements of the *lifelines* package._____no_output_____

#Make the Vital Status column boolean
focus_group['Vital_Status'] = focus_group['Vital_Status'].replace('Living', False)
focus_group['Vital_Status'] = focus_group['Vital_Status'].replace('Deceased', True)
focus_group['Vital_Status'] = focus_group['Vital_Status'].astype('bool')_____no_output_____cols = ['Days_Between_Collection_And_Last_Contact', 'Days_Between_Collection_And_Death']

focus_group = focus_group.assign(Days_Until_Last_Contact_Or_Death=focus_group[cols].sum(1)).drop(cols, 1)<ipython-input-6-e6e65af9fe6e>:3: FutureWarning: In a future version of pandas all arguments of DataFrame.drop except for the argument 'labels' will be keyword-only
  focus_group = focus_group.assign(Days_Until_Last_Contact_Or_Death=focus_group[cols].sum(1)).drop(cols, 1)

Next, we will create a general Kaplan Meier Plot of overall survival for our cohort, using the KaplanMeierFitter() from the *lifelines* package._____no_output_____

time = focus_group['Days_Until_Last_Contact_Or_Death']
status = focus_group['Vital_Status']

kmf = KaplanMeierFitter()
kmf.fit(time, event_observed = status)
kmf.plot()_____no_output_____

# Step 4 Prepare Data for Multivariate Kaplan Meier Plots and Cox's Proportional Hazard Test
We will now group our columns of interest into 3-4 distinct categories each, and assign them numeric values.  It is necessary for the requirements of the *lifelines* package that the categories are assigned numeric values (other data types, including category, are not compatible with the functions we will be using)._____no_output_____

df_genes = focus_group.copy()

#Here, we are separating the protein abundance values for each of our proteins
#of interest into 3 groups, based on relative abundance of the protein
for col in omics_genes:
    lower_25_filter = df_genes[col] <= df_genes[col].quantile(.25)
    upper_25_filter = df_genes[col] >= df_genes[col].quantile(.75)

    df_genes[col] = np.where(lower_25_filter, "Lower_25%", df_genes[col])
    df_genes[col] = np.where(upper_25_filter, "Upper_25%", df_genes[col])
    df_genes[col] = np.where(~lower_25_filter & ~upper_25_filter, "Middle_50%", df_genes[col])_____no_output_____#Here, we map numeric values to correspond with our 3 protein categories
proteomics_map = {"Lower_25%" : 1, "Middle_50%" : 2, "Upper_25%" : 3}
for gene in omics_genes:
    df_genes[gene] = df_genes[gene].map(proteomics_map)_____no_output_____#Here we map numeric values to corresponding tumor stages
figo_map = {"IIIC" : 3, "IV" : 4, "IIIB" : 3,
            "Not Reported/ Unknown" : np.nan,
            "IIIA" : 3, "III" : 3, "IC" : 1, "IIB" : 2}

df_genes['Tumor_Stage_Ovary_FIGO'] = df_genes['Tumor_Stage_Ovary_FIGO'].map(figo_map)_____no_output_____#Then we will drop missing values, as missing values
# will throw an error in the lifelines functions
df_clean = df_genes.dropna(axis=0, how='any').copy()_____no_output_____

Verify that your columns are the correct data types.  They may appear to be correct up front, but could actually be hidden as slightly different data types. The event of interest, in this case *Vital_Status* needs to contain boolean values, and all other columns in the table must be of a numeric type (either int64 or float64)._____no_output_____

for col in df_clean.columns:
    print(col, ":", df_clean[col].dtype)_____no_output_____df_clean.head()_____no_output_____

# Step 5: Multivariate Survival Risk Plotting

With the CoxPHFitter from the lifelines package we can create covariate survival plots, as shown below.  The variables we are interested in exploring are Tumor Stage, RAC2 abundance, and PODXL  abundance._____no_output_____First we will fit our model to the data we have prepared using the CoxPHFitter() class from the lifelines module._____no_output_____

cph = CoxPHFitter()
cph.fit(df_clean, duration_col = "Days_Until_Last_Contact_Or_Death",
        event_col = "Vital_Status")_____no_output_____

Then we will plot each of the attributes to see how different levels of protein or different tumor stages affect survival outcomes in Ovarian Cancer patients._____no_output_____

attributes = ['Tumor_Stage_Ovary_FIGO', 'PODXL_proteomics', 'RAC2_proteomics']_____no_output_____for attribute in attributes:
    plot_title = "Ovarian Cancer Survival Risk: " + attribute
    cph.plot_partial_effects_on_outcome(attribute, [1,2,3], cmap='coolwarm',
                          title=plot_title)_____no_output_____

# Results
These different analyses tend to follow the baseline survival function, however, there are some differences in varying levels of each attribute. For example, FIGO Stage I tumors tend to have a higher survival rate over time comparatively to Stage III tumors.  We can explore these differences with the CoxPHFitter object's *print_summary* function (which prints out results for multivariate linear regression)._____no_output_____

cph.print_summary(model="untransformed variables", decimals=3)_____no_output_____

# Step 6 Cox's Proportional Hazard Test
With the *proportional_hazard_test* function, we can now perform Cox's Proportional Hazard Test on the data to determine how each attribute contributes to our cohort's overall survival.  This is shown by the hazard ratio in the column labeled *-log2(p)* below.  In general, a hazard ratio of 1 suggests that an attribute has no effect on overall survival.  A ratio less than 1 suggests that an attribute contributes to lower survival risk.  A ratio greater than 1 suggests that an attribute contributes to higher survival risk._____no_output_____

results = proportional_hazard_test(cph, df_clean, time_transform='rank')
results.print_summary(decimals=3, model="untransformed variables")_____no_output_____

Below, we show confidence intervals for each of the hazard ratios.  Since both bars include the log(HR) of 1.0 and both of their p-values were greater than 0.05, there is insufficient evidence to suggest that a specific Histologic Grade or Tumor Stage is connected with negative clinical outcomes of death or the development of a new tumor *in our cohort of Ovarian cancer tumors*._____no_output_____

cph.plot()
plt.tight_layout()_____no_output_____

# Closing Remarks
It is important to note that there are relatively few patients who died in our cohort (7 out of 88), which is good, but with such a small sample size of death events, it is difficult to conclude with certainty that these features are not more or less connected with survival.  Perhaps a sample of patients with more deaths might have different results.  Alternatively, studying an event with more negative outcomes (such as tumor recurrence) may also provide more data to work with._____no_output_____

df_clean['Vital_Status'].value_counts()_____no_output_____

It is also important to note that the confidence intervals for these ratios are very large, especially since hazard ratios are standardly shown on a log-scale._____no_output_____

cph.confidence_intervals______no_output_____

This is just one example of how you might use Survival Analysis to learn more about different types of cancer, and how clinical and/or genetic attributes contribute to likelihood of survival. There are many other clinical and genetic attributes, as well as several other cancer types, that can be explored using a similar process to that above. In particular, lung cancer and ovarian cancer have a larger number of negative outcomes per cohort, and would be good to look into further. _____no_output_____


# Notebook from AndreasSaka/python-scripts-nlp
Path: preliminary/asservice.ipynb

#https://www.kaggle.com/vj1494/covid-19-biobert-semantic-search-engine_____no_output_____

<code>
!pip install biopython
!pip install --upgrade biopython
!pip install metapub_____no_output_____import Bio
import metapub
from metapub import PubMedFetcher
from Bio import Entrez
from Bio import SeqIO
from Bio.Entrez import efetch_____no_output_____from Bio import Medline_____no_output_____Entrez.email = "a.sakapetis@students.uu.nl"_____no_output_____def load_pmids_list(pmids_file):
    """
    Return a list of pmids from a text file.
    Args:
        pmids_file: a text file containing pmids with one pmid in each line.
    """
    assert isinstance(pmids_file, str)
    with open(f'/{pmids_file}.txt', 'r', encoding = 'utf8') as f:
        pmids_list = [line.strip() for line in f]
    return pmids_list_____no_output_____def get_pubmed_tiabs(pmids_list):
    """
    Return a dictionary of title and abstract of papers by pmid
    in the pmids_list in one query of the pubmed database.
    Args:
        pmids_list: a list of pmids to query for the title and abstract of papers.
    """
    assert isinstance(pmids_list, list) and len(pmids_list) <= 100000
    pubmed_tiabs = {}
    records =  Medline.parse(Entrez.efetch(
        db="pubmed", id=pmids_list, rettype='medline', retmode='text'
        ))
    for record in records:
        if 'PMID' not in record: continue
        pubmed_tiabs[record['PMID']] = {'title': record.get('TI', ''),
                                        'abstract': record.get('AB', '')}
    return pubmed_tiabs_____no_output_____def get_pubmed_tiabs_all(pmids_list):
    """
    Acquire title and abstract of papers in a list of pmids by query the pubmed database
    and write the pmid, title and abstract to a csv file.
    Args:
        pmids_list: a list of pmids to query for the title and abstract of papers.
        file_name: a string as name of the csv file
    """
    assert isinstance(pmids_list, list)
    len_list = len(pmids_list)
    df_tiabs = {'pmid':[], 'title':[], 'abstract':[]}
    for i in range(0, len_list, 10000):
        pmid_list = pmids_list[i:i+10000] if i+10000 <= len_list else pmids_list[i:]
        pubmed_tiabs = get_pubmed_tiabs(pmid_list)
        for k,v in pubmed_tiabs.items():
            df_tiabs['pmid'].append(k)
            df_tiabs['title'].append(v['title'])
            df_tiabs['abstract'].append(v['abstract'])
    return pd.DataFrame(data=df_tiabs)
_____no_output_____import pandas as pd_____no_output_____a = load_pmids_list('content/251')_____no_output_____b = get_pubmed_tiabs(a)_____no_output_____data = get_pubmed_tiabs_all(a)_____no_output_____from scipy.spatial.distance import cdist
import subprocess
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pickle as pkl
from ipywidgets import interact, widgets # this is what makes the dataframe interactive_____no_output_____!pip uninstall tensorflow==2.1.0 --yes
!pip install bert-serving-server
!pip install bert-serving-client
!pip install --upgrade ipykernel
!pip install tensorflow==1.13.1_____no_output_____!wget https://github.com/naver/biobert-pretrained/releases/download/v1.1-pubmed/biobert_v1.1_pubmed.tar.gz_____no_output_____!tar xvzf biobert_v1.1_pubmed.tar.gz
%cd biobert_v1.1_pubmed
_____no_output_____!rename 's/model.ckpt-1000000.data-00000-of-00001/bert_model.ckpt.data-00000-of-00001/' *
!rename 's/model.ckpt-1000000.meta/bert_model.ckpt.meta/' *
!rename 's/model.ckpt-1000000.index/bert_model.ckpt.index/' *
!ls #/kaggle/working/biobert_v1.1_pubmed
#!port_num=5555_____no_output_____import tensorflow as tf
print(tf.__version__)_____no_output_____import pandas as pd
from bert_serving.client import BertClient
import numpy as np
from bert_serving.server.helper import get_args_parser
from bert_serving.server import BertServer_____no_output_____a = get_args_parser().parse_args(['-model_dir', '/content/biobert_v1.1_pubmed',
                                     '-port', '5555',
                                     '-port_out', '5556',
                                     '-max_seq_len', 'NONE',
                                     '-mask_cls_sep',
                                     '-cpu',
                                     '-num_worker','4'])
server = BertServer(a)
server.start()_____no_output_____bc = BertClient(port=5555, port_out=5556)_____no_output_____#biorx_df.head()_____no_output_____biorx_df = data
biorx_lst = biorx_df['title'].astype(str).to_list()
print(biorx_lst)_____no_output_____doc_vecs = bc.encode(biorx_lst)
print(doc_vecs.shape)_____no_output_____def find_similar_articles(query,topk):
    query_vec = bc.encode([query])[0]
    score = np.sum(query_vec * doc_vecs, axis=1) / np.linalg.norm(doc_vecs, axis=1)
    topk_idx = np.argsort(score)[::-1][:topk]
    for idx in topk_idx:
        print('> %s\t%s' % (score[idx], biorx_lst[idx]))_____no_output_____find_similar_articles("chlorophenoxyacetic",10)_____no_output_____
</code>


# Notebook from darknightush/Resume_Parser
Path: Resume_Parser.ipynb

_____no_output_____Resume Parser_____no_output_____

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import spacy
import pickle
import random_____no_output_____data = pickle.load(open('data.pkl','rb'))
data[0]_____no_output_____# Load Blank Model
nlp = spacy.blank('en')

def training(data):
    # Remove all pipelines and add NER pipeline from the model
    if 'ner'not in nlp.pipe_names:
        ner = nlp.create_pipe('ner')
        # adding NER pipeline to nlp model
        nlp.add_pipe(ner,last=True)

    #Add labels in the NLP pipeline
    for _, annotation in data:
        for ent in annotation.get('entities'):
            ner.add_label(ent[2])

    #Remove other pipelines if they are there
    other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
    with nlp.disable_pipes(*other_pipes):  # only train NER
        optimizer = nlp.begin_training()
        for itn in range(30): # train for 10 iterations
            print("Starting iteration " + str(itn))
            random.shuffle(data)
            losses = {}
            index = 0
            for text, annotations in data:
                try:
                    nlp.update(
                        [text],  # batch of texts
                        [annotations],  # batch of annotations
                        drop=0.2,  # dropout - make it harder to memorise data
                        sgd=optimizer,  # callable to update weights
                        losses=losses)
                except Exception as e:
                    pass

            print(losses)
# Start Training model
training(data)Starting iteration 0
{'ner': 15231.471876251697}
Starting iteration 1
{'ner': 10172.174889678263}
Starting iteration 2
{'ner': 8747.356816184034}
Starting iteration 3
{'ner': 6749.569263962965}
Starting iteration 4
{'ner': 6244.544416655366}
Starting iteration 5
{'ner': 5397.981417064491}
Starting iteration 6
{'ner': 5446.890278133104}
Starting iteration 7
{'ner': 5473.634519398004}
Starting iteration 8
{'ner': 5081.475572136505}
Starting iteration 9
{'ner': 4303.01603472484}
Starting iteration 10
{'ner': 4672.850855090795}
Starting iteration 11
{'ner': 3386.8970842396193}
Starting iteration 12
{'ner': 4433.490901241592}
Starting iteration 13
{'ner': 5484.845435524629}
Starting iteration 14
{'ner': 4369.370967092233}
Starting iteration 15
{'ner': 5131.341105034062}
Starting iteration 16
{'ner': 3581.448207004029}
Starting iteration 17
{'ner': 3352.329272256251}
Starting iteration 18
{'ner': 2786.8149138532644}
Starting iteration 19
{'ner': 3215.345655666321}
Starting iteration 20
{'ner': 3189.3545884744017}
Starting iteration 21
{'ner': 3093.277315999657}
Starting iteration 22
{'ner': 2841.81173659128}
Starting iteration 23
{'ner': 2773.274230459786}
Starting iteration 24
{'ner': 3625.101360386895}
Starting iteration 25
{'ner': 3091.22044601208}
Starting iteration 26
{'ner': 2785.232521007363}
Starting iteration 27
{'ner': 2097.223358129393}
Starting iteration 28
{'ner': 2457.872179608017}
Starting iteration 29
{'ner': 3307.5993963302176}
nlp.to_disk('nlp_ner_model')_____no_output_____#Loading Model
nlp_model = spacy.load('nlp_ner_model')_____no_output_____# trying and seeing the prediction of the model
doc = nlp_model(data[0][0])
for ent in doc.ents:
    print(f"{ent.label_.upper():{30}}-{ent.text}")NAME                          -Arpit Jain
DESIGNATION                   -Quality Analyst
COMPANIES WORKED AT           -ThoughtWorks Technologies
EMAIL ADDRESS                 -indeed.com/r/Arpit-Jain/3714fe32f98b03a9
DESIGNATION                   -Quality Analyst
DESIGNATION                   -Quality Analyst
COMPANIES WORKED AT           -ThoughtWorks Technologies
COMPANIES WORKED AT           -ThoughtWorks Technologies
DESIGNATION                   -Quality Analyst
COMPANIES WORKED AT           -ThoughtWorks Technologies
DEGREE                        -B.Tech
COLLEGE NAME                  -Jaypee Institute Of Information Technology
SKILLS                        -SKILLS  Manual Testing, Protractor, Selenium Webdriver, Automation Testing, API
!pip install PyMuPDF
Collecting PyMuPDF
  Downloading PyMuPDF-1.19.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.7 MB)
     |████████████████████████████████| 8.7 MB 4.8 MB/s
Installing collected packages: PyMuPDF
Successfully installed PyMuPDF-1.19.3
import sys, fitz
fname = 'Smith Resume.pdf'
doc = fitz.open(fname)
text = ""
for page in doc:
    text = text + str(page.get_text())
art = " ".join(text.split('\n'))
print(art)Michael Smith  BI / Big Data/ Azure  Manchester, UK- Email me on Indeed: indeed.com/r/falicent/140749dace5dc26f    10+ years of Experience in Designing, Development, Administration, Analysis,  Management  inthe  Business  Intelligence  Data  warehousing,  Client  Server  Technologies, Web-based Applications, cloud solutions and Databases.  Data warehouse: Data analysis, star/ snow flake schema data modeling and design  specific todata warehousing and business intelligence environment.  Database: Experience in database designing, scalability, back-up and recovery,  writing andoptimizing SQL code and Stored Procedures, creating functions, views,  triggers and indexes.   Cloud platform: Worked on Microsoft Azure cloud services like Document DB, SQL  Azure, StreamAnalytics, Event hub, Power BI, Web Job, Web App, Power BI, Azure  data lake analytics(U-SQL).  Big Data: Worked Azure data lake store/analytics for big data processing and Azure  data factoryto schedule U-SQL jobs. Designed and developed end to end big data  solution for data insights.     Willing to relocate: Anywhere  WORK EXPERIENCESoftware Engineer  Microsoft - Manchester, UK.  December 2015 to Present  1. Microsoft Rewards Live dashboards:  Description: - Microsoft rewards is loyalty program that rewards Users for  browsing and shopping online. Microsoft Rewards members can earn points when  searching with Bing, browsing with Microsoft Edge and making purchases at the  Xbox Store, the Windows Store and the Microsoft Store. Plus, user can pick up  bonus points for taking daily quizzes and tours on the Microsoft rewards website.  Rewards live dashboards gives a live picture of usage world-wide and by markets  like US, Canada, Australia, new user registration count, top/bottom performing  rewards offers, orders stats and weekly trends of user activities, orders and new  user registrations. the PBI tiles gets refreshed in different frequencies starting  from 5 seconds to 30 minutes.  Technology/Tools used  Event hub, stream analytics and Power BI.  Responsibilities  Created stream analytics jobs to process event hub data  Created Power BI live dashboard to show live usage traffic, weekly trends, cards,  charts to showtop/bottom 10 offers and usage metrics.  2. Microsoft Rewards Data Insights:  Description: - Microsoft rewards is loyalty program that rewards Users for  browsing and shopping online. Microsoft Rewards members can earn points when  searching with Bing, browsing with Microsoft Edge and making purchases at the  Xbox Store, the Windows Store and the Microsoft Store. Plus, user can pick up  bonus points for taking daily quizzes and tours on the Microsoft rewards website.  Rewards data insights is data analytics and reporting platform, processes 20  million users daily activities and redemption across different markets like US,  Canada, Australia.  Technology/Tools used  Cosmos (Microsoft big-data platform), c#, X-flow job monitoring, Power BI.  Responsibilities  Created big data scripts in cosmos  C# data extractors, processors and reducers for data transformation  Power BI dashboards  3. End to end tracking Tool:  Description: - This is real-time Tracking tool to track different business  transactions like order, order response, functional acknowledgement, invoice  flowing inside ICOE. It gives flexibility to customers to track their transactions  and appropriate error information in-case of any failure. Based on resource based  access control the tool gives flexibility to end user to perform different actions  like view transactions, search based on different filter criteria and view and  download actual message payload. End to end tracking tool stitches all the  business transaction like order to cash flow and connects different hops inside  ICOE like gateway, routing server, Processing server. It also connects different  systems like ICOE, partner end point and SAP.  Technology/Tools used  Azure Document db, Azure web job and Web APP, RBAC, Angular JS.  Responsibilities  Document dB stored procedures.  Web job to process event hub data and populate Document db• Web App API.  Stream analytics job to transform data  Power BI reports  4. Biztrack Tracking Tool:  Description: - This is real-time Tracking tool to track different business  transactions like order, order response, functional acknowledgement, invoice  flowing inside ICOE. It gives flexibility to customers to track their transactions  and appropriate error information in-case of any failure. Based on resource based  access control the tool gives flexibility to end user to perform different actions  like view transactions, search based on different filter criteria and view and  download actual message payload.  Technology/Tools used  SQL server 2014, SSIS, .net API, Angular JS.  Responsibilities  ETL solution to transform business transactions data stored in Biztalk tables.  SQL azure tables, stored procedures, User defined functions.  Performance tuning.  Web API enhancements.    EDUCATION  The University of Manchester - UK  2007    SKILLS  problem solving (Less than 1 year), project lifecycle (Less than 1 year), project  manager (Less than 1 year), technical assistance. (Less than 1 year)  ADDITIONAL INFORMATION  Professional Skills  Excellent analytical, problem solving, communication, knowledge transfer and  interpersonalskills with ability to interact with individuals at all the levels  Quick learner and maintains cordial relationship with project manager and team  members andgood performer both in team and independent job environments  Positive attitude towards superiors & peers  Supervised junior developers throughout project lifecycle and provided technical  assistance.
# Applying the model
doc = nlp_model(art)
list1=[]
list2 = []
for ent in doc.ents:
    list1.append(ent.label_.upper())
    list2.append(ent.text)
dictionary = dict(zip(list1, list2))
dictionary_____no_output_____import json

# Serializing jsona
json_object = json.dumps(dictionary, indent = 4)
print(json_object){
    "NAME": "Michael Smith",
    "EMAIL ADDRESS": "indeed.com/r/falicent/140749dace5dc26f",
    "COMPANIES WORKED AT": "Microsoft",
    "SKILLS": "problem solving (Less than 1 year), project lifecycle (Less than 1 year), project"
}