cdcvd's picture
Upload 4 files
1189a3e verified
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
@app.post("/process")
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