diff --git a/Basic NLP for Resume Documents.ipynb b/Basic NLP for Resume Documents.ipynb deleted file mode 100644 index d66f451..0000000 --- a/Basic NLP for Resume Documents.ipynb +++ /dev/null @@ -1,980 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# NLP Understanding of Resumes\n", - "- Code basicially first converts the PDF to a Image\n", - "- Then using google cloud vision API, it converts that image to text\n", - " - Using my personal JSON Code\n", - "- " - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "SyntaxError", - "evalue": "invalid syntax (__init__.py, line 3)", - "output_type": "error", - "traceback": [ - "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n", - " File \u001b[0;32m\"C:\\Users\\kunal\\Anaconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\"\u001b[0m, line \u001b[0;32m3326\u001b[0m, in \u001b[0;35mrun_code\u001b[0m\n exec(code_obj, self.user_global_ns, self.user_ns)\n", - "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[1;36m, in \u001b[1;35m\u001b[1;36m\u001b[0m\n\u001b[1;33m from firebase import firebase\u001b[0m\n", - "\u001b[1;36m File \u001b[1;32m\"C:\\Users\\kunal\\Anaconda3\\lib\\site-packages\\firebase\\__init__.py\"\u001b[1;36m, line \u001b[1;32m3\u001b[0m\n\u001b[1;33m from .async import process_pool\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" - ] - } - ], - "source": [ - "from firebase import firebase" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "def path_leaf(path):\n", - " head, tail = ntpath.split(path)\n", - " return tail or ntpath.basename(head)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'Document_402.jpg'" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "path_leaf(pathString)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "pathString = '/Users/kunal/Documents/ResumeNLPVdart/Testing_Delete/Document_402.jpg'" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/\n", - "U\n", - "s\n", - "e\n", - "r\n", - "s\n", - "/\n", - "k\n", - "u\n", - "n\n", - "a\n", - "l\n", - "/\n", - "D\n", - "o\n", - "c\n", - "u\n", - "m\n", - "e\n", - "n\n", - "t\n", - "s\n", - "/\n", - "R\n", - "e\n", - "s\n", - "u\n", - "m\n", - "e\n", - "N\n", - "L\n", - "P\n", - "V\n", - "d\n", - "a\n", - "r\n", - "t\n", - "/\n", - "T\n", - "e\n", - "s\n", - "t\n", - "i\n", - "n\n", - "g\n", - "_\n", - "D\n", - "e\n", - "l\n", - "e\n", - "t\n", - "e\n", - "/\n", - "D\n", - "o\n", - "c\n", - "u\n", - "m\n", - "e\n", - "n\n", - "t\n", - "_\n", - "4\n", - "0\n", - "2\n", - ".\n", - "j\n", - "p\n", - "g\n" - ] - } - ], - "source": [ - "for i in pathString:\n", - " print(i)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Import libaries" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convert PDF to Image" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "def convert_pdf_2_image(uploaded_image_path, uploaded_image):\n", - " project_dir = os.getcwd()\n", - " os.chdir(uploaded_image_path)\n", - " file_name = str(uploaded_image).replace('.pdf','')\n", - " output_file = file_name+'.jpg'\n", - " pages = convert_from_path(uploaded_image, 200,poppler_path='/Users/kunal/Documents/VdartWorking/Poppler/poppler-0.68.0_x86/poppler-0.68.0/bin/')\n", - " for page in pages:\n", - " page.save(output_file, 'JPEG')\n", - " break\n", - " #os.chdir(project_dir)\n", - " #img = Image.open(output_file)\n", - " #img = img.resize(img_size, PIL.Image.ANTIALIAS)\n", - " #img.save(output_file)\n", - " return output_file" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'Document_402.jpg'" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "convert_pdf_2_image('/Users/kunal/Documents/ResumeNLPVdart/Testing_Delete/', \"Document_402.pdf\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Convert Image to Text" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "keyDIR = \"/Users/kunal/Documents/VdartWorking/GOOGLEAPI/vdartrealfakevision-0f30bdc03946.json\"\n", - "credentials = service_account.Credentials.from_service_account_file(keyDIR)\n", - "client = vision.ImageAnnotatorClient(credentials=credentials)\n", - "with io.open('/Users/kunal/Documents/ResumeNLPVdart/Testing_Delete/Document_402.jpg', 'rb') as image_file:\n", - " content = image_file.read()\n", - "image = vision.types.Image(content=content)\n", - "response = client.text_detection(image=image)\n", - "texts = response.text_annotations\n", - "totalString = ''\n", - "for text in texts:\n", - " totalString+=text.description\n", - "totalString = totalString.rsplit(' ', 1)[0]\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"NISARGA HASSAN SREEDHAR\\nSan Jose, California |+1 (925) 789-8911| nisarga.nishu20@gmail.com | www.linkedin.com/in/nisarga-sreedhar-39938516b\\nEDUCATION:\\nMaster's in Electrical Engineering (Computer Networking), San Jose State University, California, USA.\\nCoursework: Internetworking, Broadband communications, Network Security, Internet of Things (IoT), Voice over IP\\nBachelor of Engineering in Telecommunication Engineering, Dayananda Sagar College of Engineering, Visvesvaraya\\nTechnological University, India\\nMay 2020\\nJune 2017\\nTECHNICAL SKILLS:\\nNetwork technologies: HTTP, DNS, DHCP, HTTPS, TLS-SSL, TCP/IP, UDP, IPV4, IPV6, ICMP, OSPF, BGP, ARP, VLAN, STP,\\nSIP, IPS, IDS, NAT, IS-IS, 802.11, MPLS, WPA2, WPA3, Packet level troubleshooting\\nProgramming: Python\\nOS Platform: Linux (Ubuntu, CentOS), Kali Linux, Cisco IOS\\nTools and IDE: Advanced Design System (ADS), Wireshark, VMware Workstation, VirtualBox, GNS3, Cisco Packet Tracer, PUTTY\\nCERTIFICATION:\\nCisco Certified Network Associate (CCNA) 200-301\\nAWS Certified Cloud Practitioner (CLF-C01)\\n(In Progress)\\n(In progress)\\nEXPERIENCE:\\nJune 2019 - July 2019\\nMarmon Food & Beverages Technologies, Cornelius, India\\nNetwork Engineer Intern\\nPython based Serial Communication (IoT)\\nUsed an Iot Dongle to read a file, convert it into a packet by adding header and footer and transmit serially.\\nPython code was written to send the file from dongle to Food Holding Bin.\\nACADEMIC PROJECTS:\\nSecure routing in IoT networks\\nAug 2019 - current\\nDesign and configure an IoT based network using Cisco Packet Tracer.\\nPerform a Man in the Middle attack to one of the devices using Kali Linux.\\nDetection of the attack and solution to the problem faced.\\nIllumino: IoT Smart Light\\nAug 2019 - Dec 2019\\nCreate a hardware of an IoT smart light using Arduino ESP8266 and Cayenne IoT Platform.\\nDesigned to operate in three modes: Auto mode, Lamp mode, Security mode.\\nUse of Cayenne web application to detect temperature and provides a siren at thresholds.\\nVoice over IP for Wireless Ad Hoc Networks (WANET)\\nAug 2019 - Dec 2019\\nSimple Call Establishment between two clients in a WANET that have registered with the Asterisk server.\\nCall on Hold with one user client to attend another client.\\nCall Conferencing between all three clients, all performed using X-Lite softphone software.\\nExperiencing Virtualization using Virtual Box\\nJan 2019 - April 2019\\nWorked on Open vSwitch in Virtual Box on an Ubuntu machine to run ovs and its versions successfully.\\nDemonstrated how the VLANS are implemented, three VMs and one virtual switch is created.\\nAttempted to communicate between the VMs and observed the PING result.\\nCorporate Company Network Design\\nAug 2018 - Dec 2018\\n• Designed and implemented a basic corporate network topology for the interconnection between offices with\\nswitches, routers, and hosts.\\n• Implemented the design using routing protocols such as OSPF, BGP, DNS, VLAN, STP, IP, DHCP and HSRP.\\nTested and troubleshot configurations in the console to check the communication between the networks.\\nDesign of X-Band 8PSK Modulator using ADS\\nJan 2017 - April 2017\\nDesigned various components of the modulator used in a satellite at ISRO (Indian Space Research Organization), Bangalore.\\nPerformed optimization of the components at 8.75GHZ frequency using the tools available in ADS to obtain the desired results of\\nInsertion loss, Return loss and Isolation\"" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "totalString" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def convert_image_to_text():\n", - " keyDIR = \"/Users/kunal/Documents/VdartWorking/GOOGLEAPI/vdartrealfakevision-0f30bdc03946.json\"\n", - " credentials = service_account.Credentials.from_service_account_file(keyDIR)\n", - " client = vision.ImageAnnotatorClient(credentials=credentials)\n", - "\n", - " with io.open(MAINIMAGEFILEPNG, 'rb') as image_file:\n", - " content = image_file.read()\n", - "\n", - " image = vision.types.Image(content=content)\n", - " response = client.document_text_detection(image=image)\n", - " textDocument = []\n", - " blockConfid = []\n", - " paraConfid = []\n", - " wordConfid = []\n", - " for page in response.full_text_annotation.pages:\n", - " for block in page.blocks:\n", - " for paragraph in block.paragraphs:\n", - " for word in paragraph.words:\n", - " word_text = ''.join([symbol.text for symbol in word.symbols])\n", - " textDocument.append(word_text)\n", - " blockConfid.append(block.confidence)\n", - " paraConfid.append(paragraph.confidence)\n", - " wordConfid.append(word.confidence)\n", - "\n", - " if response.error.message:\n", - " raise Exception(\n", - " '{}\\nFor more info on error messages, check: '\n", - " 'https://cloud.google.com/apis/design/errors'.format(\n", - " response.error.message))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Basic NLP Testing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "text = \"\"\"NISARGA HASSAN SREEDHAR\n", - "San Jose, California | +1 (925) 789-8911| nisarga.nishu20@gmail.com | www.linkedin.com/in/nisarga-sreedhar-39938516b\n", - "EDUCATION:\n", - "Master’s in Electrical Engineering (Computer Networking), San Jose State University, California, USA. May 2020\n", - "Coursework: Internetworking, Broadband communications, Network Security, Internet of Things (IoT), Voice over IP\n", - "Bachelor of Engineering in Telecommunication Engineering, Dayananda Sagar College of Engineering, Visvesvaraya\n", - "Technological University, India June 2017\n", - "TECHNICAL SKILLS:\n", - "Network technologies: HTTP, DNS, DHCP, HTTPS, TLS-SSL, TCP/IP, UDP, IPv4, IPv6, ICMP, OSPF, BGP, ARP, VLAN, STP,\n", - "SIP, IPS, IDS, NAT, IS-IS, 802.11, MPLS, WPA2, WPA3, Packet level troubleshooting\n", - "Programming: Python\n", - "OS Platform: Linux (Ubuntu, CentOS), Kali Linux, Cisco IOS\n", - "Tools and IDE: Advanced Design System (ADS), Wireshark, VMware Workstation, VirtualBox, GNS3, Cisco Packet Tracer, PuTTY\n", - "CERTIFICATION:\n", - "• Cisco Certified Network Associate (CCNA) 200-301 (In Progress)\n", - "• AWS Certified Cloud Practitioner (CLF-C01) (In progress)\n", - "EXPERIENCE:\n", - "Marmon Food & Beverages Technologies, Cornelius, India June 2019 - July 2019\n", - "Network Engineer Intern\n", - "• Python based Serial Communication (IoT)\n", - "• Used an Iot Dongle to read a file, convert it into a packet by adding header and footer and transmit serially.\n", - "• Python code was written to send the file from dongle to Food Holding Bin.\n", - "ACADEMIC PROJECTS:\n", - "Secure routing in IoT networks Aug 2019 - current\n", - "• Design and configure an IoT based network using Cisco Packet Tracer.\n", - "• Perform a Man in the Middle attack to one of the devices using Kali Linux.\n", - "• Detection of the attack and solution to the problem faced.\n", - "Illumino: IoT Smart Light Aug 2019 - Dec 2019\n", - "• Create a hardware of an IoT smart light using Arduino ESP8266 and Cayenne IoT Platform.\n", - "• Designed to operate in three modes: Auto mode, Lamp mode, Security mode.\n", - "• Use of Cayenne web application to detect temperature and provides a siren at thresholds.\n", - "Voice over IP for Wireless Ad Hoc Networks (WANET) Aug 2019 - Dec 2019\n", - "• Simple Call Establishment between two clients in a WANET that have registered with the Asterisk server.\n", - "• Call on Hold with one user client to attend another client.\n", - "• Call Conferencing between all three clients, all performed using X-Lite softphone software.\n", - "Experiencing Virtualization using Virtual Box Jan 2019 - April 2019\n", - "• Worked on Open vSwitch in Virtual Box on an Ubuntu machine to run ovs and its versions successfully.\n", - "• Demonstrated how the VLANs are implemented, three VMs and one virtual switch is created.\n", - "• Attempted to communicate between the VMs and observed the PING result.\n", - "Corporate Company Network Design Aug 2018 - Dec 2018\n", - "• Designed and implemented a basic corporate network topology for the interconnection between offices with\n", - "switches, routers, and hosts.\n", - "• Implemented the design using routing protocols such as OSPF, BGP, DNS, VLAN, STP, IP, DHCP and HSRP.\n", - "• Tested and troubleshot configurations in the console to check the communication between the networks.\n", - "Design of X-Band 8PSK Modulator using ADS Jan 2017 - April 2017\n", - "• Designed various components of the modulator used in a satellite at ISRO (Indian Space Research Organization), Bangalore.\n", - "• Performed optimization of the components at 8.75GHz frequency using the tools available in ADS to obtain the desired results of\n", - "Insertion loss, Return loss and Isolation loss.\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "tokens = [t for t in text.split()]\n", - "\n", - "freq = nltk.FreqDist(tokens)\n", - "\n", - "for key,val in freq.items():\n", - "\n", - " print (str(key) + ':' + str(val))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "freq.plot(20, cumulative=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.corpus import stopwords" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "clean_tokens = tokens[:]\n", - "sr = stopwords.words('english')\n", - "for token in tokens:\n", - " if token in stopwords.words('english'):\n", - " clean_tokens.remove(token)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "freq.plot(20,cumulative=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import sent_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(sent_tokenize(text))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.tokenize import word_tokenize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(word_tokenize(text))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from nltk.stem import PorterStemmer\n", - "from nltk.stem import WordNetLemmatizer" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "stemmer = PorterStemmer()\n", - "print(stemmer.stem('working'))\n", - "lemmatizer = WordNetLemmatizer()\n", - "print(lemmatizer.lemmatize('increases'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "gension nltk spacy" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "mongodb" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "ImportError", - "evalue": "preshed.maps does not export expected C function map_clear", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mspacy\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mnlp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mspacy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"en_core_web_sm\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mdoc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnlp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Apple is looking at buying U.K. startup for $1 billion\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\spacy\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mthinc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mneural\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mutil\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mprefer_gpu\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrequire_gpu\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 12\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpipeline\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 13\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mcli\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minfo\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0minfo\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mcli_info\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mglossary\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mexplain\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\spacy\\pipeline\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0municode_literals\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mpipes\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mTagger\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mDependencyParser\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mEntityRecognizer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mEntityLinker\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mpipes\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mTextCategorizer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTensorizer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mPipe\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mSentencizer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mmorphologizer\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mMorphologizer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mpipes.pyx\u001b[0m in \u001b[0;36minit spacy.pipeline.pipes\u001b[1;34m()\u001b[0m\n", - "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\spacy\\pipeline\\functions.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlanguage\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcomponent\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmatcher\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mMatcher\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mutil\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mfilter_spans\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\AppData\\Roaming\\Python\\Python37\\site-packages\\spacy\\matcher\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mmatcher\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mMatcher\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mphrasematcher\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mPhraseMatcher\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mdependencymatcher\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mDependencyMatcher\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 7\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mphrasematcher.pyx\u001b[0m in \u001b[0;36minit spacy.matcher.phrasematcher\u001b[1;34m()\u001b[0m\n", - "\u001b[1;31mImportError\u001b[0m: preshed.maps does not export expected C function map_clear" - ] - } - ], - "source": [ - "import spacy\n", - "\n", - "nlp = spacy.load(\"en_core_web_sm\")\n", - "doc = nlp(\"Apple is looking at buying U.K. startup for $1 billion\")\n", - "\n", - "for token in doc:\n", - " print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,\n", - " token.shape_, token.is_alpha, token.is_stop)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "import nltk\n", - "from nltk.corpus import stopwords\n", - "stop = stopwords.words('english')" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'document' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdocument\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m' '\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mdocument\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msplit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mstop\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0msentences\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnltk\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msent_tokenize\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdocument\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mNameError\u001b[0m: name 'document' is not defined" - ] - } - ], - "source": [ - "document = ' '.join([i for i in document.split() if i not in stop])\n", - "sentences = nltk.sent_tokenize(document)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sentences = [nltk.word_tokenize(sent) for sent in sentences]" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package averaged_perceptron_tagger to\n", - "[nltk_data] C:\\Users\\kunal\\AppData\\Roaming\\nltk_data...\n", - "[nltk_data] Package averaged_perceptron_tagger is already up-to-\n", - "[nltk_data] date!\n" - ] - }, - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nltk.download('averaged_perceptron_tagger')" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'sentences' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msentences\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mnltk\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpos_tag\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msent\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0msent\u001b[0m \u001b[1;32min\u001b[0m \u001b[0msentences\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mNameError\u001b[0m: name 'sentences' is not defined" - ] - } - ], - "source": [ - "sentences = [nltk.pos_tag(sent) for sent in sentences]" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], - "source": [ - "import re\n", - "import nltk\n", - "from nltk.corpus import stopwords\n", - "stop = stopwords.words('english')\n", - "\n", - "string = \"\"\"\n", - "NISARGA HASSAN SREEDHAR\n", - "San Jose, California | +1 (925) 789-8911| nisarga.nishu20@gmail.com | www.linkedin.com/in/nisarga-sreedhar-39938516b\n", - "\"\"\"\n", - "\n", - "def extract_phone_numbers(string):\n", - " r = re.compile(r'(\\d{3}[-\\.\\s]??\\d{3}[-\\.\\s]??\\d{4}|\\(\\d{3}\\)\\s*\\d{3}[-\\.\\s]??\\d{4}|\\d{3}[-\\.\\s]??\\d{4})')\n", - " phone_numbers = r.findall(string)\n", - " return [re.sub(r'\\D', '', number) for number in phone_numbers]\n", - "\n", - "def extract_email_addresses(string):\n", - " r = re.compile(r'[\\w\\.-]+@[\\w\\.-]+')\n", - " return r.findall(string)\n", - "\n", - "def ie_preprocess(document):\n", - " document = ' '.join([i for i in document.split() if i not in stop])\n", - " sentences = nltk.sent_tokenize(document)\n", - " sentences = [nltk.word_tokenize(sent) for sent in sentences]\n", - " sentences = [nltk.pos_tag(sent) for sent in sentences]\n", - " return sentences\n", - "\n", - "def extract_names(document):\n", - " names = []\n", - " sentences = ie_preprocess(document)\n", - " for tagged_sentence in sentences:\n", - " for chunk in nltk.ne_chunk(tagged_sentence):\n", - " if type(chunk) == nltk.tree.Tree:\n", - " if chunk.label() == 'PERSON':\n", - " names.append(' '.join([c[0] for c in chunk]))\n", - " return names\n" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[nltk_data] Downloading package maxent_ne_chunker to\n", - "[nltk_data] C:\\Users\\kunal\\AppData\\Roaming\\nltk_data...\n", - "[nltk_data] Package maxent_ne_chunker is already up-to-date!\n", - "[nltk_data] Downloading package words to\n", - "[nltk_data] C:\\Users\\kunal\\AppData\\Roaming\\nltk_data...\n", - "[nltk_data] Package words is already up-to-date!\n" - ] - }, - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nltk.download('maxent_ne_chunker')\n", - "nltk.download('words')" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], - "source": [ - "numbers = extract_phone_numbers(string)\n", - "emails = extract_email_addresses(string)\n", - "names = extract_names(string)" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['9257898911', '3993851']" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numbers" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['nisarga.nishu20@gmail.com']" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "emails" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['San Jose']" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "349.091px" - }, - "toc_section_display": true, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Naive Bayes Classifier.ipynb b/Naive Bayes Classifier.ipynb deleted file mode 100644 index acb6103..0000000 --- a/Naive Bayes Classifier.ipynb +++ /dev/null @@ -1,356 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import Image" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Naive Bayes Classifier\n", - "By Kunal Aneja" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### What is it \n", - "**A theorem that uses probability to calculate a specific probability**\n", - "\n", - "- P(A|B) --> conditional probability of A with respect to B" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img2.png\")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img.png\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Example: Emails " - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img3.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- predict whether or not it’s spam\n", - "- new case: **JOB** \n", - "- is it spam or not?\n", - "- compute some basic probabilities" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img4.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Basic multiplication" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img5.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Summary**\n", - "- Probability for email being spam with the word JOB is 33%\n", - "- Single vector/variable calculation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Different types of Naïve Bayes classifiers" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "In Gaussian Naive Bayes we assume that continuous value associated with each feature follow Gaussian distribution(Also known as normal distribution).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Gaussian Naive Bayes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Everything follows a normal distribution\n", - "- Uses log probability --> to deal with edge lower probailites\n", - "- only the **mean** and **standard deviation** of the data needs to be estimated." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "image/gif": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img6.gif\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Bernoulli" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Classify between **True** and **False**\n", - "- Very simple code\n", - "- Single Vector\n", - "- Used in email example" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Multinomial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Used in Natrual Language Processing (NLP)\n", - "- The term Multinomial Naive Bayes simply lets us know that each p(fi|c) is a multinomial distribution, rather than some other distribution. This works well for data which can easily be turned into counts, such as word counts in text.\n", - "- Use multiple vectors/tokens (words) to calculate total sentence\n", - "- Works with extract meaning of multiline words using a spider connection between each" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Image(filename=\"/Users/kunal/Desktop/img7.png\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## How I am going to be using it" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- Extracting info from a resume\n", - "- Unstructed data\n", - "- Extract names \n", - "- Understand what document means\n", - "- Multiple **Different** types of resumes" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Example " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def extract_email_addresses(string):\n", - " r = re.compile(r'[\\w\\.-]+@[\\w\\.-]+')\n", - " return r.findall(string)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/README.md b/README.md index 819ec48..a1f7bde 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,5 @@ # ClientResumeMatching A client company is looking for employees. Employees are looking for jobs. Employees send in a resume and the company sends in a job description. Extract exact which resume matches the job description the best. -## Main topics for the resume -- Skillset -- Qualifications -- Work Experience -- Career objectives -## Main topics for the Jary (free flow text from company) -- Skill set -- Experience -- Location -- Responsibilities -- Role - -## Flow plan -1. Create a dataset of skill sets and similar skills to each using dice - 2. [https://www.dice.com/skills](https://www.dice.com/skills) - 3. Use firebase database - 4. Use web scraping → robotic process automation web scraping -2. Connect the 50 resumes to the firebase database - 3. Be able to make database dynamic with easier to -3. Using NLP analysis resume getting basic understand - 4. Create new database where we can save this preliminary data -4. Build on the main topics of the resume and connect them to the generated topic - 5. This will be the basics of understanding -5. Connect the website to the python code - 6. With this we must also connect the database -6. Develop website to upload documents to database -7. Connect main topics of the Jary -8. Generate a SVD for understanding the topics (unstructured data) -9. Use and Bayes Theorem and Naive Bayes to generate a basic outline of both documents -10. U sing transfer learning build a running base model (Spacy) -11. Optimize model for speed and accuracy +# Branch for Unnaty +**Input your own thoughts** diff --git a/Untitled.ipynb b/Untitled.ipynb deleted file mode 100644 index fcf67b5..0000000 --- a/Untitled.ipynb +++ /dev/null @@ -1,646 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import spacy\n", - "#it means that the Python environment the model was installed in is not the same as your Jupyter environment." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\kunal\\Anaconda3\\lib\\site-packages\\spacy\\util.py:275: UserWarning: [W031] Model 'en_core_web_sm' (2.2.0) requires spaCy v2.2 and is incompatible with the current spaCy version (2.3.1). This may lead to unexpected results or runtime errors. To resolve this, download a newer compatible model or retrain your custom model with the current spaCy version. For more details and available updates, run: python -m spacy validate\n", - " warnings.warn(warn_msg)\n" - ] - } - ], - "source": [ - "import en_core_web_sm\n", - "nlp = en_core_web_sm.load()\n", - "#nlp = spacy.load(\"en_core_web_sm\") \n", - "#nlp = en_core_web_sm.load()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "doc = nlp(\"Use of Cayenne web application to detect temperature and provides a siren at thresholds.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "text = \"\"\"NISARGA HASSAN SREEDHAR\n", - "San Jose, California | +1 (925) 789-8911| nisarga.nishu20@gmail.com | www.linkedin.com/in/nisarga-sreedhar-39938516b\n", - "EDUCATION:\n", - "Master’s in Electrical Engineering (Computer Networking), San Jose State University, California, USA. May 2020\n", - "Coursework: Internetworking, Broadband communications, Network Security, Internet of Things (IoT), Voice over IP\n", - "Bachelor of Engineering in Telecommunication Engineering, Dayananda Sagar College of Engineering, Visvesvaraya\n", - "Technological University, India June 2017\n", - "TECHNICAL SKILLS:\n", - "Network technologies: HTTP, DNS, DHCP, HTTPS, TLS-SSL, TCP/IP, UDP, IPv4, IPv6, ICMP, OSPF, BGP, ARP, VLAN, STP,\n", - "SIP, IPS, IDS, NAT, IS-IS, 802.11, MPLS, WPA2, WPA3, Packet level troubleshooting\n", - "Programming: Python\n", - "OS Platform: Linux (Ubuntu, CentOS), Kali Linux, Cisco IOS\n", - "Tools and IDE: Advanced Design System (ADS), Wireshark, VMware Workstation, VirtualBox, GNS3, Cisco Packet Tracer, PuTTY\n", - "CERTIFICATION:\n", - "• Cisco Certified Network Associate (CCNA) 200-301 (In Progress)\n", - "• AWS Certified Cloud Practitioner (CLF-C01) (In progress)\n", - "EXPERIENCE:\n", - "Marmon Food & Beverages Technologies, Cornelius, India June 2019 - July 2019\n", - "Network Engineer Intern\n", - "• Python based Serial Communication (IoT)\n", - "• Used an Iot Dongle to read a file, convert it into a packet by adding header and footer and transmit serially.\n", - "• Python code was written to send the file from dongle to Food Holding Bin.\n", - "ACADEMIC PROJECTS:\n", - "Secure routing in IoT networks Aug 2019 - current\n", - "• Design and configure an IoT based network using Cisco Packet Tracer.\n", - "• Perform a Man in the Middle attack to one of the devices using Kali Linux.\n", - "• Detection of the attack and solution to the problem faced.\n", - "Illumino: IoT Smart Light Aug 2019 - Dec 2019\n", - "• Create a hardware of an IoT smart light using Arduino ESP8266 and Cayenne IoT Platform.\n", - "• Designed to operate in three modes: Auto mode, Lamp mode, Security mode.\n", - "• Use of Cayenne web application to detect temperature and provides a siren at thresholds.\n", - "Voice over IP for Wireless Ad Hoc Networks (WANET) Aug 2019 - Dec 2019\n", - "• Simple Call Establishment between two clients in a WANET that have registered with the Asterisk server.\n", - "• Call on Hold with one user client to attend another client.\n", - "• Call Conferencing between all three clients, all performed using X-Lite softphone software.\n", - "Experiencing Virtualization using Virtual Box Jan 2019 - April 2019\n", - "• Worked on Open vSwitch in Virtual Box on an Ubuntu machine to run ovs and its versions successfully.\n", - "• Demonstrated how the VLANs are implemented, three VMs and one virtual switch is created.\n", - "• Attempted to communicate between the VMs and observed the PING result.\n", - "Corporate Company Network Design Aug 2018 - Dec 2018\n", - "• Designed and implemented a basic corporate network topology for the interconnection between offices with\n", - "switches, routers, and hosts.\n", - "• Implemented the design using routing protocols such as OSPF, BGP, DNS, VLAN, STP, IP, DHCP and HSRP.\n", - "• Tested and troubleshot configurations in the console to check the communication between the networks.\n", - "Design of X-Band 8PSK Modulator using ADS Jan 2017 - April 2017\n", - "• Designed various components of the modulator used in a satellite at ISRO (Indian Space Research Organization), Bangalore.\n", - "• Performed optimization of the components at 8.75GHz frequency using the tools available in ADS to obtain the desired results of\n", - "Insertion loss, Return loss and Isolation loss.\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "from collections import Counter\n", - "from string import punctuation" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import en_core_web_lg\n", - "nlp = en_core_web_lg.load()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def get_hotwords(text):\n", - " result = []\n", - " pos_tag = ['PROPN', 'ADJ', 'NOUN'] # 1\n", - " doc = nlp(text.lower()) # 2\n", - " for token in doc:\n", - " # 3\n", - " if(token.text in nlp.Defaults.stop_words or token.text in punctuation):\n", - " continue\n", - " # 4\n", - " if(token.pos_ in pos_tag):\n", - " result.append(token.text)\n", - " \n", - " return result # 5" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "output = set(get_hotwords(text))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'sreedhar', 'design', 'centos', 'result', 'vswitch', 'switch', 'icmp', 'vmware', 'corporate', 'asterisk', 'indian', 'x', 'nisarga', 'advanced', 'footer', 'simple', 'company', 'virtual', 'certification', 'internet', 'june', 'code', 'programming', 'jose', 'tcp', 'india', 'aws', 'lamp', 'web', 'wireless', 'modulator', 'vlans', 'hardware', 'optimization', 'dhcp', 'technological', 'c01', 'insertion', 'ips', 'technical', 'hassan', 'practitioner', 'networks', 'ssl', 'secure', 'computer', 'https', 'wireshark', 'bin', 'detection', 'technologies', 'configurations', 'bgp', 'experience', 'components', 'bachelor', 'tls', 'beverages', 'research', 'hosts', 'application', 'internetworking', 'dec', 'available', 'university', 'machine', 'nat', 'ads', 'bangalore', 'linux', 'california', 'electrical', 'progress', 'man', 'www.linkedin.com/in/nisarga-sreedhar-39938516b', 'networking', 'voice', 'os', 'ios', 'workstation', 'tracer', 'isro', 'frequency', 'gns3', 'satellite', 'hold', 'file', 'console', 'smart', 'ide', 'communication', 'academic', 'april', 'engineering', 'ip', 'header', 'devices', 'softphone', 'level', 'network', 'college', 'siren', 'dns', 'cisco', 'use', 'cayenne', 'isolation', 'iot', 'mpls', 'food', 'packet', 'tools', 'master', 'system', 'box', 'thresholds', 'offices', 'vms', 'arduino', 'usa', 'ospf', 'middle', 'establishment', 'virtualbox', '+1', 'loss', 'current', 'hsrp', 'wanet', 'results', 'intern', 'switches', 'space', 'serial', 'education', 'wpa2', 'solution', 'cloud', 'telecommunication', 'protocols', 'stp', 'modes', 'engineer', 'dayananda', 'ping', 'light', 'topology', 'state', 'temperature', 'server', 'lite', 'conferencing', 'user', 'marmon', 'interconnection', 'organization', 'july', 'dongle', 'clf', 'clients', 'skills', 'http', 'vlan', 'udp', 'problem', 'broadband', 'versions', 'python', 'aug', 'platform', 'virtualization', 'associate', 'projects', 'san', 'client', '802.11', 'ovs', 'ids', 'coursework', 'band', 'visvesvaraya', 'ubuntu', 'ccna', 'software', 'attack', 'routers', 'mode', 'sagar', 'basic', 'arp', 'auto', 'routing', '•', 'cornelius', 'communications', 'esp8266', 'putty', 'kali', 'open', 'things', 'security', 'jan'}\n" - ] - } - ], - "source": [ - "print(output)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "#sreedhar #design #centos #result #vswitch #switch #icmp #vmware #corporate #asterisk\n" - ] - } - ], - "source": [ - "hashtags = [('#' + x[0]) for x in Counter(output).most_common(10)]\n", - "print(' '.join(hashtags))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loaded language vocabulary\n", - "['aug current • design', 'sreedhar', 'design', 'centos', 'broadband communications', 'result', 'vswitch', 'switch', 'icmp', 'python os platform', 'transmit', 'vmware', 'asterisk', 'corporate', 'indian', 'illumino', 'x', 'footer', 'nisarga', 'advanced', 'simple', 'company', 'virtual', 'certification', 'internet', 'lamp mode', 'troubleshot', 'june', 'code', 'nisarga hassan sreedhar san jose', 'telecommunication engineering', 'technical skills', 'programming', 'modulator', 'optimization', 'jose', 'india', 'tcp', 'vlans', 'hardware', 'cayenne web application', 'aws', 'dhcp', 'various components', 'technological', 'c01', 'x band modulator', 'virtual box jan', 'wireless networks', 'open vswitch', 'ipv6', 'insertion', 'ips', 'technical', 'hassan', 'practitioner', 'networks', 'ssl', 'secure', 'https', 'wireshark', 'computer', 'bin', 'network technologies', 'detection', 'indian space research organization', 'technologies', 'configurations', 'bgp', 'experience', 'components', 'bachelor', 'virtual box', 'tls', 'beverages', 'wireless', 'research', 'sip', 'hosts', 'security mode', 'application', 'dec', 'available', 'electrical engineering', 'university', 'machine', 'nat', 'ads', 'bangalore', 'linux', 'california', 'electrical', 'progress', 'man', 'www.linkedin.com/in/nisarga-sreedhar-39938516b', 'voice', '• use', 'networking', 'os', 'marmon food beverages technologies', 'workstation', 'tracer', 'iot dongle', 'isro', 'frequency', 'gns3', 'satellite', 'hold', 'file', 'clf c01', 'console', 'may', 'ide', 'april', 'communication', 'academic', 'smart', 'engineering', 'ip', 'nisarga.nishu20@gmail.com', 'header', 'devices', 'insertion loss', 'softphone', 'level', 'network', 'college', 'iot smart light', 'siren', 'dns', 'cisco', 'lamp', 'dec • simple call establishment', 'cayenne', 'use', 'isolation', 'iot', 'mpls', 'food', 'ubuntu machine', 'packet', 'tools', 'master', 'cayenne iot platform', '8911|', 'thresholds', 'offices', 'system', 'box', 'vms', 'virtual switch', 'india june', 'isolation loss', 'arduino', 'ospf', 'usa', 'middle', 'corporate company network design', 'establishment', 'iot network', 'virtualbox', '+1', 'loss', 'current', 'python code', 'hsrp', 'packet level', 'nisarga.nishu20@gmail.com |', 'web', 'wanet', 'results', 'ubuntu centos', 'switches', 'intern', 'network security', 'serial', 'education', 'space', 'wpa2', 'solution', 'advanced design system', 'cisco packet tracer', 'auto mode', 'user client', 'vlan stp', 'protocols', 'telecommunication', 'cloud', 'stp', '• call', 'modes', 'engineer', 'dayananda', 'ping', 'troubleshot configurations', 'july network engineer intern • python serial communication', 'light', 'topology', 'state', 'putty certification', 'dayananda sagar college', 'temperature', 'server', 'academic projects', 'lite', 'interconnection', 'user', 'marmon', 'conferencing', 'organization', 'dongle', 'july', 'asterisk server', 'vmware workstation', 'clf', 'clients', 'skills', 'http', 'kali linux', 'san jose state university', 'udp', 'vlan', 'problem', 'broadband', 'visvesvaraya technological university', 'versions', 'lite softphone software', 'aug', 'python', 'computer networking', 'www.linkedin.com/in/nisarga-sreedhar-39938516b education', 'ipv4', 'platform', 'associate', 'projects', 'san', 'wpa3', 'client', 'ids', 'middle attack', 'coursework', 'california |', 'iot networks', 'ccna', 'visvesvaraya', 'ubuntu', 'software', 'band', 'attack', 'master ’s', 'tcp ip', 'routers', 'mode', 'basic corporate network topology', 'sagar', 'basic', 'arp', '• detection', 'routing', 'auto', 'cornelius', '•', 'esp8266', 'communications', 'putty', 'kali', 'open', 'things', 'ping result', 'security', 'jan']\n" - ] - } - ], - "source": [ - "import spacy\n", - "import subprocess\n", - "from string import punctuation\n", - "\n", - "\n", - "def extract_keywords(nlp, sequence, special_tags: list = None):\n", - " \"\"\" Takes a Spacy core language model,\n", - " string sequence of text and optional\n", - " list of special tags as arguments.\n", - " \n", - " If any of the words in the string are \n", - " in the list of special tags they are immediately \n", - " added to the result. \n", - " \n", - " Arguments:\n", - " sequence {str} -- string sequence to have keywords extracted from\n", - " \n", - " Keyword Arguments:\n", - " tags {list} -- list of tags to be automatically added (default: {None})\n", - " \n", - " Returns:\n", - " {list} -- list of the unique keywords extracted from a string\n", - " \"\"\"\n", - " result = []\n", - "\n", - " # custom list of part of speech tags we are interested in\n", - " # we are interested in proper nouns, nouns, and adjectives\n", - " # edit this list of POS tags according to your needs.\n", - " pos_tag = ['PROPN', 'NOUN', 'ADJ']\n", - "\n", - " # create a spacy doc object by calling the nlp object on the input sequence\n", - " doc = nlp(sequence.lower())\n", - "\n", - " # if special tags are given and exist in the input sequence\n", - " # add them to results by default\n", - " if special_tags:\n", - " tags = [tag.lower() for tag in special_tags]\n", - " for token in doc:\n", - " if token.text in tags:\n", - " result.append(token.text)\n", - "\n", - " for chunk in doc.noun_chunks:\n", - " final_chunk = \"\"\n", - " for token in chunk:\n", - " if (token.pos_ in pos_tag):\n", - " final_chunk = final_chunk + token.text + \" \"\n", - " if final_chunk:\n", - " result.append(final_chunk.strip())\n", - "\n", - " for token in doc:\n", - " if (token.text in nlp.Defaults.stop_words\n", - " or token.text in punctuation):\n", - " continue\n", - " if (token.pos_ in pos_tag):\n", - " result.append(token.text)\n", - " return list(set(result))\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " \"\"\"\n", - " install the langauge model using the subprocess package\n", - " useful when hosting the service in the cloud as it prevents against\n", - " us forgetting to do this via the CLI\n", - " \"\"\"\n", - " #subprocess.call(\"python -m spacy download en_core_web_sm\",shell=True)\n", - "\n", - " # load the small english language model,\n", - " nlp = spacy.load(\"en_core_web_sm\")\n", - "\n", - " print(\"Loaded language vocabulary\")\n", - " print(\n", - " extract_keywords(\n", - " nlp, text\n", - " ))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "import spacy\n", - "from spacy import displacy\n", - "from collections import Counter\n", - "import en_core_web_sm\n", - "nlp = en_core_web_sm.load()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[('San Jose', 'GPE'), ('California', 'GPE'), ('925', 'CARDINAL'), ('789', 'CARDINAL'), ('San Jose State University', 'GPE'), ('California', 'GPE'), ('USA', 'GPE'), ('May 2020', 'DATE'), ('Internetworking', 'GPE'), ('Broadband', 'GPE'), ('Network Security', 'ORG'), ('IoT', 'ORG'), ('Voice', 'ORG'), ('IP\\nBachelor of Engineering', 'ORG'), ('Telecommunication Engineering', 'ORG'), ('Dayananda Sagar College of Engineering,', 'ORG'), ('Visvesvaraya\\nTechnological University', 'ORG'), ('India', 'GPE'), ('June 2017', 'DATE'), ('HTTP', 'ORG'), ('HTTPS', 'ORG'), ('TLS-SSL', 'ORG'), ('TCP/IP', 'ORG'), ('UDP', 'ORG'), ('ICMP', 'ORG'), ('OSPF', 'ORG'), ('BGP', 'ORG'), ('ARP', 'ORG'), ('VLAN', 'ORG'), ('STP', 'ORG'), ('IPS', 'ORG'), ('IDS', 'ORG'), ('NAT', 'ORG'), ('IS-IS', 'ORG'), ('802.11', 'CARDINAL'), ('MPLS', 'ORG'), ('WPA2', 'ORG'), ('WPA3', 'ORG'), ('Packet', 'PERSON'), ('Linux', 'PERSON'), ('Kali Linux', 'PERSON'), ('Cisco IOS\\nTools', 'ORG'), ('IDE', 'ORG'), ('Advanced Design System', 'ORG'), ('ADS', 'ORG'), ('Wireshark', 'ORG'), ('VMware Workstation', 'ORG'), ('VirtualBox', 'ORG'), ('GNS3', 'ORG'), ('Cisco Packet Tracer', 'PERSON'), ('Cisco Certified Network Associate', 'ORG'), ('200-301', 'CARDINAL'), ('AWS', 'ORG'), ('Cloud Practitioner', 'PERSON'), ('CLF-C01', 'ORG'), ('Cornelius', 'GPE'), ('India', 'GPE'), ('June 2019 - July 2019', 'DATE'), ('Python', 'ORG'), ('Serial Communication', 'ORG'), ('IoT', 'ORG'), ('Iot Dongle', 'PERSON'), ('Python', 'ORG'), ('IoT', 'ORG'), ('IoT', 'ORG'), ('Cisco Packet Tracer', 'PERSON'), ('Perform a Man in the Middle attack', 'WORK_OF_ART'), ('Kali Linux', 'PERSON'), ('IoT', 'ORG'), ('Light Aug 2019', 'PERSON'), ('IoT', 'ORG'), ('Arduino ESP8266', 'PERSON'), ('Cayenne IoT Platform', 'ORG'), ('three', 'CARDINAL'), ('IP', 'GPE'), ('WANET', 'ORG'), ('two', 'CARDINAL'), ('WANET', 'ORG'), ('Asterisk', 'PERSON'), ('one', 'CARDINAL'), ('three', 'CARDINAL'), ('X-Lite', 'ORG'), ('Virtual Box Jan 2019', 'ORG'), ('Worked on Open vSwitch in Virtual Box', 'WORK_OF_ART'), ('three', 'CARDINAL'), ('one', 'CARDINAL'), ('PING', 'ORG'), ('OSPF', 'ORG'), ('BGP', 'ORG'), ('DNS', 'ORG'), ('VLAN', 'ORG'), ('STP', 'ORG'), ('IP', 'ORG'), ('HSRP', 'ORG'), ('ADS', 'ORG'), ('2017', 'DATE'), ('Indian Space Research Organization', 'ORG'), ('Bangalore', 'GPE'), ('ADS', 'ORG'), ('Return', 'ORG'), ('Isolation', 'ORG')]\n" - ] - } - ], - "source": [ - "doc = nlp(text)\n", - "print([(X.text, X.label_) for X in doc.ents])" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Pretty printing has been turned OFF\n" - ] - } - ], - "source": [ - "pprint([(X, X.ent_iob_, X.ent_type_) for X in doc])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "from bs4 import BeautifulSoup\n", - "import requests\n", - "import re" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GPE | San Jose\n", - "GPE | California\n", - "CARDINAL | 925\n", - "CARDINAL | 789\n", - "GPE | San Jose State University\n", - "GPE | California\n", - "GPE | USA\n", - "DATE | May 2020\n", - "GPE | Internetworking\n", - "GPE | Broadband\n", - "ORG | Network Security\n", - "ORG | IoT\n", - "ORG | Voice\n", - "ORG | IP\n", - "Bachelor of Engineering\n", - "ORG | Telecommunication Engineering\n", - "ORG | Dayananda Sagar College of Engineering,\n", - "ORG | Visvesvaraya\n", - "Technological University\n", - "GPE | India\n", - "DATE | June 2017\n", - "ORG | HTTP\n", - "ORG | HTTPS\n", - "ORG | TLS-SSL\n", - "ORG | TCP/IP\n", - "ORG | UDP\n", - "ORG | ICMP\n", - "ORG | OSPF\n", - "ORG | BGP\n", - "ORG | ARP\n", - "ORG | VLAN\n", - "ORG | STP\n", - "ORG | IPS\n", - "ORG | IDS\n", - "ORG | NAT\n", - "ORG | IS-IS\n", - "CARDINAL | 802.11\n", - "ORG | MPLS\n", - "ORG | WPA2\n", - "ORG | WPA3\n", - "PERSON | Packet\n", - "PERSON | Linux\n", - "PERSON | Kali Linux\n", - "ORG | Cisco IOS\n", - "Tools\n", - "ORG | IDE\n", - "ORG | Advanced Design System\n", - "ORG | ADS\n", - "ORG | Wireshark\n", - "ORG | VMware Workstation\n", - "ORG | VirtualBox\n", - "ORG | GNS3\n", - "PERSON | Cisco Packet Tracer\n", - "ORG | Cisco Certified Network Associate\n", - "CARDINAL | 200-301\n", - "ORG | AWS\n", - "PERSON | Cloud Practitioner\n", - "ORG | CLF-C01\n", - "GPE | Cornelius\n", - "GPE | India\n", - "DATE | June 2019 - July 2019\n", - "ORG | Python\n", - "ORG | Serial Communication\n", - "ORG | IoT\n", - "PERSON | Iot Dongle\n", - "ORG | Python\n", - "ORG | IoT\n", - "ORG | IoT\n", - "PERSON | Cisco Packet Tracer\n", - "WORK_OF_ART | Perform a Man in the Middle attack\n", - "PERSON | Kali Linux\n", - "ORG | IoT\n", - "PERSON | Light Aug 2019\n", - "ORG | IoT\n", - "PERSON | Arduino ESP8266\n", - "ORG | Cayenne IoT Platform\n", - "CARDINAL | three\n", - "GPE | IP\n", - "ORG | WANET\n", - "CARDINAL | two\n", - "ORG | WANET\n", - "PERSON | Asterisk\n", - "CARDINAL | one\n", - "CARDINAL | three\n", - "ORG | X-Lite\n", - "ORG | Virtual Box Jan 2019\n", - "WORK_OF_ART | Worked on Open vSwitch in Virtual Box\n", - "CARDINAL | three\n", - "CARDINAL | one\n", - "ORG | PING\n", - "ORG | OSPF\n", - "ORG | BGP\n", - "ORG | DNS\n", - "ORG | VLAN\n", - "ORG | STP\n", - "ORG | IP\n", - "ORG | HSRP\n", - "ORG | ADS\n", - "DATE | 2017\n", - "ORG | Indian Space Research Organization\n", - "GPE | Bangalore\n", - "ORG | ADS\n", - "ORG | Return\n", - "ORG | Isolation\n" - ] - } - ], - "source": [ - "for entity in doc.ents:\n", - " print(entity.label_, ' | ', entity.text)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nlp = spacy.blank('en') # new, empty model. Let’s say it’s for the English language\n", - "nlp.vocab.vectors.name = 'example_model_training' # give a name to our list of vectors\n", - "# add NER pipeline\n", - "ner = nlp.create_pipe('ner') # our pipeline would just do NER\n", - "nlp.add_pipe(ner, last=True) # we add the pipeline to the model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "DATA = [\n", - " (u\"Search Analytics: Business Value & BigData NoSQL Backend, Otis Gospodnetic \", {'entities': [ (58,75,'PERSON') ] }),\n", - " (u\"Introduction to Elasticsearch by Radu \", {'entities': [ (16,29,'TECH'), (32, 36, 'PERSON') ] }),\n", - " # …\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nlp.entity.add_label('PERSON')\n", - "nlp.entity.add_label('TECH')\n", - "# ..." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "optimizer = nlp.begin_training()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nlp.update([text], [annotations], sgd=optimizer)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(20):\n", - " random.shuffle(DATA)\n", - " for text, annotations in DATA:\n", - " nlp.update([text], [annotations], sgd=optimizer)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "doc = nlp(u\"#bbuzz 2016: Rafał Kuć - Running High Performance And Fault Tolerant Elasticsearch\")\n", - "for entity in doc.ents:\n", - " print(entity.label_, ' | ', entity.text)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Untitled1.ipynb b/Untitled1.ipynb deleted file mode 100644 index 5360f39..0000000 --- a/Untitled1.ipynb +++ /dev/null @@ -1,658 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Basic Starting Import" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import spacy" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "nlp = spacy.load(\"en_core_web_sm\")\n", - "#Different languages to load in including small, medium and large packages" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Basic Understanding of one-word matching and attributes" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define Text" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "doc = nlp(\"i am an iOS dev and I like to code in objective-c\")\n", - "# this is the start defining of the text (Always needed) Convert it into nlp detected work\n", - "#doc2 = nlp(text)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[i, am, an, iOS, dev, and, I, like, to, code, in, objective, -, c]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[t for t in doc]\n", - "#In the doc var, it splits every single words into different value in a list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Display understanding of how sentence is shaped" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - " i\n", - " PRON\n", - "\n", - "\n", - "\n", - " am\n", - " AUX\n", - "\n", - "\n", - "\n", - " an\n", - " DET\n", - "\n", - "\n", - "\n", - " iOS\n", - " ADJ\n", - "\n", - "\n", - "\n", - " dev\n", - " NOUN\n", - "\n", - "\n", - "\n", - " and\n", - " CCONJ\n", - "\n", - "\n", - "\n", - " I\n", - " PRON\n", - "\n", - "\n", - "\n", - " like\n", - " VERB\n", - "\n", - "\n", - "\n", - " to\n", - " PART\n", - "\n", - "\n", - "\n", - " code\n", - " VERB\n", - "\n", - "\n", - "\n", - " in\n", - " ADP\n", - "\n", - "\n", - "\n", - " objective-\n", - " NOUN\n", - "\n", - "\n", - "\n", - " c\n", - " NOUN\n", - "\n", - "\n", - "\n", - " \n", - " \n", - " nsubj\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " det\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " amod\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " attr\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " cc\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " nsubj\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " aux\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " xcomp\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " prep\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " amod\n", - " \n", - " \n", - "\n", - "\n", - "\n", - " \n", - " \n", - " pobj\n", - " \n", - " \n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from spacy import displacy\n", - "\n", - "displacy.render(doc)\n", - "# Very useful way to understand how to text is displayed and how to understand different \"nouns\"" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "#spacy.explain(\"pron\")\n", - "#Way to explain what exactly each value means \n", - "# Also check spacy documentation at https://spacy.io/usage/linguistic-features" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Different Attributes of the word that could be used" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "My DET poss \n", - "O en -PRON- my my My M my Xx My PRP$ \n", - "name NOUN nsubj \n", - "O en name name name name n name xxxx ame NN \n", - "is AUX ROOT \n", - "O en be is is is i is xx is VBZ \n", - "Kunal PROPN attr \n", - "O en Kunal kunal kunal Kunal K kunal Xxxxx nal NNP \n" - ] - } - ], - "source": [ - "for t in doc:\n", - " print(t, t.pos_, t.dep_, t.ent_id_)\n", - " print(t.ent_iob_, t.ent_type_, t.lang_, t.lemma_, t.lower_, t.norm_, t.orth_, t.prefix_,t.lower_, t.shape_, t.suffix_, t.tag_, t.whitespace_)\n", - "#Different meanings for each word and things that describe the words -- could use to understand different skills in Resume" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scan if Document has a specific text" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def has_go_token(doc):\n", - " for t in doc:\n", - " if t.lower_ in ['go', 'golang', 'python', 'ruby', 'objective-c']:\n", - " if t.pos_ != 'VERB':\n", - " return True\n", - " return False" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Just scans the entire list of words and find if the word that matches the list\n", - "# Works most of the time but doesn't work with multiple words that connetec together\n", - "\n", - "# For example \"objective-c\" is split into 3 words " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Understanding Matcher attribute and multiple words" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Scan for like connected Words using matcher" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], - "source": [ - "from spacy.matcher import Matcher" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "pattern = [{'LOWER': 'objective'},\n", - " {'IS_PUNCT': True},\n", - " {'LOWER': 'c'}]\n", - "#get from website for build your own" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], - "source": [ - "matcher = Matcher(nlp.vocab, validate=True)\n", - "#define matcher var - must have" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [], - "source": [ - "matcher.add(\"OBJ_C\", None, pattern)\n", - "#Could add multiple values to check for multpiple things\n", - "#Name, None, Name of pattern" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[(14600203822370300727, 11, 14)]" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "matcher(doc)\n", - "#ID, start, end" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "objective-c" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "doc[11:14]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Major Links that help you with the code\n", - "Extract named enties like major things including names\n", - "https://explosion.ai/demos/displacy-ent\n", - "\n", - "\n", - "Runs the graphic of matching every single word to another word and sees how it connects to each other (connecting of the sentence)\n", - "https://explosion.ai/demos/displacy\n", - "\n", - "\n", - "Builds a automatic pattern that checks for connections with the matcher libary\n", - "https://explosion.ai/demos/matcher\n", - "\n", - "\n", - "https://spacy.io/usage/rule-based-matching" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**What is nlp.pipe()**" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**SUMMARY**\n", - "Need to build a code that will be able to build this pattern (for the matcher libary) automatically for every single skill. \n", - "\n", - "And run a classification report (check video 3 at the end)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Learning to build own Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#!python -m spacy download en_core_web_sm\n", - "#!python -m spacy validate" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "text = \"\"\"NISARGA HASSAN SREEDHAR\n", - "San Jose, California | +1 (925) 789-8911| nisarga.nishu20@gmail.com | www.linkedin.com/in/nisarga-sreedhar-39938516b\n", - "EDUCATION:\n", - "Master’s in Electrical Engineering (Computer Networking), San Jose State University, California, USA. May 2020\n", - "Coursework: Internetworking, Broadband communications, Network Security, Internet of Things (IoT), Voice over IP\n", - "Bachelor of Engineering in Telecommunication Engineering, Dayananda Sagar College of Engineering, Visvesvaraya\n", - "Technological University, India June 2017\n", - "TECHNICAL SKILLS:\n", - "Network technologies: HTTP, DNS, DHCP, HTTPS, TLS-SSL, TCP/IP, UDP, IPv4, IPv6, ICMP, OSPF, BGP, ARP, VLAN, STP,\n", - "SIP, IPS, IDS, NAT, IS-IS, 802.11, MPLS, WPA2, WPA3, Packet level troubleshooting\n", - "Programming: Python\n", - "OS Platform: Linux (Ubuntu, CentOS), Kali Linux, Cisco IOS\n", - "Tools and IDE: Advanced Design System (ADS), Wireshark, VMware Workstation, VirtualBox, GNS3, Cisco Packet Tracer, PuTTY\n", - "CERTIFICATION:\n", - "• Cisco Certified Network Associate (CCNA) 200-301 (In Progress)\n", - "• AWS Certified Cloud Practitioner (CLF-C01) (In progress)\n", - "EXPERIENCE:\n", - "Marmon Food & Beverages Technologies, Cornelius, India June 2019 - July 2019\n", - "Network Engineer Intern\n", - "• Python based Serial Communication (IoT)\n", - "• Used an Iot Dongle to read a file, convert it into a packet by adding header and footer and transmit serially.\n", - "• Python code was written to send the file from dongle to Food Holding Bin.\n", - "ACADEMIC PROJECTS:\n", - "Secure routing in IoT networks Aug 2019 - current\n", - "• Design and configure an IoT based network using Cisco Packet Tracer.\n", - "• Perform a Man in the Middle attack to one of the devices using Kali Linux.\n", - "• Detection of the attack and solution to the problem faced.\n", - "Illumino: IoT Smart Light Aug 2019 - Dec 2019\n", - "• Create a hardware of an IoT smart light using Arduino ESP8266 and Cayenne IoT Platform.\n", - "• Designed to operate in three modes: Auto mode, Lamp mode, Security mode.\n", - "• Use of Cayenne web application to detect temperature and provides a siren at thresholds.\n", - "Voice over IP for Wireless Ad Hoc Networks (WANET) Aug 2019 - Dec 2019\n", - "• Simple Call Establishment between two clients in a WANET that have registered with the Asterisk server.\n", - "• Call on Hold with one user client to attend another client.\n", - "• Call Conferencing between all three clients, all performed using X-Lite softphone software.\n", - "Experiencing Virtualization using Virtual Box Jan 2019 - April 2019\n", - "• Worked on Open vSwitch in Virtual Box on an Ubuntu machine to run ovs and its versions successfully.\n", - "• Demonstrated how the VLANs are implemented, three VMs and one virtual switch is created.\n", - "• Attempted to communicate between the VMs and observed the PING result.\n", - "Corporate Company Network Design Aug 2018 - Dec 2018\n", - "• Designed and implemented a basic corporate network topology for the interconnection between offices with\n", - "switches, routers, and hosts.\n", - "• Implemented the design using routing protocols such as OSPF, BGP, DNS, VLAN, STP, IP, DHCP and HSRP.\n", - "• Tested and troubleshot configurations in the console to check the communication between the networks.\n", - "Design of X-Band 8PSK Modulator using ADS Jan 2017 - April 2017\n", - "• Designed various components of the modulator used in a satellite at ISRO (Indian Space Research Organization), Bangalore.\n", - "• Performed optimization of the components at 8.75GHz frequency using the tools available in ADS to obtain the desired results of\n", - "Insertion loss, Return loss and Isolation loss.\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "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.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/WebScrappingData.ipynb b/WebScrappingData.ipynb deleted file mode 100644 index 11ada74..0000000 --- a/WebScrappingData.ipynb +++ /dev/null @@ -1,1692 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Generate List of Skills with href" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Import Webscrapping Soup and Selenium" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "import requests # for making standard html requests\n", - "from bs4 import BeautifulSoup # magical tool for parsing html data\n", - "import json # for parsing data\n", - "from pandas import DataFrame as df # premier library for data organization\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from selenium import webdriver\n", - "from webdriver_manager.chrome import ChromeDriverManager" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "def listofSkills(link):\n", - " URL = link\n", - " page = requests.get(URL)\n", - " page.encoding = 'ISO-885901'\n", - " soup = BeautifulSoup(page.text, 'html.parser')\n", - " dollar_tree_list = soup.find_all(class_ = 'col-md-3')\n", - " del dollar_tree_list[-1]\n", - " DataCollected = []\n", - " for i in dollar_tree_list:\n", - " example = i\n", - " content = example.contents\n", - " attrs = content[1].attrs\n", - " try:\n", - " HREF = content[1]['href']\n", - " #print(example_href)\n", - " except KeyError as e:\n", - " print(e)\n", - " nameOfSkill = clearName(HREF)\n", - " tempListMORECONTENT = [content, attrs, HREF,nameOfSkill]\n", - " tempList = [HREF,nameOfSkill]\n", - " DataCollected.append(tempList)\n", - " return DataCollected" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "def clearName(link):\n", - " text = link.replace(\"/skills/\",\"\").replace(\"+\",\" \").replace(\"%26%2347\", \"/\").replace(\"%27\", \"'\").replace(\"%26%2345\",\"-\")\n", - " return text" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generate Possible Links" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "alpha_list = [chr(x) for x in range(ord('a'), ord('z') + 1)] \n", - "number_list = [\"1\",\"2\",\"3\",\"4\",\"5\"]\n", - "FinalList = number_list+alpha_list\n", - "webLink_List = []\n", - "for i in FinalList:\n", - " webLink_List.append(\"https://www.dice.com/skills/browse/\"+i)\n", - "#print(webLink_List)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "ALLSKILLSLIST = []\n", - "for i in webLink_List:\n", - " test = listofSkills(i)\n", - " ALLSKILLSLIST+=test" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "SKILLSDF = pd.DataFrame(ALLSKILLSLIST, columns=[\"HREF\", \"Skill Name\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Save as excel sheet" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "writer = pd.ExcelWriter('output2.xlsx')" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "SKILLSDF.to_excel(writer,'Sheet1')\n", - "writer.save()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Extract closest skills" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'%%time\\ndriver = webdriver.Chrome(ChromeDriverManager().install())\\nDATA = CloseSkillsTotal(\"https://www.dice.com/skills/2D+computer+graphics\", driver)\\ndriver.close()\\n'" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\"\"\"%%time\n", - "driver = webdriver.Chrome(ChromeDriverManager().install())\n", - "DATA = CloseSkillsTotal(\"https://www.dice.com/skills/2D+computer+graphics\", driver)\n", - "driver.close()\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "def GetName(text):\n", - " ini_string = text\n", - " c = \">\"\n", - " res = None\n", - " for i in range(0, len(ini_string)): \n", - " if ini_string[i] == c: \n", - " res = i + 1\n", - " break\n", - " finalText = ini_string[res:]\n", - " finalText = finalText.replace(\"\", \"\")\n", - " return finalText" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "def MainClosestSkill(virus):\n", - " return '(204, 204, 204)' in virus" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "def numberOfSkills(driver): \n", - " for i in range(100):\n", - " num = i+1\n", - " maxnum = 1\n", - " try: \n", - " driver.find_element_by_id(str(num))\n", - " except:\n", - " maxnum = num-1\n", - " break\n", - " CONNECTEDSKILLLIST = []\n", - " for i in range(maxnum):\n", - " CONNECTEDSKILLLIST.append(i+1)\n", - " return CONNECTEDSKILLLIST" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [], - "source": [ - "def CloseSkillsTotal(link, driver):\n", - " # Using Chrome to access web\n", - " # Open the website\n", - " driver.get(link)\n", - " NumberOfSkillsList = numberOfSkills(driver)\n", - " CLOSESKILLTOTAL =[]\n", - " for i in NumberOfSkillsList:\n", - " SKILL = driver.find_element_by_id(str(i))\n", - " SKILLNAME = SKILL.text\n", - " source_code = SKILL.get_attribute(\"outerHTML\")\n", - " #print(SKILLNAME)\n", - " if SKILLNAME == '':\n", - " SKILLNAME = GetName(source_code)\n", - " #print(\"YES\", source_code)\n", - " closeSkill = MainClosestSkill(source_code)\n", - " #print(closeSkill)\n", - " #True if close skill and far for other\n", - " temp_List = [SKILLNAME, closeSkill]\n", - " CLOSESKILLTOTAL.append(temp_List)\n", - " #print(CLOSESKILLTOTAL)\n", - " return CLOSESKILLTOTAL" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run through all sites \n", - "**Takes 24 hours to run**" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "import ast" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "# Username - KunalResumeSkill\n", - "# Password - VDartDigital123!\n", - "# Database name - skills\n", - "# Collection name - skillsCollection\n", - "import pymongo\n", - "from pymongo import MongoClient\n" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "cluster = MongoClient(\"mongodb+srv://KunalResumeSkill:VDartDigital123!@cluster0.tuvxg.mongodb.net/skills?retryWrites=true&w=majority\")" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "db = cluster[\"skills\"]\n", - "collection = db[\"skillsCollection\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "jsonFileStr = \"\"\"\n", - "\n", - "{\n", - " \"skillName\": \"sNCode\",\n", - " \"url\": \"UCode\",\n", - " \"relation\" : [\n", - " {\n", - " \"skill_a\" : {\n", - " \"relatedSkill_a1\" : \"rS_a1Code\", \n", - " \"relatedSkill_a2\" : \"rS_a2Code\",\n", - " \"relatedSkill_a3\" : \"rS_a3Code\",\n", - " \"relatedSkill_a4\" : \"rS_a4Code\",\n", - " \"relatedSkill_a5\" : \"rS_a5Code\"\n", - " }, \n", - " \"skill_b\" : {\n", - " \"relatedSkill_b1\" : \"rS_b1Code\", \n", - " \"relatedSkill_b2\" : \"rS_b2Code\",\n", - " \"relatedSkill_b3\" : \"rS_b3Code\",\n", - " \"relatedSkill_b4\" : \"rS_b4Code\",\n", - " \"relatedSkill_b5\" : \"rS_b5Code\"\n", - " },\n", - " \"skill_c\" : {\n", - " \"relatedSkill_c1\" : \"rS_c1Code\", \n", - " \"relatedSkill_c2\" : \"rS_c2Code\",\n", - " \"relatedSkill_c3\" : \"rS_c3Code\",\n", - " \"relatedSkill_c4\" : \"rS_c4Code\",\n", - " \"relatedSkill_c5\" : \"rS_c5Code\"\n", - " },\n", - " \"skill_d\" : {\n", - " \"relatedSkill_d1\" : \"rS_d1Code\", \n", - " \"relatedSkill_d2\" : \"rS_d2Code\",\n", - " \"relatedSkill_d3\" : \"rS_d3Code\",\n", - " \"relatedSkill_d4\" : \"rS_d4Code\",\n", - " \"relatedSkill_d5\" : \"rS_d5Code\"\n", - " },\n", - " \"skill_e\" : {\n", - " \"relatedSkill_e1\" : \"rS_e1Code\", \n", - " \"relatedSkill_e2\" : \"rS_e2Code\",\n", - " \"relatedSkill_e3\" : \"rS_e3Code\",\n", - " \"relatedSkill_e4\" : \"rS_e4Code\",\n", - " \"relatedSkill_e5\" : \"rS_e5Code\"\n", - " }\n", - " }\n", - " ]\n", - "}\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'skillName': '3G',\n", - " 'url': '/skills/3G',\n", - " 'relation': [{'2G': {'relatedSkill_a1': '4G',\n", - " 'relatedSkill_a2': 'LTE',\n", - " 'relatedSkill_a3': 'GPRS',\n", - " 'relatedSkill_a4': 'UMTS',\n", - " 'relatedSkill_a5': 'W-CDMA'},\n", - " '4G': {'relatedSkill_b1': 'LTE',\n", - " 'relatedSkill_b2': '2G',\n", - " 'relatedSkill_b3': '3GPP',\n", - " 'relatedSkill_b4': 'W-CDMA',\n", - " 'relatedSkill_b5': 'GPRS'},\n", - " 'GPRS': {'relatedSkill_c1': 'UMTS',\n", - " 'relatedSkill_c2': '2G',\n", - " 'relatedSkill_c3': 'GSM',\n", - " 'relatedSkill_c4': 'EVDO',\n", - " 'relatedSkill_c5': 'W-CDMA'},\n", - " 'LTE': {'relatedSkill_d1': '3GPP',\n", - " 'relatedSkill_d2': 'W-CDMA',\n", - " 'relatedSkill_d3': 'CDMA',\n", - " 'relatedSkill_d4': '4G',\n", - " 'relatedSkill_d5': 'UMTS'},\n", - " 'UMTS': {'relatedSkill_e1': 'W-CDMA',\n", - " 'relatedSkill_e2': 'CDMA',\n", - " 'relatedSkill_e3': 'GSM',\n", - " 'relatedSkill_e4': 'LTE',\n", - " 'relatedSkill_e5': 'GPRS'}}],\n", - " '_id': ObjectId('5f0cf307fa540465a60e95ed')}" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "jsonFormatUpload" - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 10BASE-T\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 2.5D\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 21 CFR Part 11\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 2D animation\n", - " \n", - "Running\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 2D computer graphics\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 2G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3D CAD\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 3D animation\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3D computer graphics\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3D modeling\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3D printing\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3D rendering\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR WATCH OUT SKIPPING /skills/3G+Bridge\n", - "Uploaded: \t\t\t 3G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR WATCH OUT SKIPPING /skills/3G+MIMO\n", - "Uploaded: \t\t\t 3G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR WATCH OUT SKIPPING /skills/3G+Studios\n", - "Uploaded: \t\t\t 3G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR WATCH OUT SKIPPING /skills/3G%26%2345324M\n", - "Uploaded: \t\t\t 3G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3GPP\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3PAR\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 3PL\n", - " \n", - "Running\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 4G\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 4GL\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 5ESS switch\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t 5S\n", - " \n", - "ERROR WATCH OUT SKIPPING /skills/Aplus\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t 5S\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t A/B testing\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACAPS\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACD\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACF2\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACH\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACL\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACMT\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACORD\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACS\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t \n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t ACSLS\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ACT\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n", - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ADA\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t ADABAS\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ADDIE\n", - " \n", - "Running\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t ADDM\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ADF\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ADFS\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Uploaded: \t\t\t ADINA\n", - " \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[WDM] - Current google-chrome version is 83.0.4103\n", - "[WDM] - Get LATEST driver version for 83.0.4103\n", - "[WDM] - Driver [C:\\Users\\kunal\\.wdm\\drivers\\chromedriver\\win32\\83.0.4103.39\\chromedriver.exe] found in cache\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Running\n", - "Uploaded: \t\t\t ADMT\n", - " \n", - "Running\n", - "ERROR WITH THE UPLOAD TO MONGODB CHECK\n", - "Wall time: 8min 3s\n" - ] - } - ], - "source": [ - "%%time\n", - "similarSkillsTotalList = []\n", - "for i in ALLSKILLSLIST[:50]:\n", - " jsonFileRunning = jsonFileStr\n", - " #print( str(i[0]))\n", - " link = \"https://www.dice.com\" + str(i[0])\n", - " driver = webdriver.Chrome(ChromeDriverManager().install())\n", - " DATA = CloseSkillsTotal(link, driver)\n", - " driver.close()\n", - " running = True\n", - " if len(DATA) == 0:\n", - " jsonFileRunning = jsonFileStr\n", - " print(\"ERROR WATCH OUT SKIPPING \", i[0])\n", - " jsonFileRunning = jsonFileRunning.replace(\"sNCode\", i[1]).replace(\"UCode\", i[0])\n", - " letterList = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n", - " for i in letterList:\n", - " for j in range(5):\n", - " numb = j+1\n", - " text = \"rS_\"+ i + str(numb) + \"Code\"\n", - " jsonFileRunning = jsonFileRunning.replace(text, \"n/a\")\n", - " running = False \n", - " if running == True: \n", - " skillnameCode = DATA[0][0]\n", - " jsonFileRunning = jsonFileRunning.replace(\"sNCode\", skillnameCode).replace(\"UCode\", str(i[0]))\n", - " if len(DATA) > 1: \n", - " print(\"Running\")\n", - " DATANEW = DATA[1:]\n", - " count = 0\n", - " SkillcountLetter = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n", - " Skillcount = 0\n", - " for i in DATANEW:\n", - " if i[1] == True:\n", - " textString = \"skill_\" + SkillcountLetter[Skillcount]\n", - " #print(textString + i[0])\n", - " relatedSkillcount = 1\n", - " jsonFileRunning = jsonFileRunning.replace(textString, i[0])\n", - " for j in range(5):\n", - " z = j+count+1\n", - " textString2 = \"rS_\" + SkillcountLetter[Skillcount] + str(relatedSkillcount) + \"Code\"\n", - " #print(textString2 + str(DATANEW[z][0]))\n", - " jsonFileRunning = jsonFileRunning.replace(textString2, str(DATANEW[z][0]))\n", - " relatedSkillcount+=1\n", - " Skillcount+=1\n", - " count+=1\n", - " else:\n", - " letterList = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n", - " for i in letterList:\n", - " for j in range(5):\n", - " numb = j+1\n", - " text = \"rS_\"+ i + str(numb) + \"Code\"\n", - " jsonFileRunning = jsonFileRunning.replace(text, \"n/a\")\n", - " \n", - " #print(jsonFileRunning)\n", - " jsonFormatUpload = ast.literal_eval(jsonFileRunning)\n", - " \n", - " try:\n", - " collection.insert_one(jsonFormatUpload)\n", - " print(\"Uploaded: \\t\\t\\t\", skillnameCode)\n", - " except Exception as e:\n", - " print(\"ERROR WITH THE UPLOAD TO MONGODB CHECK\")\n", - " break\n", - " similarSkillsTotalList.append(DATA)\n", - " \n", - " #print(similarSkillsTotalList)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Other base Testing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import requests # for making standard html requests\n", - "from bs4 import BeautifulSoup # magical tool for parsing html data\n", - "import json # for parsing data\n", - "from pandas import DataFrame as df # premier library for data organization\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "URL = \"https://www.dice.com/skills/browse/1\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "page = requests.get(URL)\n", - "page.encoding = 'ISO-885901'\n", - "soup = BeautifulSoup(page.text, 'html.parser')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "soup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dollar_tree_list = soup.find_all(class_ = 'col-md-3')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "del dollar_tree_list[-1]\n", - "len(dollar_tree_list)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "example = dollar_tree_list[0] # a representative example\n", - "print(example)\n", - "print(\"\")\n", - "example_content = example.contents\n", - "print(example_content)\n", - "print(\"\")\n", - "attrs = example_content[1].attrs\n", - "print(attrs)\n", - "print(\"\")\n", - "example_href = example_content[1]['href']\n", - "print(example_href)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def clearName(link):\n", - " text = link.replace(\"/skills/\",\"\").replace(\"+\",\" \").replace(\"%26%2347\", \"/\").replace(\"%27\", \"'\").replace(\"%26%2345\",\"-\")\n", - " return text" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "DataCollected = []\n", - "for i in dollar_tree_list:\n", - " example = i\n", - " content = example.contents\n", - " attrs = content[1].attrs\n", - " try:\n", - " HREF = content[1]['href']\n", - " #print(example_href)\n", - " except KeyError as e:\n", - " print(e)\n", - " nameOfSkill = clearName(HREF)\n", - " tempListMORECONTENT = [content, attrs, example_href,nameOfSkill]\n", - " tempList = [example_href,nameOfSkill]\n", - " DataCollected.append(tempList)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pd.DataFrame(DataCollected, columns=[\"HREF\", \"Skill Name\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "conn = MongoClient('localhost', port-number)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Other testing" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "skillnameCode = DATA[0][0]\n", - "print(skillnameCode)\n", - "DATANEW = DATA[1:]\n", - "count = 0\n", - "for i in DATANEW:\n", - " if i[1] == True:\n", - " print(\"RS_A: \" + i[0])\n", - " for j in range(5):\n", - " z = j+count+1\n", - " print(\"RS 2: \" + str(DATANEW[z][0]))\n", - " count+=1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "jsonFileRunning = jsonFileStr\n", - "\n", - "skillnameCode = DATA[0][0]\n", - "print(skillnameCode)\n", - "\n", - "jsonFileRunning = jsonFileRunning.replace(\"sNCode\", skillnameCode)\n", - "\n", - "DATANEW = DATA[1:]\n", - "count = 0\n", - "SkillcountLetter = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n", - "Skillcount = 0\n", - "for i in DATANEW:\n", - " if i[1] == True:\n", - " textString = \"skill_\" + SkillcountLetter[Skillcount]\n", - " #print(textString + i[0])\n", - " relatedSkillcount = 1\n", - " jsonFileRunning = jsonFileRunning.replace(textString, i[0])\n", - " for j in range(5):\n", - " z = j+count+1\n", - " textString2 = \"rS_\" + SkillcountLetter[Skillcount] + str(relatedSkillcount) + \"Code\"\n", - " #print(textString2 + str(DATANEW[z][0]))\n", - " jsonFileRunning = jsonFileRunning.replace(textString2, str(DATANEW[z][0]))\n", - " relatedSkillcount+=1\n", - " Skillcount+=1\n", - " count+=1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%time\n", - "similarSkillsTotalList = []\n", - "for i in ALLSKILLSLIST[:2]:\n", - " print( str(i[0]))\n", - " link = \"https://www.dice.com\" + str(i[0])\n", - " driver = webdriver.Chrome(ChromeDriverManager().install()) \n", - " DATA = CloseSkillsTotal(link, driver)\n", - " driver.close()\n", - " similarSkillsTotalList.append(DATA)\n", - " #print(similarSkillsTotalList)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "jsonFileRunning = jsonFileStr\n", - "\n", - "skillnameCode = DATA[0][0]\n", - "print(skillnameCode)\n", - "\n", - "jsonFileRunning = jsonFileRunning.replace(\"sNCode\", skillnameCode)\n", - "\n", - "DATANEW = DATA[1:]\n", - "count = 0\n", - "SkillcountLetter = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n", - "Skillcount = 0\n", - "for i in DATANEW:\n", - " if i[1] == True:\n", - " textString = \"skill_\" + SkillcountLetter[Skillcount]\n", - " #print(textString + i[0])\n", - " relatedSkillcount = 1\n", - " jsonFileRunning = jsonFileRunning.replace(textString, i[0])\n", - " for j in range(5):\n", - " z = j+count+1\n", - " textString2 = \"rS_\" + SkillcountLetter[Skillcount] + str(relatedSkillcount) + \"Code\"\n", - " #print(textString2 + str(DATANEW[z][0]))\n", - " jsonFileRunning = jsonFileRunning.replace(textString2, str(DATANEW[z][0]))\n", - " relatedSkillcount+=1\n", - " Skillcount+=1\n", - " count+=1" - ] - } - ], - "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.7.4" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": { - "height": "calc(100% - 180px)", - "left": "10px", - "top": "150px", - "width": "219.261px" - }, - "toc_section_display": true, - "toc_window_display": true - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/output.xlsx b/output.xlsx deleted file mode 100644 index d2cb3bd..0000000 Binary files a/output.xlsx and /dev/null differ