Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, Request | |
| from pydantic import BaseModel | |
| import pandas as pd | |
| import re | |
| import json | |
| from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline | |
| app = FastAPI() | |
| class TextInput(BaseModel): | |
| text: str | |
| # خواندن دادهها از فایلهای اکسل | |
| jobs = pd.read_excel('jobs_output.xlsx')['object'].astype(str).tolist() | |
| education = pd.read_excel('education_output.xlsx')['object'].astype(str).tolist() | |
| skills = pd.read_excel('N_F_skill_output.xlsx')['object'].astype(str).tolist() | |
| model_name_or_path = "HooshvareLab/distilbert-fa-zwnj-base-ner" | |
| tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) | |
| model = AutoModelForTokenClassification.from_pretrained(model_name_or_path) | |
| nlp = pipeline("ner", model=model, tokenizer=tokenizer) | |
| def preprocess_text(text): | |
| text = text.replace('\u200c', ' ').strip() | |
| text = re.sub(r'\s+', ' ', text) | |
| return text | |
| def extract_items_in_text(text, items): | |
| text = preprocess_text(text) | |
| found_items = set() | |
| for item in items: | |
| item_normalized = preprocess_text(item) | |
| if item_normalized.lower() in text.lower(): | |
| found_items.add(item_normalized) | |
| return list(found_items) | |
| def compare_items(items_1, items_2): | |
| common_items = set() | |
| score = 0 | |
| for item1 in items_1: | |
| for item2 in items_2: | |
| words1 = set(item1.lower().split()) | |
| words2 = set(item2.lower().split()) | |
| common_words = words1.intersection(words2) | |
| num_common = len(common_words) | |
| if num_common >= 3: | |
| common_items.add((item1, item2)) | |
| score = 100 | |
| elif num_common == 2: | |
| common_items.add((item1, item2)) | |
| score = 75 | |
| elif num_common == 1: | |
| common_items.add((item1, item2)) | |
| score = 50 | |
| return score, common_items | |
| def compare_skills(skill_1, skill_2): | |
| common_skill = set(skill_1).intersection(set(skill_2)) | |
| num_common = len(common_skill) | |
| if num_common >= 10: | |
| score = 100 | |
| elif num_common == 7: | |
| score = 75 | |
| elif num_common == 5: | |
| score = 50 | |
| else: | |
| score = 25 | |
| return score, common_skill | |
| def extract_ner_info(text, nlp): | |
| ner_results = nlp(text) | |
| full_name = '' | |
| loc = '' | |
| age = None | |
| for i in range(len(ner_results)): | |
| if ner_results[i]['entity'] == 'B-PER': | |
| full_name = ner_results[i]['word'] | |
| for j in range(i+1, len(ner_results)): | |
| if ner_results[j]['entity'].startswith('I-PER'): | |
| full_name += ner_results[j]['word'].replace('##', '') | |
| else: | |
| break | |
| if ner_results[i]['entity'] == 'B-LOC' and not loc: | |
| loc = ner_results[i]['word'] | |
| age_match = re.search(r'سن\s*:\s*(\d+)', text) | |
| if age_match: | |
| age = int(age_match.group(1)) | |
| return full_name, loc, age | |
| async def process_text(input: TextInput): | |
| input_text = input.text | |
| input_text = input_text.replace("آدرس", "") | |
| fixed_text = """استخدام کارآموز هوش مصنوعی (AI-شیراز) | |
| دستهبندی شغلی | |
| وب، برنامهنویسی و نرمافزار | |
| موقعیت مکانی | |
| فارس ، شیراز | |
| نوع همکاری | |
| تمام وقت کارآموزی | |
| حداقل سابقه کار | |
| مهم نیست | |
| حقوق | |
| توافقی | |
| شرح موقعیت شغلی | |
| شرکت تاو سیستم واقع در (شیراز - صدرا - خیابان البرز) در راستای تکمیل تیم نرم افزاری خود در نظر دارد دوره کارآموزی رایگان از مبتدی تا حرفه ای برای افراد پر انرژی و فعال برگزار کند. | |
| هدف از این دوره آماده کردن نیروها جهت جذب در شرکت تاو سیستم است. | |
| اگر فرد فعال و پر انرژی هستید و در جهت پیشرفت خود تلاش زیادی می کنید، ما منتظر شما هستیم.... | |
| نحوه برگزاری: | |
| دوره به مدت 4 ماه (سه روز در هفته) به صورت کلاس آموزشی برگزار می شود. | |
| شرکت در (شیراز - صدرا - خیابان البرز) واقع شده و دوره آموزشی به صورت حضوری برگزار می شود. | |
| شما در طول دوره توسط مدرس مورد ارزیابی مستمر قرار میگیرید و در صورت عدم توانایی شما برای ادامه دوره، به شما اعلام می شود و از دوره کنار گذاشته میشوید. | |
| در انتهای دوره پروژه ای تستی با توجه به مسائلی که در دوره یاد گرفته اید برای شما تعریف می شود و برای انجام آن دو هفته فرصت دارید. | |
| در صورت تایید پروژه شما توسط مدرس دوره، با شما قرارداد بسته می شود و به صورت حضوری در شرکت مشغول به فعالیت می شوید. | |
| ***لطفا در صورت داشتن همه (شرایط عمومی) زیر، رزومه خود را ارسال کنید.*** | |
| شرایط عمومی: | |
| ۱. آشنایی مقدماتی با زبان برنامه نویسی پایتون | |
| ۲. سطح زبان انگلیسی متوسط به بالا (توانایی درک متون انگلیسی تخصصی) | |
| ۳. آشنایی مقدماتی با الگوریتم های هوش مصنوعی (یادگیری ماشین، یادگیری عمیق ) | |
| ۴. آشنایی با پایگاه داده مقدماتی | |
| ۵- امکان شرکت در دوره ها به صورت حضوری در آدرس (شیراز - صدرا - خیابان البرز) | |
| ۶- امکان گذاشتن وقت در خارج از تایم کلاس ها جهت انجام تمرینات | |
| ۷- امکان همکاری به صورت تمام وقت و حضوری در صورت قبولی در انتهای دوره (40 ساعت در هفته) | |
| ۸- از پذیرش دانشجو و افراد که شاغل هستند و یا اینکه در آینده درخواست کار به صورت ریموت دارند معذوریم. | |
| ۹- سن بین 18 الی 30 سال | |
| ۱۰- علاقه مند به یادگیری و به روز رسانی دانش فردی | |
| ۱۱- خلاق، پویا، با انگیزه و سرعت عملکرد بالا | |
| ۱۲- منظم و مسئولیت پذیر | |
| مهارتهای امتیازی: | |
| ۱. آشنایی با با زبان برنامه نویسی پایتون در حد پیشرفته | |
| ۲. آشنایی با فریم ورک های pytorch , tensorflow | |
| ۳. آشنایی با کتاب خانه های numpy, pandas, matplotlib, sklearn .. | |
| ۴. آشنایی با data mining | |
| ۵. آشنایی با اصول solid | |
| ۶. آشنایی با Clean architecture | |
| ۷. آشنایی با Git , GitHub""" | |
| jobs_in_fixed_text = extract_items_in_text(fixed_text, jobs) | |
| jobs_in_input_text = extract_items_in_text(input_text, jobs) | |
| education_in_fixed_text = extract_items_in_text(fixed_text, education) | |
| education_in_input_text = extract_items_in_text(input_text, education) | |
| skills_in_fixed_text = extract_items_in_text(fixed_text, skills) | |
| skills_in_input_text = extract_items_in_text(input_text, skills) | |
| job_score, common_jobs = compare_items(jobs_in_fixed_text, jobs_in_input_text) | |
| education_score, common_education = compare_items(education_in_fixed_text, education_in_input_text) | |
| skill_score, common_skills = compare_skills(skills_in_fixed_text, skills_in_input_text) | |
| full_name, loc, age = extract_ner_info(input_text, nlp) | |
| fixed_loc = "شیراز" | |
| loc_score = 100 if loc == fixed_loc else 0 | |
| age_score = 100 if age and 18 <= age <= 30 else 0 | |
| average_score = (job_score + education_score + skill_score + loc_score + age_score) / 5 | |
| output = { | |
| "average_score": average_score, | |
| "full_name": full_name, | |
| "age": age, | |
| "location": loc, | |
| "job_score": job_score, | |
| "education_score": education_score, | |
| "skill_score": skill_score, | |
| "loc_score": loc_score, | |
| "age_score": age_score, | |
| "common_jobs": list(common_jobs), | |
| "common_education": list(common_education), | |
| "common_skills": list(common_skills) | |
| } | |
| return output |