Nhà tuyển dụng điền form tạo hồ sơ

Một phần của tài liệu Khóa luận tốt nghiệp Công nghệ thông tin: Nghiên cứu shopizer framework và áp dụng xây dựng hệ thống kết nối việc làm giữa sinh viên và nhà tuyển dụng (Trang 63 - 85)

CHUONG 3: PHAN TÍCH VÀ THIET KE

2. Nhà tuyển dụng điền form tạo hồ sơ

4. Nhập giới thiệu về công ty

6. Nhà tuyển dụng chọn nút "Hoàn tat" để hoàn tất hồ sơ

3.3.18. Tìm kiếm công việc

Hình 40 - Usecase diagram tìm kiếm công việc dành cho nhà tuyển dụng

Nha tuyén dung

19.Tìm kiếm công

việc

Use Case ID IUC18

Use Case Name Tim kiêm công việc đã đăng Actor Nhà tuyên dụng

Trigger Nhà tuyên dụng chon tim công việc đã đăng

Pre-condition Nhà tuyên dụng đã đăng công việc trước đó

Post-condition Hiền thi công việc cân tim

Step 1. Nhà tuyên dụng chọn mục danh sách công việc 2. Nhà tuyển dụng nhập tên công việc

3. Nhà tuyến dụng chon trạng thái công việc 4. Nhà tuyển dụng chọn nút “Tìm kiếm”

5. Hiên thị công việc cân tìm kiêm

3.3.19. Quản lý nhà tuyển dụng

eo)

1. Quản ly nha tuye dung

Quan tri vién

Hình 41 - Usecase diagram quản lý nhà tuyển dung

Use Case ID IUC19

Use Case Name |Quản lý nhà tuyển dụng Actor Admin

Trigger Admin chon “Quan lý nhà tuyên dụng”

Pre-condition Da dang nhap tai khoan admin

Post-condition Nguoi dùng ứng tuyên vào các công việc mong muôn Step 1. Nhà tuyển dụng chọn “Quan lý nhà tuyển dụng”

2. Hiển thị danh sách các tài khoản nhà tuyên dụng

3. Admin thao tác thêm sửa xóa tài khoản nhà tuyên dụng

3.3.20. Quản lý nhà ứng viên

22. Quản lý ứng viên

Quản trị viên

Hình 42 - Usecase quản lý ứng viên IUse Case ID IUC20

Use Case Name Quan lý ứng viên

43

Actor Admin

‘Trigger Admin chon “Quan lý ứng viên”

Pre-condition |Da đăng nhập tai khoản admin

Post-condition |Người dùng ứng tuyên vào các công việc mong muôn

Step 1. Nhà tuyên dụng chon “Quản lý nhà tuyên dụng”

2. Hiển thị danh sách các tài khoản nhà tuyên dung

3. Admin thao tác thêm sửa xóa tài khoản nhà tuyên dung

3.4. Kiến trúc hệ thống 3.4.1. Kiến trúc sử dụng

Hệ thống sử dụng mô hình 3 lớp (3-layer) đề phát triển ứng dụng web nhằm phân chia các thành phần trong hệ thống, các thành phần cùng chức năng sẽ được nhóm lại với nhau và phân chia công việc cho từng nhóm để dữ liệu không bị chồng chéo và

chạy lộn x6n trong đó:

Tang giao diện (Front-end) sử dụng công nghệ ReactJS dùng dé xử lý việc hiển thi

dữ liệu và tương tác với người dùng thông qua trình duyệt web.

Tang logic ứng dung (Back-end) sử dung framework mã nguồn mở về sàn thương mại điện tử là Shop1zer dé có thé tuy chinh muc dich su dung cho san viéc lam. St

dụng công nghệ chính là Java (Spring Boot)

Tang dữ liệu (Database): sử dung cơ sở dữ liệu MySQL

Tang logic ứng dụng kết nói với tầng dữ liệu thông qua JDBC cụ thé là Hibernate

framework

Giữa tang giao diện va tầng logic giao tiếp với nhau thông qua RESTful API

Các giao tiếp giữa người dùng với hệ thống sẽ được bao mật qua giao thức http/https

Người dùng cuối (Client) Tầng giao diện (Presentation tier) Tầng ứng dụng (Application tier) Tầng dữ liệu (Data tier)

” lo

RESTful API

Htfp/https = F:

4 Front-end : Back-end

a

! Web services api Recommend system : (Shopizer) (Lenskit)

Client Browser Database

Hình 43 - Sơ đô kiến trúc hệ thong

3.4.2. Mở rộng

Người dùng cuối (Client) | Tang giao diện (Presentation tier) | Tầng ứng dung (Application tier) | Tầng dữ liệu (Data tier)

— | E:

Web services api

(Shopizer) System Database RESTful API

_ Internet Server database 1†

de) 27

Gv

Http/httpski đọ Server database 2

Client Browser

Hình 44 - Mô hình kiến trúc mở rộng

Trong mô hình mở rộng hệ thống, hệ thống vẫn sử dụng mô hình 3 lớp (3-layer) nhưng có sự thay đôi về triển khai. Các thành phan trong hệ thong được đặt ở các trên

các server độc lập với nhau.

Trong kiến trúc cũ, tất cả các thành phần được đặt trên cùng một server. Khi server nãy gặp trục trặc về kỹ thuật thì toàn bộ hệ thống sẽ ngừng hoạt động. Khi tách các thành phần và đặc chúng trên các vị trị khác nhau sẽ tránh tính trạng trên cũng như xác định vị trí lỗi dễ dàng hơn.

Hệ thống đề xuất trong kiến trúc cũ sử dụng chung database, nhưng khi lượng người dùng lớn lên đồng nghĩa việc dữ liệu phục vụ cho đề xuất cũng lớn lên. Vì thế việc tách riêng ra một database dành riêng cho hệ thống đề xuất là cần thiết. Từ đó có thê

áp dụng các database phục vụ cho phân tích dữ liệu.

45

3.5. Áp dụng Shopizer

Shopizer được xây dựng theo mô hình bán lẻ, có một hệ thống quản lý cao nhất và bên dưới là các cửa hàng. Từng cửa hang sé có những danh mục và các sản phẩm khác nhau. Các khách hàng đề thực hiện được các giao dịch, khách hàng phải đăng ký tài khoản tại các cửa hàng. Vì vậy khách hàng sẽ phụ thuộc các cửa hàng nhất định.

3.5.1. Những vấn đề khi áp dụng Shopizer

“Framework vẫn còn nhiều lỗi: chang hạn như trong quá trình nhóm tìm hiểu về framework thì gặp lỗi liên quan đến API product,...

“Kho khăn khi custom framework: vì đây là framework được xây dựng cho mô hình

thương mại điện tử nghành bán lẻ nên nó sẽ gây khó khăn trong việc custom đề chuyên sang mô hình hệ thống tuyên dụng việc làm.

s*Xung đột dependency giữa thư viện Lenskit và Shopizer framework: khi nhóm thực

hiện chức năng đề xuất công việc và ứng viên bằng cách thêm module recommender vào trong source code, module này cùng cấp với các module có sẵn của Shopizer. Khi thêm vào thì nhóm đã gặp lỗi thư viện Guava vì xung đột phiên bản của thư viện này.

3.5.2. Xử lý những vấn đề khi áp dụng

sằXử lý khi framework gặp lỗi: thường xuyờn theo dừi cập nhật xử lý lỗi từ cộng đồng Shopizer. Trong quá trình thực hiện đề tai, thì nhóm có gặp van dé lỗi với API Product, rat may lỗi đó vài ngày sau khi nhóm chúng em gặp lỗi thì nó đã được fix.

Shopizer java e-commerce software

eC

circleci

wrapper

odel

sm-core-modules

1...

sm-shop-model

sm-shop

gitignore

Jenkinsfile

LICENSE md

Releases 18 README.md

v3.2.5 RELEASE-NOTES.md

jenkins file

Hình 45 - Hình ảnh bản cập nhật fix lỗi của Shopizer

s*Xử lý việc thực hiện custom framework:

— Trong Shopizer gồm các thực thé khách hàng, quản lý cửa hàng, sản phẩm va quan lý hệ thống. Còn trong bài toán xây dựng hệt thống hỗ trợ việc làm thì gồm các thực thé sinh viên (ứng viên), nhà tuyển dụng, công việc và quan lý hệ thống. Ở đây chúng ta có thể thấy được khá tương đồng giữa hai mô hình đó là khách hàng tương ứng với sinh viên, quản lý cửa hàng tương ứng với nhà tuyển dụng, sản phẩm tương ứng với công việc còn quản lý hệ thống tương tự nhau. Từ đó chúng ta sẽ xác định các class và những tài nguyên liên quan khác của framework có thể áp dụng từ Shopizer.

— Bởi vì Shopizer được chia cau trúc source code theo kiều multi module nên giảm

bớt khó khăn chi custom. Shopizer được chia thành 5 module chính là sm-core nơi

chứa source code liên quan đến Repository và Service, sm-core-model nơi chứa source code liên quan đến các entity trong hệ thống, sm-core-module nơi chứa các module liên quan đến như thanh toán, vận chuyên.. .., sm-core-model nơi chứa source code liên quan đến các entity của ứng dụng ,sm-shop nơi chưa source code liên quan đến API, Mapper, Facade,... và cuối cùng là sm-shop-model nơi chứa source code liên quan đến các DTO. Trong luận văn này ta chủ yếu tập trung vào 4 module chính

đó là sm-core, sm-core-model, sm-shop và sm-shop-model.

— Ta sẽ thực hiện custom theo trình từ Repository layer để đi lên các layer cao hơn:

+ Đầu tiên là cần xác định các entity cần sử dụng và cập nhật lại phù hợp với yêu cầu của hệ thông. Đầu tiên là với entity Product, đây sẽ là entity phục vụ cho thể hiện công việc trong hệ thống, entiy MerchantStore phục vụ cho nhà tuyển dụng, và Entity phục vụ cho nhà quản lý hệ thống. Trong đó entity Produet sẽ là entity cập nhật nhiều nhất.

Trong các entity này sẽ có các relationship với nhau, chúng ta cũng cần xác định những entity nào sẽ cần sử dụng, những entity nào không sử dụng thì chúng ta tạm thời bỏ qua. Tiếp theo ta thêm vào những field và entity khác dé phù hợp với yêu cầu hệ thông.

47

= Product (Job)

- id: Long

- auditSection: AuditSection

- descriptions: Set<ProductDescription>

- availabilities: Set<ProductAvailability>

- merchantStore: MerchantStore

- skillDescriptions: Set<SkillDescription>*

- locationDescriptions: Set<LocationDescription> ô - idPayCycle: String *

- positionDescriptions: Set<PositionDescription> ô - categories: Set<Category>

- dateAvailable: Date - dateExperience: Date - available: boolean - Status: JobStatus

- experience: ExperienceDescription ô - gender: String

- recruitments: List<Recruitment> ô - jobRates: List<JobRate> x

* Những attribute hoặc entity được thêm vào để phù hợp với bài toán hệ thống

Hình 46 - Cập nhật entity Product và các relationship mapping liên quan

+ Tiếp theo là thêm các repository khác, cũng như cập nhật lại các method query cho

phù hợp. Tương tự service ta cũng cập nhật và thêm các service khác. Các source code này thực hiện bên trong module sm-core.

Hình 47 - Cac repository được thêm vào và các method query được thêm vào

icrosoft Windows [Version 10.0.19045.3324]

(c) Microsoft Corporation. All rights reserved.

0: \HKIT-Nam4\KLTN\BE_KLTN>

Hình 48 - Cac service được thêm vào

+ Tiếp theo cập nhật các class và interface của cho API, Mapper, Facade trong module

sm-shop. Bên cạnh đó cập nhật những field và thêm các DTO mới vao ứng dụng ở module sm-shop-model.

% Project Explorer

D: \HKIT-Nam4\KLTN\BE_KLTN>

Hình 49 - Các API được thêm vào và các method được bồ Sung

49

icrosoft Windows [Version 10.0.19045.3324) (c) Microsoft Corporation. All rights reserved.

D:\HKI1-Nam4\KLTN\BE_KLTN>

Hình 50 - Cac mapper được thêm vào

2-2-2 ˆÔ...L...:i.:. ii...

D: \HR beams \KLTN\BE_KLTN>

Hình 51 - Cập nhật DTO và thêm các DTO mới

“Xung đột dependency giữa thư viện Lenskit và Shopizer framework

Khi kết hợp giữa thư viện LensKit và Shopizer đã xảy ra việc xung đột version dependency lẫn nhau, trong số đó có Guava. Dé fix lỗi nay thay thé bằng version 27.1-jre dé phù hợp với Shopizer.

= CAWINDOWS\syste xe #CAWINDOWSAyst

icrosoft Windows [Version 10.@.19045.3324]

(c) Microsoft Corporation. All rights reserved.

10: \HKTT-Nam4\KLTN\BE_KLTN>

Hình 52 - Replace version dependencies Guava

3.6. Xây dựng chức năng đề xuất công việc

Đầu tiên, ta cần thêm một module khác vào bên trong source code Shopier trước đó. Module được thêm vào cùng cấp vào các module sm-shop, sm-core, sm-core-

model, sm-core-module và sm-shop-model.

project

modelVersion>4.@.0</modelVersion parent

groupId>com.shopizer</ groupId artifactId>shopizer</artifactId version>3.2.5</version

parent

artifactId>recommender</artifactId packaging>jar</ packaging

dependencies

groupId>mysql</ sroupTd

artifactId>mysql-connector-java</artifactIid version2s.0.21</version

dependency dependency

groupid>org.grouplens. Lenskit</ sroupTd artifactId>lenskit-all</artifactId version>3.0-T1</version

Hình 53 - Thêm module recommender vào trong source code

51

B pomxml Rpom.xml x

https: //wwi.apache.org/Licenses/LTICENSE-2.0.txt

org.springframework. boot spring-boot-starter-parent 2529-12

sm-core-model sm-core-modules

Sm-core

sm-shop-modeL sm-shop recommender

UTF-8

Hình 54 - Cau hình sau khi thêm module recommender vào source code 6 file pom

parent cua shopizer

A

4

Hồ sơ người dùng

Kỹ năng 1

Công việc n : Công việc 1

< Quận 1 ơ= Quận n >

Kỹ năng n

Hình 55 - Vector space model cho dé xuất công việc

VSM sử dụng cho đề xuất công việc bao gồm các chiều là các đặc trưng của công việc bao gồm các kỹ năng và khu vực làm việc. Các vector của công việc va hồ sơ người dung là những vector nằm trong VSM này.

s*Hiện thực tính toán TF-IDF cho các công việc va hồ sơ người dùng:

Giả sử có công việc 1 với các kỹ năng gồm Java, MySQL, Web, Spring Boot, Hibernate và khu vực làm việc là quan 1, quận 3, quận Tân Binh. Tiếp theo ta có công việc 2 với các kỹ năng gồm Python, MySQL, Data Analysis, PowerBI, ETL và khu

vực làm việc là quận 1, quận 7. Và cuôi cùng hô sơ người dùng X với các kỹ năng

gồm Java, MySQL, Web, Spring Boot, và khu vực làm việc là quận 1, quận 3, quận

Tân Bình.

Áp dụng công thức:

TF = Số lần xuất hiện mot từ xuất hiện trong tài liệu Tổng số từ trong tài liệu

IDF = log log S6 van ban trong kho van ban

TF-IDF-TF*IDF

Số van ban trong Kho van ban chứa từ can tính

Từ TF IDF(*Cac dac IDF

—| trưng người —

CV 1) CV 2 | Người CV 1 | CV2 | Nguoi dùng dùng không

dùng X l x dùng dé tinh

IDF)

Java 1/8 0 1/8 log(2/1)=0,3 0375 l0 0,375

MySQL 1/8 1/7 1/8 log(2/2)=0 0 0 0

Web 1⁄8 0 1/8 log(2/1)=0,3 0375 0 0,375

Spring Boot [1/8 0 1/8 log(2/1)=0,3 0,375 |0 0,375

Hibernate 1/8 0 0 log(2/1)=0,3 0,375 10 0

Python 0 1/7 0 log(2/1)=0,3 l0 0,042 l0

Data Analysis | 1/7 0 log(2/1)=0,3 0 0,042 |0

PowerBI 0 17 0 log(2/1)=0,3 l0 0,042 l0

ETL 0 1/7 0 log(2/1)=0,3 0 0,042 l0

33

Quận 1 1/8 1/7 1/8 log(2/2)=0 0 0 0

Quan 3 1⁄8 0 L8 log(2/1)=0,3—*(0,375 0 0,375

Quận 7 0 17 0 log(2/1)=0,3 0 0,042 |0

Quan Tan 1/8 0 1/8 log(2/1)=0,3 0,375 0 0,375 Binh

Bang 2 - Bang vi dy vé tinh TF-IDF

Sau khi tính ta được các vector như sau:

CV1 [0.375,0,0.375,0.375,0.375,0,0,0,0,0,0.375,0,0.375]

CV2 [0,0,0,0,0,0.042,0.042,0.042,0.042,0,0,0.042,0]

X [0.375,0,0.375,0.375,0,0,0,0,0,0,0.375,0,0.375]

Tinh toán cosine similar giữa vector hồ sơ người dùng và các vector:

Nhân vô hướng giữa vector CV1 và X

CVI*X=(0.375-0.375)+(0-0)+(0.375-0.375)+(0.375-0.375)+(0.375-0)+(0-0)+(0-0)+(

0-0)+(0-0)+(0-0)+(0.375-0.375)+(0-0)+(0.375-0.375)= 0.703125

CV2*X=(0:0.375)+(0-0)+(0-0.375)+(0-0.375)+(0-0)+(0.042-0)+(0.042-0)+(0.042-0) +(0.042-0)+(0-0)+(0-0.375)+(0-0)+(0.042-0)+(0-0.375)=0

CVIIE (0.375)2 + (0)2 + (0.375)2 + (0.375)2 + (0.375)2 + (0)? =0 919

ICYHE [+ (0)? + (0)2 + (0)2 + (0)? + (0.375)? + (0)? + (0.375)2 =0

— (02+ (0)* + (0)? + (0)? + (0)4 +(0)? + (0042021. -

Jewel | (0.042)2 + (0.042)? + (0.042)? + (0.042)? + (0)? + (0)? — CADE

= 0.84 xị- |(0-375)? + (0)? + (0.375)? + (0.375) + (0)? + (0)? + (0)? _

al HOO)? + [072 +-(07° + (0876)* + (0)? + (0.875)

CV1*xX 0703125

Cosine similar(C VI, X)= = = 0.911

|lcv1l|x|lxl| 0:919+0.84

Cosine similar(CV2, X)= — : =0

|Icv1l|*|lxl| 0.084+0.84

Từ đó kết luận công việc 1 có độ tương đồng hơn với hồ sơ người dùng so với công

việc 2.

sằHiện thực code:

Trong class TFIDFBuilderModel có chức năng xây dựng model cho đề xuất công việc. Trong class này xây dựng một phước thức get() và tuần tự các bước được thực

hiện như nhau:

Bước 1: Tạo một map dé lưu trữ các đặc trưng của công việc. Các đặc trưng được load

từ database thong qua ItemDao.

Hinh 56 - Code mau hé théng dé xuat - 1

Bước 2: Tạo một vector dé lưu trữ tần suất xuất hiện, ở đây chúng ta sẽ sử dụng class

MutableSparseVector với phương thức create(Collection<Long> domain) của

LensKit để thực hiện tạo một vector với key các đặc trưng của công việc gồm kỹ năng

và khu vực làm việc và khởi tạo các value của nó là 0.0.

vectorDF.f111(0.0);

Hình 58 - Code mẫu hệ thong dé xuất - 3

55

Bước 3: Tính TF cho mỗi công việc và đồng thời tính luôn IDF. Áp dung IDF cho mỗi vector TF và chuẩn hóa đơn vị vector cho nó. Dé thực hiện ta tạo một map dé

chứa vector TF của công việc, mỗi id công việc sẽ được map dén một vector tương

Map<Long, MutableSparseVector> itemVectors = new HashMap<Long, MutableSparseVector>();

Hình 59 - Code mau hệ thong dé xuất - 4

Chúng ta sẽ lặp qua tất cả công việc, với một công việc ta sẽ tạo một vector với các key là các đặc trưng dưới dang văn ban và giá trị sẽ là số lần xuất hiện của từ đó trong công việc đó — nếu chưa có giá trị cho đặc trưng sẽ khởi tạo giá tri là 1 còn nếu đã có thì tăng giá trị đó thêm 1 và đồng thời tăng thêm 1 cho của đặc trưng đó trong vector chứa tần suất xuất hiện của từ đó trong tất cả công việc.

LongSet idAllItems = itemDao.getItemIds();

r (Long idItem : idAllitems) {

MutableSparseVector vectorTFOfTtem = MutableSparseVector.create(idMapFeature.values :

List<String> featureOfTtem = itemDao.getFeatureByTdTtem(1dTtem) ; String feature : featureofItem

long featureID = idMapFeature.get(feature) ;

vectorTFOfitem.set(featureID, vectorTFOfItem.get(featureID) + 1);

IllegalArgumentException e vectorTFOfitem.set(featureID, 1);

vectorDF.set(featureID, vectorDF.get(featureID) + 1);

Hình 60 - Code mau hệ thống dé xuất - 5 Bước 4: Tiếp theo chúng ta sẽ tính IDF đặc trưng của các công việc

( .isinfinite(idf)) {

Hình 61 - Code mẫu hệ thong dé xuất - 6

Bước 4: Tình TF-IDF cho mỗi công việc va trả về khởi tạo một TFIDFModel.

Map<Long, MutableSparseVector> modelData = new HashMap<Long, MutableSparseVector>();

Set<Map.Entry<Long, MutableSparseVector>> setVectorTFItem = 1temVectors.entrySet();

(Map.Entry<Long, MutableSparseVector> veEntry : setVectorTFItem) { MutableSparseVector vectorTfTtemTemp = veEntry.getValue();

VectorEntry entry : vectorTfTtemTemp long idFeature = entry.getKey();

int countSpecificFeature = ScoreUtils.countFeatureSpecific(vectorTfitemTemp) ; double tf = entry.getValue() / countSpecificFeature;

double idf = vectorDF.get(idFeature) ;

modelData.put(veEntry.getKey(), vectorTfTtemTemp) ;

}

Map<Long, Double> idToDFMap = createIDToDFMap();

I ú TFIDFModel(idMapFeature, modelData, idToDFMap) ;

Hình 62 - Code mẫu hệ thống dé xuất - 7

Bước 5: Tính TF-IDF cho hồ sơ người dùng chỉ định và sau đó tính độ tương đồng của cosine giữa vector TF-IDF hồ sơ người dùng và các vector TF-IDF của các công

VIỆC.

37

scoreWithDetails user, ion<Long> items

> list = new < >0) userVector = makeUserVector(user) ;

sstem.out.println(‘ 5 System.out.println(uservector) ; System.out.printin();

¡ CosineVectorSimilarity();

idItem : items

vectorItem = model.getVectorItem(idItem) ;

¡ BasicResultMap( list);

Hình 63 - Code mẫu hệ thống dé xuất - 8

Bước 6: Kết quả sau khi thực hiện là một danh sách id các công việc, dựa vào các id công việc này sẽ lây được dây sách công việc được đề xuất từ database.

3.7. Xây dựng chức năng đề xuất ứng viên

Việc xây dựng chức năng đề xuất ứng viên cho từng công việc được thực hiện tương tự như công việc. Trong đó các chiều là các đặc trưng về các kỹ năng, địa điểm

làm việc.

Chúng ta cũng sẽ tạo những vector TF-IDF đại diện hồ sơ của từng ứng viên và tính vector chỉ định cho công việc. Sau đó chúng toán độ tương đồng cosine giữa công

việc và các ứng viên. Sau khi tính xong chúng ta sẽ được một danh sách id các ứng viên.

Một phần của tài liệu Khóa luận tốt nghiệp Công nghệ thông tin: Nghiên cứu shopizer framework và áp dụng xây dựng hệ thống kết nối việc làm giữa sinh viên và nhà tuyển dụng (Trang 63 - 85)

Tải bản đầy đủ (PDF)

(123 trang)