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 |