cdcvd commited on
Commit
1189a3e
1 Parent(s): f1fb8bd

Upload 4 files

Browse files
Files changed (4) hide show
  1. N_F_skill_output.xlsx +0 -0
  2. app.py +182 -182
  3. education_output.xlsx +0 -0
  4. jobs_output.xlsx +0 -0
N_F_skill_output.xlsx ADDED
Binary file (20.4 kB). View file
 
app.py CHANGED
@@ -1,183 +1,183 @@
1
- from fastapi import FastAPI, Request
2
- from pydantic import BaseModel
3
- import pandas as pd
4
- import re
5
- import json
6
- from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
7
-
8
- app = FastAPI()
9
-
10
- class TextInput(BaseModel):
11
- text: str
12
-
13
- # خواندن داده‌ها از فایل‌های اکسل
14
- jobs = pd.read_excel('jobs_output.xlsx')['object'].astype(str).tolist()
15
- education = pd.read_excel('education_output.xlsx')['object'].astype(str).tolist()
16
- skills = pd.read_excel('skills_output.xlsx')['object'].astype(str).tolist()
17
-
18
- model_name_or_path = "HooshvareLab/distilbert-fa-zwnj-base-ner"
19
- tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
20
- model = AutoModelForTokenClassification.from_pretrained(model_name_or_path)
21
- nlp = pipeline("ner", model=model, tokenizer=tokenizer)
22
-
23
- def preprocess_text(text):
24
- text = text.replace('\u200c', ' ').strip()
25
- text = re.sub(r'\s+', ' ', text)
26
- return text
27
-
28
- def extract_items_in_text(text, items):
29
- text = preprocess_text(text)
30
- found_items = set()
31
- for item in items:
32
- item_normalized = preprocess_text(item)
33
- if item_normalized.lower() in text.lower():
34
- found_items.add(item_normalized)
35
- return list(found_items)
36
-
37
- def compare_items(items_1, items_2):
38
- common_items = set()
39
- score = 0
40
- for item1 in items_1:
41
- for item2 in items_2:
42
- words1 = set(item1.lower().split())
43
- words2 = set(item2.lower().split())
44
- common_words = words1.intersection(words2)
45
- num_common = len(common_words)
46
- if num_common >= 3:
47
- common_items.add((item1, item2))
48
- score = 100
49
- elif num_common == 2:
50
- common_items.add((item1, item2))
51
- score = 75
52
- elif num_common == 1:
53
- common_items.add((item1, item2))
54
- score = 50
55
- return score, common_items
56
-
57
- def compare_skills(skill_1, skill_2):
58
- common_skill = set(skill_1).intersection(set(skill_2))
59
- num_common = len(common_skill)
60
- if num_common >= 10:
61
- score = 100
62
- elif num_common == 7:
63
- score = 75
64
- elif num_common == 5:
65
- score = 50
66
- else:
67
- score = 25
68
- return score, common_skill
69
-
70
- def extract_ner_info(text, nlp):
71
- ner_results = nlp(text)
72
- full_name = ''
73
- loc = ''
74
- age = None
75
- for i in range(len(ner_results)):
76
- if ner_results[i]['entity'] == 'B-PER':
77
- full_name = ner_results[i]['word']
78
- for j in range(i+1, len(ner_results)):
79
- if ner_results[j]['entity'].startswith('I-PER'):
80
- full_name += ner_results[j]['word'].replace('##', '')
81
- else:
82
- break
83
- if ner_results[i]['entity'] == 'B-LOC' and not loc:
84
- loc = ner_results[i]['word']
85
- age_match = re.search(r'سن\s*:\s*(\d+)', text)
86
- if age_match:
87
- age = int(age_match.group(1))
88
- return full_name, loc, age
89
-
90
- @app.post("/process")
91
- async def process_text(input: TextInput):
92
- input_text = input.text
93
- input_text = input_text.replace("آدرس", "")
94
- fixed_text = """استخدام کارآموز هوش مصنوعی (AI-شیراز)
95
-
96
- دسته‌بندی شغلی
97
- وب،‌ برنامه‌نویسی و نرم‌افزار
98
- موقعیت مکانی
99
- فارس ، شیراز
100
- نوع همکاری
101
- تمام وقت کارآموزی
102
- حداقل سابقه کار
103
- مهم نیست
104
- حقوق
105
- توافقی
106
- شرح موقعیت شغلی
107
- شرکت تاو سیستم واقع در (شیراز - صدرا - خیابان البرز) در راستای تکمیل تیم نرم افزاری خود در نظر دارد دوره کارآموزی رایگان از مبتدی تا حرفه ای برای افراد پر انرژی و فعال برگزار کند.
108
- هدف از این دوره آماده کردن نیروها جهت جذب در شرکت تاو سیستم است.
109
- اگر فرد فعال و پر انرژی هستید و در جهت پیشرفت خود تلاش زیادی می کنید، ما منتظر شما هستیم....
110
-
111
-
112
-
113
- نحوه برگزاری:
114
- دوره به مدت 4 ماه (سه روز در هفته) به صورت کلاس آموزشی برگزار می شود.
115
- شرکت در (شیراز - صدرا - خیابان البرز) واقع شده و دوره آموزشی به صورت حضوری برگزار می شود.
116
- شما در طول دوره توسط مدرس مورد ارزیابی مستمر قرار میگیرید و در صورت عدم توانایی شما برای ادامه دوره، به شما اعلام می شود و از دوره کنار گذاشته میشوید.
117
- در انتهای دوره پروژه ای تستی با توجه به مسائلی که در دوره یاد گرفته اید برای شما تعریف می شود و برای انجام آن دو هفته فرصت دارید.
118
- در صورت تایید پروژه شما توسط مدرس دوره، با شما قرارداد بسته می شود و به صورت حضوری در شرکت مشغول به فعالیت می شوید.
119
-
120
- ***لطفا در صورت داشتن همه (شرایط عمومی) زیر، رزومه خود را ارسال کنید.***
121
-
122
-
123
-
124
- شرایط عمومی:
125
- ۱. آشنایی مقدماتی با زبان برنامه نویسی پایتون
126
- ۲. سطح زبان انگلیسی متوسط به بالا (توانایی درک متون انگلیسی تخصصی)
127
- ۳. آشنایی مقدماتی با الگوریتم های هوش مصنوعی (یادگیری ماشین، یادگیری عمیق )
128
- ۴. آشنایی با پایگاه داده مقدماتی
129
- ۵- امکان شرکت در دوره ها به صورت حضوری در آدرس (شیراز - صدرا - خیابان البرز)
130
- ۶- امکان گذاشتن وقت در خارج از تایم کلاس ها جهت انجام تمرینات
131
- ۷- امکان همکاری به صورت تمام وقت و حضوری در صورت قبولی در انتهای دوره (40 ساعت در هفته)
132
- ۸- از پذیرش دانشجو و افراد که شاغل هستند و یا اینکه در آینده درخواست کار به صورت ریموت دارند معذوریم.
133
- ۹- سن بین 18 الی 30 سال
134
- ۱۰- علاقه مند به یادگیری و به روز رسانی دانش فردی
135
- ۱۱- خلاق، پویا، با انگیزه و سرعت عملکرد بالا
136
- ۱۲- منظم و مسئولیت پذیر
137
-
138
-
139
-
140
- مهارت‌های امتیازی:
141
- ۱. آشنایی با با زبان برنامه نویسی پایتون در حد پیشرفته
142
- ۲. آشنایی با فریم ورک های pytorch , tensorflow
143
- ۳. آشنایی با کتاب خانه های numpy, pandas, matplotlib, sklearn ..
144
- ۴. آشنایی با data mining
145
- ۵. آشنایی با اصول solid
146
- ۶. آشنایی با Clean architecture
147
- ۷. آشنایی با Git , GitHub"""
148
-
149
- jobs_in_fixed_text = extract_items_in_text(fixed_text, jobs)
150
- jobs_in_input_text = extract_items_in_text(input_text, jobs)
151
- education_in_fixed_text = extract_items_in_text(fixed_text, education)
152
- education_in_input_text = extract_items_in_text(input_text, education)
153
- skills_in_fixed_text = extract_items_in_text(fixed_text, skills)
154
- skills_in_input_text = extract_items_in_text(input_text, skills)
155
-
156
- job_score, common_jobs = compare_items(jobs_in_fixed_text, jobs_in_input_text)
157
- education_score, common_education = compare_items(education_in_fixed_text, education_in_input_text)
158
- skill_score, common_skills = compare_skills(skills_in_fixed_text, skills_in_input_text)
159
-
160
- full_name, loc, age = extract_ner_info(input_text, nlp)
161
-
162
- fixed_loc = "شیراز"
163
- loc_score = 100 if loc == fixed_loc else 0
164
- age_score = 100 if age and 18 <= age <= 30 else 0
165
-
166
- average_score = (job_score + education_score + skill_score + loc_score + age_score) / 5
167
-
168
- output = {
169
- "average_score": average_score,
170
- "full_name": full_name,
171
- "age": age,
172
- "location": loc,
173
- "job_score": job_score,
174
- "education_score": education_score,
175
- "skill_score": skill_score,
176
- "loc_score": loc_score,
177
- "age_score": age_score,
178
- "common_jobs": list(common_jobs),
179
- "common_education": list(common_education),
180
- "common_skills": list(common_skills)
181
- }
182
-
183
  return output
 
1
+ from fastapi import FastAPI, Request
2
+ from pydantic import BaseModel
3
+ import pandas as pd
4
+ import re
5
+ import json
6
+ from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
7
+
8
+ app = FastAPI()
9
+
10
+ class TextInput(BaseModel):
11
+ text: str
12
+
13
+ # خواندن داده‌ها از فایل‌های اکسل
14
+ jobs = pd.read_excel('jobs_output.xlsx')['object'].astype(str).tolist()
15
+ education = pd.read_excel('education_output.xlsx')['object'].astype(str).tolist()
16
+ skills = pd.read_excel('N_F_skill_output.xlsx')['object'].astype(str).tolist()
17
+
18
+ model_name_or_path = "HooshvareLab/distilbert-fa-zwnj-base-ner"
19
+ tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
20
+ model = AutoModelForTokenClassification.from_pretrained(model_name_or_path)
21
+ nlp = pipeline("ner", model=model, tokenizer=tokenizer)
22
+
23
+ def preprocess_text(text):
24
+ text = text.replace('\u200c', ' ').strip()
25
+ text = re.sub(r'\s+', ' ', text)
26
+ return text
27
+
28
+ def extract_items_in_text(text, items):
29
+ text = preprocess_text(text)
30
+ found_items = set()
31
+ for item in items:
32
+ item_normalized = preprocess_text(item)
33
+ if item_normalized.lower() in text.lower():
34
+ found_items.add(item_normalized)
35
+ return list(found_items)
36
+
37
+ def compare_items(items_1, items_2):
38
+ common_items = set()
39
+ score = 0
40
+ for item1 in items_1:
41
+ for item2 in items_2:
42
+ words1 = set(item1.lower().split())
43
+ words2 = set(item2.lower().split())
44
+ common_words = words1.intersection(words2)
45
+ num_common = len(common_words)
46
+ if num_common >= 3:
47
+ common_items.add((item1, item2))
48
+ score = 100
49
+ elif num_common == 2:
50
+ common_items.add((item1, item2))
51
+ score = 75
52
+ elif num_common == 1:
53
+ common_items.add((item1, item2))
54
+ score = 50
55
+ return score, common_items
56
+
57
+ def compare_skills(skill_1, skill_2):
58
+ common_skill = set(skill_1).intersection(set(skill_2))
59
+ num_common = len(common_skill)
60
+ if num_common >= 10:
61
+ score = 100
62
+ elif num_common == 7:
63
+ score = 75
64
+ elif num_common == 5:
65
+ score = 50
66
+ else:
67
+ score = 25
68
+ return score, common_skill
69
+
70
+ def extract_ner_info(text, nlp):
71
+ ner_results = nlp(text)
72
+ full_name = ''
73
+ loc = ''
74
+ age = None
75
+ for i in range(len(ner_results)):
76
+ if ner_results[i]['entity'] == 'B-PER':
77
+ full_name = ner_results[i]['word']
78
+ for j in range(i+1, len(ner_results)):
79
+ if ner_results[j]['entity'].startswith('I-PER'):
80
+ full_name += ner_results[j]['word'].replace('##', '')
81
+ else:
82
+ break
83
+ if ner_results[i]['entity'] == 'B-LOC' and not loc:
84
+ loc = ner_results[i]['word']
85
+ age_match = re.search(r'سن\s*:\s*(\d+)', text)
86
+ if age_match:
87
+ age = int(age_match.group(1))
88
+ return full_name, loc, age
89
+
90
+ @app.post("/process")
91
+ async def process_text(input: TextInput):
92
+ input_text = input.text
93
+ input_text = input_text.replace("آدرس", "")
94
+ fixed_text = """استخدام کارآموز هوش مصنوعی (AI-شیراز)
95
+
96
+ دسته‌بندی شغلی
97
+ وب،‌ برنامه‌نویسی و نرم‌افزار
98
+ موقعیت مکانی
99
+ فارس ، شیراز
100
+ نوع همکاری
101
+ تمام وقت کارآموزی
102
+ حداقل سابقه کار
103
+ مهم نیست
104
+ حقوق
105
+ توافقی
106
+ شرح موقعیت شغلی
107
+ شرکت تاو سیستم واقع در (شیراز - صدرا - خیابان البرز) در راستای تکمیل تیم نرم افزاری خود در نظر دارد دوره کارآموزی رایگان از مبتدی تا حرفه ای برای افراد پر انرژی و فعال برگزار کند.
108
+ هدف از این دوره آماده کردن نیروها جهت جذب در شرکت تاو سیستم است.
109
+ اگر فرد فعال و پر انرژی هستید و در جهت پیشرفت خود تلاش زیادی می کنید، ما منتظر شما هستیم....
110
+
111
+
112
+
113
+ نحوه برگزاری:
114
+ دوره به مدت 4 ماه (سه روز در هفته) به صورت کلاس آموزشی برگزار می شود.
115
+ شرکت در (شیراز - صدرا - خیابان البرز) واقع شده و دوره آموزشی به صورت حضوری برگزار می شود.
116
+ شما در طول دوره توسط مدرس مورد ارزیابی مستمر قرار میگیرید و در صورت عدم توانایی شما برای ادامه دوره، به شما اعلام می شود و از دوره کنار گذاشته میشوید.
117
+ در انتهای دوره پروژه ای تستی با توجه به مسائلی که در دوره یاد گرفته اید برای شما تعریف می شود و برای انجام آن دو هفته فرصت دارید.
118
+ در صورت تایید پروژه شما توسط مدرس دوره، با شما قرارداد بسته می شود و به صورت حضوری در شرکت مشغول به فعالیت می شوید.
119
+
120
+ ***لطفا در صورت داشتن همه (شرایط عمومی) زیر، رزومه خود را ارسال کنید.***
121
+
122
+
123
+
124
+ شرایط عمومی:
125
+ ۱. آشنایی مقدماتی با زبان برنامه نویسی پایتون
126
+ ۲. سطح زبان انگلیسی متوسط به بالا (توانایی درک متون انگلیسی تخصصی)
127
+ ۳. آشنایی مقدماتی با الگوریتم های هوش مصنوعی (یادگیری ماشین، یادگیری عمیق )
128
+ ۴. آشنایی با پایگاه داده مقدماتی
129
+ ۵- امکان شرکت در دوره ها به صورت حضوری در آدرس (شیراز - صدرا - خیابان البرز)
130
+ ۶- امکان گذاشتن وقت در خارج از تایم کلاس ها جهت انجام تمرینات
131
+ ۷- امکان همکاری به صورت تمام وقت و حضوری در صورت قبولی در انتهای دوره (40 ساعت در هفته)
132
+ ۸- از پذیرش دانشجو و افراد که شاغل هستند و یا اینکه در آینده درخواست کار به صورت ریموت دارند معذوریم.
133
+ ۹- سن بین 18 الی 30 سال
134
+ ۱۰- علاقه مند به یادگیری و به روز رسانی دانش فردی
135
+ ۱۱- خلاق، پویا، با انگیزه و سرعت عملکرد بالا
136
+ ۱۲- منظم و مسئولیت پذیر
137
+
138
+
139
+
140
+ مهارت‌های امتیازی:
141
+ ۱. آشنایی با با زبان برنامه نویسی پایتون در حد پیشرفته
142
+ ۲. آشنایی با فریم ورک های pytorch , tensorflow
143
+ ۳. آشنایی با کتاب خانه های numpy, pandas, matplotlib, sklearn ..
144
+ ۴. آشنایی با data mining
145
+ ۵. آشنایی با اصول solid
146
+ ۶. آشنایی با Clean architecture
147
+ ۷. آشنایی با Git , GitHub"""
148
+
149
+ jobs_in_fixed_text = extract_items_in_text(fixed_text, jobs)
150
+ jobs_in_input_text = extract_items_in_text(input_text, jobs)
151
+ education_in_fixed_text = extract_items_in_text(fixed_text, education)
152
+ education_in_input_text = extract_items_in_text(input_text, education)
153
+ skills_in_fixed_text = extract_items_in_text(fixed_text, skills)
154
+ skills_in_input_text = extract_items_in_text(input_text, skills)
155
+
156
+ job_score, common_jobs = compare_items(jobs_in_fixed_text, jobs_in_input_text)
157
+ education_score, common_education = compare_items(education_in_fixed_text, education_in_input_text)
158
+ skill_score, common_skills = compare_skills(skills_in_fixed_text, skills_in_input_text)
159
+
160
+ full_name, loc, age = extract_ner_info(input_text, nlp)
161
+
162
+ fixed_loc = "شیراز"
163
+ loc_score = 100 if loc == fixed_loc else 0
164
+ age_score = 100 if age and 18 <= age <= 30 else 0
165
+
166
+ average_score = (job_score + education_score + skill_score + loc_score + age_score) / 5
167
+
168
+ output = {
169
+ "average_score": average_score,
170
+ "full_name": full_name,
171
+ "age": age,
172
+ "location": loc,
173
+ "job_score": job_score,
174
+ "education_score": education_score,
175
+ "skill_score": skill_score,
176
+ "loc_score": loc_score,
177
+ "age_score": age_score,
178
+ "common_jobs": list(common_jobs),
179
+ "common_education": list(common_education),
180
+ "common_skills": list(common_skills)
181
+ }
182
+
183
  return output
education_output.xlsx ADDED
Binary file (11 kB). View file
 
jobs_output.xlsx ADDED
Binary file (14.3 kB). View file