cdcvd commited on
Commit
05595e1
·
verified ·
1 Parent(s): 983e395

Update app.py

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