์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 7662
- ๊ฒฝ์์ ์ ์ผ
- 3085
- 10825
- ์ถ์ฒ๊ณผ ๊ฒ์
- ๊ตฌ์กฐ์ ๋ฐ์ดํฐ
- 1620
- hannanum
- ์ปจํ ์ธ ๊ธฐ๋ฐ ํํฐ๋ง
- ์๊ณ ๋ฆฌ์ฆ
- ์ถ์ฒ์์คํ
- ๋ฐฑ์ค
- ์ถ์ฒ ์์คํ ์ ํ๊ณ
- ์ ์ฌ๋
- ์ ํ๋ธ ์ถ์ฒ ์์คํ
- ํ์ ํํฐ๋ง
- 7785
- google dialogflow
- ์ถ์ฒ ์์คํ
- 18405
- ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ
- 18352
- ๋ฌธ์์ด๋ฐ์
- ์ค๋๋ฅ ์
- python
- Pypy3
- 1259
- ํ์ด์ฌ
- 14620
- ๋ทํ๋ฆญ์ค ์ถ์ฒ ์์คํ
- Today
- Total
Kowal's Igloo
์ถ์ฒ ์์คํ : ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ํ์ฉํ ํค์๋ ๊ธฐ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ๋ณธ๋ฌธ
์ถ์ฒ ์์คํ : ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ํ์ฉํ ํค์๋ ๊ธฐ๋ฐ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ
์ฝ์์ด 2023. 11. 24. 14:33๐ง ์ฑ์ฉ ๋งค์นญ ํ๋ซํผ: ๊ธฐ์ ์ฌ์ฉ์๊ฐ "๋ฉํฐํ๋ ์ด์ด ์ ๋ต ๊ฒ์์ ๊ฐ๋ฐํ ์๋ฒ ๊ฐ๋ฐ์" ๋ฑ์ ํ๋ก์ ํธ ๊ฐ์๋ฅผ ์ ๋ ฅํ๋ฉด ์๋น์ค์ ์ฌ๋ผ์ ์๋ ์ฌ์ฉ์๋ค์ ์ด๋ ฅ์์ ๋น๊ตํด ๊ฐ์ฅ ์ ์ฌ๋๊ฐ ๋์ ์์๋๋ก ์ถ์ฒํ๋ค.
1. ์ถ์ฒ ์์คํ ์ด๋?
1.1 ๋ฐ์ดํฐ์ ์ข ๋ฅ
1.2 ์ ์ฌ๋
1.3 ์ ์ฌ๋ ์ธก์ ๋ฐฉ์
1.4 ์ถ์ฒ ์์คํ ์ ์ข ๋ฅ
1.5 ์ถ์ฒ ์์คํ ์ ํ๊ณ
2. ์ฐ๋ฆฌ ์๋น์ค์ ์ ์ฉ
2.1 Step 1. ํค์๋ ์ถ์ถ
2.2 Step 2. ๋จ์ด ๋ฒกํฐํ
2.3 Step 3. ๋ฒกํฐ ๊ฐ ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
2.4 ์ ์ฒด ์ฝ๋
2.5 ์คํ ๊ฒฐ๊ณผ
2.6 ๊ฐ์ ์
3 ์ฐธ๊ณ ์๋ฃ
์ถ์ฒ ์์คํ ์ด๋?
์ฌ์ฉ์์ ์ ๋ณด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๊ฐ์ธ์ ์ทจํฅ์ ๋ง๋ ์์ดํ ์ ์ถ์ฒํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ ์ํ์ ์ข์์๋ฅผ ๋จ๊ธฐ๊ฑฐ๋, ์ํ์ ๊ตฌ๋งคํ๊ณ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ ์ ์๋ค. ์ด๋ฌํ ์ฌ์ฉ์์ ํผ๋๋ฐฑ๊ณผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด์ ์ฌ์ฉ์์ ์ทจํฅ์ ํ์ ํ๊ณ , ์ถ์ฒ ์์คํ ์ ํ์ฉํ๋ค.
๋ฐ์ดํฐ์ ์ข ๋ฅ
- Explicit ๋ฐ์ดํฐ
- ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ผ๋ก ์ ํธ๋๋ฅผ ํํํ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
- ์) ํ์ , ์ข์์, ๊ตฌ๋
- ์ค๋ฌด์์๋ ์ป๊ธฐ ์ด๋ ต๋ค.
- ํ์ง๋ง ์ฐ๋ฆฌ ์๋น์ค์์๋ ํ๋ก์ ํธ ๊ฐ์๋ฅผ ์ง์ ์ ์ผ๋ก ์ ๋ ฅํ๊ธฐ ๋๋ฌธ์, explicit ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ฝ๋ค!
- Implicit ๋ฐ์ดํฐ
- ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ ์ผ๋ก ์ ํธ๋๋ฅผ ํํํ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
- ์) ๊ฒ์ ๊ธฐ๋ก, ํด๋ฆญ ๊ธฐ๋ก, ๊ตฌ๋งค ๋ด์ญ
์ ์ฌ๋
์ถ์ฒ ์์คํ ์์ ์ ์ฌ๋๋ ์ค์ํ ๊ฐ๋ ์ด๋ค. ๋ฐ์ดํฐ์ ํํ๊ฐ ํ ์คํธ, ์ด๋ฏธ์ง, ์์ ๋ฑ ์ด๋ค ํํ์ด๋๋ผ๋ ๋ฒกํฐ ํํ๋ก ํํํ์ฌ ์์ดํ ๋ฒกํฐ ๊ฐ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ท ๋ฐ์ดํฐ์ ์์ ์นดํ ๊ณ ๋ฆฌ, ์ฌ์ด์ฆ, ์ ๋ฑ์ด ๋ฒกํฐ์ ์ฌ๋ฌ ์์ฑ ์ค ํ๋๊ฐ ๋ ์ ์๋ค.
์ ์ฌ๋ ์ธก์ ๋ฐฉ์
- ์์นด๋ ์ ์ฌ๋
- ์งํฉ ๊ฐ ๊ต์งํฉ ํฌ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ค.
- 0~1 ์ฌ์ด์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- ํฉ์งํฉ๊ณผ ๊ต์งํฉ์ ํฌ๊ธฐ๊ฐ ๋น์ทํ ์๋ก ๊ฐ์ด 1์ ๊ฐ๊น์์ง๋ค.
- (๋ ์์ดํ ๊ต์งํฉ)/(๋ ์์ดํ ํฉ์งํฉ)
- ์ฝ์ฌ์ธ ์ ์ฌ๋
- ๋ ์์ดํ ์ ๋ฒกํฐ ๊ณต๊ฐ ๋ชจ๋ธ(vector space model)์์ ๋ ๋ฒกํฐ ๊ฐ์ ์ ์ฌ์ฑ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
- A⋅B๋ ๋ฒกํฐ A์ B์ ๋ด์ (dot product)
- โฅAโฅ์ โฅBโฅ๋ ๊ฐ๊ฐ ๋ฒกํฐ A์ B์ ํฌ๊ธฐ(norm)
- -1์์ 1 ์ฌ์ด์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- ๋ ๋ฒกํฐ๊ฐ ๋น์ทํ ์๋ก ๊ฐ์ด 1์ ๊ฐ๊น์์ง๋ค. ๊ฐ์ด -1์ ๊ฐ๊น์ธ์๋ก ๋ ๋ฒกํฐ๋ ๋ฐ๋ ๋ฐฉํฅ์ ๊ฐ์ง๋ฉฐ, 0์ ๋ฒกํฐ ๊ฐ์ ๊ด๋ จ์ฑ์ด ์์์ ๋ํ๋ธ๋ค.
- ์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ
- ๋ ์์ดํ ์ ๋ฒกํฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ค.
- ๋ ๋ฒกํฐ ๊ฐ์ ๋ฐฉํฅ์ ๋ฌด์ํ๋ค.
- ํผ์ด์จ ์๊ด๊ณ์
- ๋ ์์ดํ ์ด ์๋ก ์๊ด๊ด๊ณ๊ฐ ์๋์ง ์ธก์ ํ๋ค.
์ถ์ฒ ์์คํ ์ ์ข ๋ฅ
์ถ์ฒ ์์คํ ์ ์ข ๋ฅ๋ ํฌ๊ฒ ์ปจํ ์ธ ๊ธฐ๋ฐ ํํฐ๋ง, ํ์ ํํฐ๋ง, ํ์ด๋ธ๋ฆฌ๋ ์ถ์ฒ ์์คํ ์ด ์๋ค. ๋ ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ๋ฅ๋ฌ๋์ ํ์ฉํ ์ถ์ฒ ์์คํ ์ด ์๋ค.
์ปจํ ์ธ ๊ธฐ๋ฐ ํํฐ๋ง
์ฌ์ฉ์๊ฐ ์ ํํ๊ฑฐ๋ ๊ตฌ๋งคํ ์์ดํ ๊ณผ ์ ์ฌํ ์์ดํ ์ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์์ดํ ๊ฐ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ค.
ํ์ ํํฐ๋ง
๋น์ทํ ์ทจํฅ์ ๊ฐ์ง ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ข์ํ ์์ดํ ์ ์ฌ์ฉ์์๊ฒ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฌ์ฉ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ค.
์ถ์ฒ ์์คํ ์ ํ๊ณ
์ฝ๋ ์คํํธ ๋ฌธ์
๋ง์ฝ ํ์ ํํฐ๋ง์ ์ฌ์ฉํ๋ค๋ฉด, ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ๋ฐ๋์ ํ์ํ๊ธฐ์ ์ ๊ท ์ฌ์ฉ์์๊ฒ๋ ์ด๋ ํ ์์ดํ ๋ ์ถ์ฒํ ์ ์๋ค.
๊ณ์ฐ ํจ์จ์ฑ ์ ํ
ํ์ ํํฐ๋ง์ ๊ณ์ฐ๋์ด ๋ง์ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ๊ณ์ฐ์ด ์ฅ๊ธฐ๊ฐ ์์๋๋ค.
๋กฑํ ์ผ ๋ฌธ์
์ฌ์ฉ์๋ ์์์ ์ธ๊ธฐ ์๋ ์ฝํ ์ธ ์๋ง ๊ด์ฌ์ ๋ณด์ด๊ธฐ ๋ง๋ จ์ธ๋ฐ, ์ด ๋๋ฌธ์ ์์์ ์ธ๊ธฐ ์ฝํ ์ธ ๊ฐ ์ ์ฒด ์ถ์ฒ ์ฝํ ์ธ ์ ๋ง์ ๋น์จ์ ์ฐจ์งํ๊ฒ ๋๋ค.
→ ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ์ผ์ด๋๋ ๋ฌธ์ ์ ์ด๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์ถ์ฒ ์์คํ
2๊ฐ ์ด์์ ๋ค์ํ ์ข ๋ฅ์ ์ถ์ฒ ์์คํ ์๊ณ ๋ฆฌ์ฆ์ ์กฐํฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฐ๋ฆฌ ์๋น์ค์ ์ ์ฉ
์ ๋ฌด ํ ์ค ์๊ฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ์ฒํ๋ฏ๋ก, ์์ดํ ๊ฐ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ ์ปจํ ์ธ ๊ธฐ๋ฐ ํํฐ๋ง ๋ฐฉ์์ ๋ ๊ฐ๊น๋ค๊ณ ๋ณผ ์ ์๋ค. ๋ํ, ํค์๋ ๋ฒกํฐ ๊ฐ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๊ธฐ ์ํด ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ณธ๊ฒฉ์ ์ผ๋ก ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ฐ์ ์์ํ๊ฒ ๋ค.
๐ง ๊ธฐ์ ์ฌ์ฉ์๊ฐ "๋ฉํฐํ๋ ์ด์ด ์ ๋ต ๊ฒ์์ ๊ฐ๋ฐํ ์๋ฒ ๊ฐ๋ฐ์" ๋ฑ์ ์ ๋ฌด ํ ์ค ์๊ฐ๋ฅผ ์ ๋ ฅํ๋ฉด, ์๋น์ค์ ์ฌ๋ผ์ ์๋ ์ฌ์ฉ์๋ค์ ์ด๋ ฅ์์ ๋น๊ตํด ๊ฐ์ฅ ์ ์ฌ๋๊ฐ ๋์ ์์๋๋ก ์ถ์ฒํ๋ ค๊ณ ํ๋ค. ๊ฒ์ํ ์ ๋ฌด ํ ์ค ์๊ฐ์ ๊ตฌ์ง์์ ์ด๋ ฅ์ ๊ฐ๊ฐ์์ ํค์๋๋ฅผ ์ถ์ถํด์ ๋ ํค์๋ ๋ฒกํฐ ๊ฐ ์ ์ฌ๋(์ฝ์ฌ์ธ ์ ์ฌ๋)๋ฅผ ์ธก์ ํ ๊ฒ์ด๋ค.
Step 1. ํค์๋ ์ถ์ถ
KoNLPy(์ฝ์์ํ์ด)๋ ํ๊ตญ์ด ์ ๋ณด์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ํจํค์ง์ด๋ค.
์ฌ์ฉํ๋ ค๋ฉด KoNLPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ๋ค์, KoNLPy์์ ์ ๊ณตํ๋ ํ๋๋(Hannanum) ํํ์ ๋ถ์๊ธฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ด๋ ฅ์ ํ ์คํธ๋ฅผ hannanum.nouns() ํจ์์ ์ ๋ฌํ์ฌ ๋ช ์ฌ๋ง ์ถ์ถํ๋ค.
!pip install konlpy # KoNLPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
from konlpy.tag import Hannanum
hannanum = Hannanum() # Hannanum ๊ฐ์ฒด ์์ฑ
resumes = [
"ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ๊ฐ๋ฐ์",
"๋น ๋ฅธ ํ์ต ๋ฅ๋ ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ์คํฌ์ ๊ฐ์ถ ๊ฒฝ์ํ ์ ๊ณต์",
"์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด"
]
for resume in resumes:
# ์ด๋ ฅ์ ํ
์คํธ์์ ๋ช
์ฌ๋ง ์ถ์ถ
resume_keywords = hannanum.nouns(resume)
print(resume_keywords)
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค. ‘๋ฐ’, ‘์ด’, ‘์/๊ณผ’ ๋ฑ ์กฐ์ฌ์ ์ ์์ฌ๋ฅผ ์๋ตํ๊ณ ์ ์ถ์ถ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
['ํ๋ก์ ํธ', '๊ด๋ฆฌ', '๊ฐ๋ฐ', '๊ฒฝํ', 'ํ๋ถ', '๊ฐ๋ฐ์']
['ํ์ต', '๋ฅ๋ ฅ', 'ํ๋ก์ ํธ', '๊ด๋ฆฌ', '์คํฌ', '๊ฒฝ์ํ', '์ ๊ณต์']
['์น', '๊ฐ๋ฐ', 'ํ๋ก์ ํธ', '์ผ์ ', '๊ด๋ฆฌ', '๋ฅ์', '์ํํธ์จ์ด', '์์ง๋์ด']
Step 2. ๋จ์ด ๋ฒกํฐํ
!pip install scikit-learn
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform([project_keywords, resume_keywords])
์ด ์ฝ๋๋ scikit-learn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ TF-IDF (Term Frequency-Inverse Document Frequency) ๋ฒกํฐ๋ฅผ ์์ฑํ๋ค. TF-IDF๋ ํน์ ๋จ์ด๊ฐ ๋ฌธ์ ๋ด์์ ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ๋ํ๋ด๋ ์งํ๋ก, ๋จ์ด์ ๋น๋์ ์ญ๋ฌธ์ ๋น๋๋ฅผ ๊ณ ๋ คํ๋ค.
TfidfVectorizer๋ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ TF-IDF ๋ฒกํฐ๋ก ๋ณํํ๋ค.
fit_transform() ํจ์๋ ๊ฐ ํ ์คํธ์ ๋จ์ด๋ค์ ๊ธฐ๋ฐ์ผ๋ก TF-IDF ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๊ณ , ์ต์ข ์ ์ผ๋ก ํ ์คํธ๋ฅผ TF-IDF ๋ฒกํฐ๋ก ๋ณํํ๋ค. ๊ฒฐ๊ณผ๋ก ๋์ค๋ vectors๋ ํฌ์ ํ๋ ฌ(Sparse Matrix) ํํ๋ก, ๊ฐ ํ์ ๊ฐ ๋ฌธ์์ ๋ํ TF-IDF ๋ฒกํฐ๋ฅผ ๋ํ๋ธ๋ค. ํฌ์ ํ๋ ฌ์ ๋๋ถ๋ถ์ ๊ฐ์ด 0์ธ ํ๋ ฌ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ์ฌ ํํํ๋ ๋ฐฉ์์ด๋ค.
Step 3. ๋ฒกํฐ ๊ฐ ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
from sklearn.metrics.pairwise import cosine_similarity
# ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
similarity_matrix = cosine_similarity(vectors)
similarity = similarity_matrix[0, 1]
cosine_similarity() ํจ์๋ TF-IDF ๋ฒกํฐ๋ก ํํ๋ ํ ์คํธ๋ค ๊ฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ค.
similarity_matrix[0, 1]์ ์ฒซ ๋ฒ์งธ ๋ฒกํฐ์ ๋ ๋ฒ์งธ ๋ฒกํฐ ๊ฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ด ๊ฐ์ 0๊ณผ 1 ์ฌ์ด์ ์ค์์ด๋ฉฐ, ๊ฐ์ด 1์ ๊ฐ๊น์ธ์๋ก ์ ์ฌํ๊ณ 0์ ๊ฐ๊น์ธ์๋ก ์๋ก ๊ด๊ณ๊ฐ ์๋ค.
์ ์ฒด ์ฝ๋
!pip install scikit-learn
!pip install konlpy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from konlpy.tag import Hannanum
hannanum = Hannanum()
def extract_keywords(text):
# ํ
์คํธ์์ ํค์๋ ์ถ์ถ
keywords = hannanum.nouns(text)
print(keywords)
return " ".join(keywords) # ๋จ์ด ๋ฆฌ์คํธ๋ฅผ ๋ค์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํ
def calculate_similarity(project_keywords, resume_keywords):
# ๋จ์ด ๋ฒกํฐํ
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform([project_keywords, resume_keywords])
# ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
similarity_matrix = cosine_similarity(vectors)
similarity = similarity_matrix[0, 1]
return similarity
def recommend_resumes(project_overview, resumes): # ์ด๋ ฅ์ ์ถ์ฒ ๊ตฌํ
# ์
๋ฌด ํ ์ค ์๊ฐ๋ก๋ถํฐ ํค์๋ ์ถ์ถ
project_keywords = extract_keywords(project_overview)
# ์ด๋ ฅ์๋ณ๋ก ์ ์ฌ๋ ๊ณ์ฐ
similarity_scores = []
for resume in resumes:
# ์ด๋ ฅ์๋ก๋ถํฐ ํค์๋ ์ถ์ถ
resume_keywords = extract_keywords(resume)
# ์
๋ฌด ํ ์ค ์๊ฐ์ ์ด๋ ฅ์ ์ฌ์ด์ ์ ์ฌ๋ ๊ณ์ฐ
similarity = calculate_similarity(project_keywords, resume_keywords)
similarity_scores.append((resume, similarity))
# ์ ์ฌ๋๊ฐ ๋์ ์์ผ๋ก ์ด๋ ฅ์ ์ ๋ ฌ
sorted_resumes = sorted(similarity_scores, key=lambda x: x[1], reverse=True)
return sorted_resumes
# ๊ธฐ์
์ฌ์ฉ์๊ฐ ๊ฒ์ํ๋ ์
๋ฌด ํ ์ค ์๊ฐ
project_overview = "๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ"
print("์ฌ์ฉ์ ๊ฒ์์ด: " + project_overview)
# ์๋์ด ์ฌ์ฉ์์ ์ด๋ ฅ์ ํค์๋
resumes = [
"๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ๊ฐ๋ฐ์",
"๋น ๋ฅธ ํ์ต ๋ฅ๋ ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ์คํฌ์ ๊ฐ์ถ ๊ฒฝ์ํ ์ ๊ณต์",
"์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด"
]
# ์
๋ฌด ํ ์ค ์๊ฐ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ ฅ์ ์ถ์ฒ
recommended_resumes = recommend_resumes(project_overview, resumes)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
for resume, similarity in recommended_resumes:
print(f"์ ์ฌ๋: {similarity:.2f}, ์ด๋ ฅ์: {resume}")
์คํ ๊ฒฐ๊ณผ
์ฌ์ฉ์ ๊ฒ์์ด: ๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ
์ ์ฌ๋: 0.63, ์ด๋ ฅ์: ๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ๊ฐ๋ฐ์
์ ์ฌ๋: 0.41, ์ด๋ ฅ์: ์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด
์ ์ฌ๋: 0.24, ์ด๋ ฅ์: ๋น ๋ฅธ ํ์ต ๋ฅ๋ ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ์คํฌ์ ๊ฐ์ถ ๊ฒฝ์ํ ์ ๊ณต์
๊ฐ์ ์
์ฌ์ฉ์ ๊ฒ์์ด: ์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์
์ ์ฌ๋: 0.41, ์ด๋ ฅ์: ์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ์๋ฒ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด
์ ์ฌ๋: 0.38, ์ด๋ ฅ์: ์ ๋ต ๊ฒ์ ํ๋ก์ ํธ์์์ ํ๋ถํ ์๋ฒ ์ธก ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ์ง ์ํํธ์จ์ด ์์ง๋
๊ธฐ์ ์ฌ์ฉ์์ ๊ฒ์์ด๊ฐ ‘์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์’๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ฌ๋ฌ ์์๋ฅผ ๋ฃ์ด ํ ์คํธํ๋๋ฐ, ์ธ๊ฐ์ด ๋ณด๊ธฐ์ ๋น์ทํ ํ ์คํธ์ ๋ํด ์ ์ฌ๋๋ฅผ ๋ฎ๊ฒ ๊ณ์ฐํ๊ณ ์์์ ํ์ธํ ์ ์์๋ค.
์๋ฅผ ๋ค์ด, ‘์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์’์ ‘์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ์๋ฒ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด’๋ ์ธ๊ฐ์ด ๋ณด๊ธฐ์ ์ ์ฌํ๋ค. ๊ทธ๋ฌ๋, ๊ฒฐ๊ณผ์์ ํ์ธํ ์ ์๋ฏ์ด 0.41 ์ ๋์ ์ ์ฌ๋๋ง์ ์ป์ ์ ์์๋ค.
๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
['์ ๋ต', '๋ฉํฐํ๋ ', '๊ฒ์', '๊ฐ๋ฐ', '์๋ฒ', '๊ฐ๋ฐ์']
['์ ๋ต', '๋ฉํฐํ๋ ', '๊ฒ์', '์๋ฒ', '์ค๊ณ', '๊ตฌํ', '๊ฒฝํ', '์์ง๋์ด']
- ‘๊ตฌํ’, ‘๊ฒฝํ’ ๋ฑ ์ง๋ฌด์ ์ง์ ์ ์ผ๋ก ์ฐ๊ด์ด ์๋ ์ผ๋ฐ์ ์ธ ๋จ์ด๊ฐ ํฌํจ๋๋ค.
- ‘๊ฐ๋ฐ์’, ‘์์ง๋์ด’ ๋ฑ ์ ์์ด๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค.
๋จผ์ 1๋ฒ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฒ ๋ค. ์ง๋ฌด์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ์ด ์๋ ์ผ๋ฐ์ ์ธ ๋จ์ด๋ฅผ stop words๋ก ๋ง๋ค์ด ํค์๋ ๋ฒกํฐํ์์ ๋ฐฐ์ ํ์๋ค.
# ์ง๋ฌด์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ ์๋ stop words
korean_stopwords = ['๊ฒฝํ', '๋ฅ๋ ฅ', '๊ฒฝ๋ ฅ', '๊ธฐ์ ', '๋ฅ์', 'ํ๋ถ', 'ํฅ์', '๋ค์', '๋ค์ํ', '์๋ฃ', '๊ด๋ จ', 'ํนํ', '๋ณด์ ', '๋ด๋น', '์ฑ๊ณต', '์ฑ๊ณต์ ', 'ํ๋ก์ ํธ', '๋ถ์ผ', 'ํ์ฉ', '์คํฌ']
# ๋จ์ด ๋ฒกํฐํ
vectorizer = TfidfVectorizer(stop_words=korean_stopwords)
๊ฒฐ๊ณผ
์ ์ฌ๋๊ฐ ๋์์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ์ฉ์ ๊ฒ์์ด: ์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์
์ ์ฌ๋: 0.50, ์ด๋ ฅ์: ์ ๋ต ๊ฒ์ ํ๋ก์ ํธ์์์ ํ๋ถํ ์๋ฒ ์ธก ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ์ง ์ํํธ์จ์ด ์์ง๋์ด
์ ์ฌ๋: 0.45, ์ด๋ ฅ์: ์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์ ์๋ฒ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด
์ ์ฌ๋: 0.38, ์ด๋ ฅ์: ๋ค์ํ ๊ฒ์ ํ๋ก์ ํธ์์ ์๋ฒ ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ ์์ง๋์ด
์ ์ฌ๋: 0.32, ์ด๋ ฅ์: ๊ฒ์ ์๋ฒ ๊ด๋ จ ํ๋ก์ ํธ์์ ํ์ ๋ฆฌ๋ํ๊ณ ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ ๊ฒฝํ์ด ์์
์ ์ฌ๋: 0.23, ์ด๋ ฅ์: ์ ๋ต์ ์ธ ๋ง์ธ๋๋ก ํ๋ก์ ํธ๋ฅผ ์ฃผ๋ํ ๊ฒฝํ์ด ํ๋ถํ ์๋ฒ ๊ฐ๋ฐ์
์ ์ฌ๋: 0.20, ์ด๋ ฅ์: ์๋ฒ ์ํคํ
์ฒ์ ๋ํ ๊น์ ์ดํด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ๋ต์ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถ
์ ์ฌ๋: 0.20, ์ด๋ ฅ์: ์ ๋ต์ ์ธ ๊ฒ์์ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ณ ์ ์ง๋ณด์ํ ๊ฒฝ๋ ฅ์ ๋ณด์ ํ ์์ง๋์ด
์ ์ฌ๋: 0.18, ์ด๋ ฅ์: ์๋ฒ ์ฑ๋ฅ ์ต์ ํ์ ์์ ์ฑ ๊ฐํ๋ฅผ ํตํด ๊ฒ์ ํ๋ ์ด ๊ฒฝํ์ ํฅ์์ํจ ๊ฒฝํ ์์
์ ์ฌ๋: 0.18, ์ด๋ ฅ์: ๋ฉํฐํ๋ ์ด์ด ์์คํ
์ ํนํ๋ ์๋ฒ ์ํคํ
์ฒ๋ฅผ ์ค๊ณํ๊ณ ๊ตฌํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด
์ ์ฌ๋: 0.14, ์ด๋ ฅ์: ๋ฐ์ด๋ ํ์ํฌ์ ์ํต ๋ฅ๋ ฅ์ผ๋ก ๊ฒ์ ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ ๊ฒฝํ ์์
์ฌํ ํ ์คํธ
์์๋ฅผ ๋ ๋ค์ํํด์ ์ฌ์ฉ์์ ๊ฒ์์ด์ ๊ด๋ จ ์๋ ํ ์คํธ๊น์ง ์ถ๊ฐํด๋ณด์๋ค.
๊ฒ์์ด์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ฌ์ฉ์ ๊ฒ์์ด: ์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์
์ ์ฌ๋: 0.54, ์ด๋ ฅ์: ์ ๋ต์ ์ธ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ ์ ๋ฌธ๊ฐ
์ ์ฌ๋: 0.45, ์ด๋ ฅ์: ์๋ฒ ๊ฐ๋ฐ ๋ถ์ผ์์ ๋ค์ํ ๊ฒ์ ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ ์์ง๋์ด
์ ์ฌ๋: 0.30, ์ด๋ ฅ์: ๊ฒ์ ์๋ฒ ๋ณด์ ๊ฐํ๋ฅผ ์ํ ๋ค์ํ ํ๋กํ ์ฝ ๊ฐ๋ฐ์ ์ฐธ์ฌํ ์์ง๋์ด
์ ์ฌ๋: 0.18, ์ด๋ ฅ์: ๋ชจ๋ฐ์ผ ๊ฒ์ ์๋ฒ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ๊ณ ์ต์ ํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด
์ ์ฌ๋: 0.14, ์ด๋ ฅ์: ๊ธ๋ก๋ฒ ๋น์ฆ๋์ค ์ ๋ต ์๋ฆฝ๊ณผ ์คํ์ ๊ฒฝํ์ด ์๋ ๋น์ฆ๋์ค ์ ๋ต ๊ธฐํ์
์ ์ฌ๋: 0.12, ์ด๋ ฅ์: ๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ํ๋ก์ ํธ ๋งค๋์
์ ์ฌ๋: 0.10, ์ด๋ ฅ์: ์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด
์ ์ฌ๋: 0.08, ์ด๋ ฅ์: ์ต์ ์น ๊ธฐ์ ์ ํ์ฉํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํนํ๋ ํ๋ก ํธ์๋ ์์ง๋์ด
์ ์ฌ๋: 0.00, ์ด๋ ฅ์: ๋น ๋ฅธ ํ์ต ๋ฅ๋ ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ์คํฌ์ ๊ฐ์ถ ๊ฒฝ์ํ ์ ๊ณต์
์ ์ฌ๋: 0.00, ์ด๋ ฅ์: AI ๋ฐ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ํ์ฉํ ๋ฐ์ดํฐ ๊ณผํ์
์ ์ฌ๋: 0.00, ์ด๋ ฅ์: ์ฌ์ฉ์ ๊ฒฝํ(UX) ๋์์ธ์ ๋ฅ์ํ UI/UX ๋์์ด๋
์ ์ฌ๋: 0.00, ์ด๋ ฅ์: IT ๋ณด์ ๋ฐ ์ทจ์ฝ์ ๋ถ์์ ์ ๋ฌธํ๋ ๋ณด์ ์์ง๋์ด
์ ์ฌ๋: 0.00, ์ด๋ ฅ์: ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ
์ ์ํคํ
์ฒ ์ค๊ณ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์์คํ
์ํคํ
ํธ
๋ค๋ง ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค.
์ ์ฌ๋: 0.14, ์ด๋ ฅ์: ๊ธ๋ก๋ฒ ๋น์ฆ๋์ค ์ ๋ต ์๋ฆฝ๊ณผ ์คํ์ ๊ฒฝํ์ด ์๋ ๋น์ฆ๋์ค ์ ๋ต ๊ธฐํ์
์ ์ฌ๋: 0.12, ์ด๋ ฅ์: ๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ํ๋ก์ ํธ ๋งค๋์
์ ์ฌ๋: 0.10, ์ด๋ ฅ์: ์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด
์ ์ฌ๋: 0.08, ์ด๋ ฅ์: ์ต์ ์น ๊ธฐ์ ์ ํ์ฉํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํนํ๋ ํ๋ก ํธ์๋ ์์ง๋์ด
์์ ๊ฒฐ๊ณผ์์ ๊ธฐํ์๋ ํ๋ก์ ํธ ๋งค๋์ ๊ฐ ์์ง๋์ด๋ณด๋ค ๋ ๋์ ์ ์ฌ๋๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ, ์ด๋ ๊ฒ ์ง๋ฌด๊ฐ ๋ฌ๋ผ๋ ํค์๋๊ฐ ๋น์ทํ๋ฉด ์ ์ฌ๋๊ฐ ๋๋ค ํ๊ฐํ๋ค.
๋ฐ๋ผ์, ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๋ ์ ํด์ง ์ง๋ฌด ๋ถ์ผ ์ค ๋จผ์ ์ ํํ ํ ๊ฒ์ํ๋๋ก ํ๋ ค๊ณ ํ๋ค.
๊ฐ์ ํ ์ ์ฒด ์ฝ๋
!pip install scikit-learn
!pip install konlpy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from konlpy.tag import Hannanum
hannanum = Hannanum()
def extract_keywords(text):
# ํ
์คํธ์์ ํค์๋ ์ถ์ถ
keywords = hannanum.nouns(text)
return " ".join(keywords) # ๋จ์ด ๋ฆฌ์คํธ๋ฅผ ๋ค์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํ
def calculate_similarity(project_keywords, resume_keywords):
# ์ง๋ฌด์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ ์๋ stop words
general_stopwords = ['๊ฒฝํ', '๋ฅ๋ ฅ', '๊ฒฝ๋ ฅ', '๊ธฐ์ ', '์
๋ฌด', '์์
', '๋ฅ์', 'ํ๋ถ',
'ํฅ์', '๋ค์', '๋ค์ํ', '์๋ฃ', '๊ด๋ จ', 'ํนํ', '์ญ๋', '๋ณด์ ',
'๋ด๋น', '์ฑ๊ณต', '์ฑ๊ณต์ ', 'ํ๋ก์ ํธ', '๋ถ์ผ', 'ํ์ฉ', '์คํฌ',
'๋ชฉํ', '๋์ ', '๊ธฐ๋ก', '๋
ธ๋ ฅ', '์ํ', '์ฐธ์ฌ', '์ฐธ๊ฐ', '๋ฌ์ฑ',
'์ ์ฉ', '๋ฐฐ์', '๊ธฐ์ฌ', 'ํ๋ ฅ', 'ํ๋', 'ํฅ์', '์ฑ์ฅ', '๋ฐ์ ']
# ๋จ์ด ๋ฒกํฐํ
vectorizer = TfidfVectorizer(stop_words=general_stopwords)
vectors = vectorizer.fit_transform([project_keywords, resume_keywords])
# ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
similarity_matrix = cosine_similarity(vectors)
similarity = similarity_matrix[0, 1]
return similarity
def recommend_resumes(project_overview, resumes): # ์ด๋ ฅ์ ์ถ์ฒ ๊ตฌํ
# ์
๋ฌด ํ ์ค ์๊ฐ๋ก๋ถํฐ ํค์๋ ์ถ์ถ
project_keywords = extract_keywords(project_overview)
# ์ด๋ ฅ์๋ณ๋ก ์ ์ฌ๋ ๊ณ์ฐ
similarity_scores = []
for resume in resumes:
# ์ด๋ ฅ์๋ก๋ถํฐ ํค์๋ ์ถ์ถ
resume_keywords = extract_keywords(resume)
# ์
๋ฌด ํ ์ค ์๊ฐ์ ์ด๋ ฅ์ ์ฌ์ด์ ์ ์ฌ๋ ๊ณ์ฐ
similarity = calculate_similarity(project_keywords, resume_keywords)
similarity_scores.append((resume, similarity))
# ์ ์ฌ๋๊ฐ ๋์ ์์ผ๋ก ์ด๋ ฅ์ ์ ๋ ฌ
sorted_resumes = sorted(similarity_scores, key=lambda x: x[1], reverse=True)
return sorted_resumes
# ๊ธฐ์
์ฌ์ฉ์๊ฐ ๊ฒ์ํ๋ ์
๋ฌด ํ ์ค ์๊ฐ
project_overview = "์ ๋ต ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ์"
print("์ฌ์ฉ์ ๊ฒ์์ด: " + project_overview)
# ์๋์ด ์ฌ์ฉ์์ ์ด๋ ฅ์ ํค์๋
resumes = [
"์ ๋ต์ ์ธ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ์๋ฒ ๊ฐ๋ฐ ์ ๋ฌธ๊ฐ",
"์๋ฒ ๊ฐ๋ฐ ๋ถ์ผ์์ ๋ค์ํ ๊ฒ์ ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ด๋ ์์ง๋์ด",
"๋ชจ๋ฐ์ผ ๊ฒ์ ์๋ฒ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ๊ณ ์ต์ ํํ ๊ฒฝํ์ด ์๋ ์์ง๋์ด",
"๊ฒ์ ์๋ฒ ๋ณด์ ๊ฐํ๋ฅผ ์ํ ๋ค์ํ ํ๋กํ ์ฝ ๊ฐ๋ฐ์ ์ฐธ์ฌํ ์์ง๋์ด",
"๊ธฐ์
ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ ๊ฒฝํ์ด ํ๋ถํ ํ๋ก์ ํธ ๋งค๋์ ",
"๋น ๋ฅธ ํ์ต ๋ฅ๋ ฅ๊ณผ ํ๋ก์ ํธ ๊ด๋ฆฌ ์คํฌ์ ๊ฐ์ถ ๊ฒฝ์ํ ์ ๊ณต์",
"์น ๊ฐ๋ฐ๊ณผ ํ๋ก์ ํธ ์ผ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์ํํธ์จ์ด ์์ง๋์ด",
"AI ๋ฐ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ํ์ฉํ ๋ฐ์ดํฐ ๊ณผํ์",
"์ฌ์ฉ์ ๊ฒฝํ(UX) ๋์์ธ์ ๋ฅ์ํ UI/UX ๋์์ด๋",
"IT ๋ณด์ ๋ฐ ์ทจ์ฝ์ ๋ถ์์ ์ ๋ฌธํ๋ ๋ณด์ ์์ง๋์ด",
"๊ธ๋ก๋ฒ ๋น์ฆ๋์ค ์ ๋ต ์๋ฆฝ๊ณผ ์คํ์ ๊ฒฝํ์ด ์๋ ๋น์ฆ๋์ค ์ ๋ต ๊ธฐํ์",
"๋๊ท๋ชจ ๋ถ์ฐ ์์คํ
์ ์ํคํ
์ฒ ์ค๊ณ์ ๊ด๋ฆฌ์ ๋ฅ์ํ ์์คํ
์ํคํ
ํธ",
"์ต์ ์น ๊ธฐ์ ์ ํ์ฉํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํนํ๋ ํ๋ก ํธ์๋ ์์ง๋์ด"
]
# ์
๋ฌด ํ ์ค ์๊ฐ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ ฅ์ ์ถ์ฒ
recommended_resumes = recommend_resumes(project_overview, resumes)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
for resume, similarity in recommended_resumes:
print(f"์ ์ฌ๋: {similarity:.2f}, ์ด๋ ฅ์: {resume}")
์ฐธ๊ณ ์๋ฃ
์ถ์ฒ์์คํ , ๊ทธ๊ฒ์ด ์๊ณ ์ถ๋ค | Product Analytics Playground (playinpap.github.io)
๋ด์ ๊ณผ ์ฝ์ฌ์ธ์ ์ฌ๋ (dot product & cosine similarity) (tistory.com)
KoNLPy: ํ์ด์ฌ ํ๊ตญ์ด NLP — KoNLPy 0.6.0 documentation
'AI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐๏ธ [๋ฅ๋ฌ๋ 2๋จ๊ณ] 1. ๋จธ์ ๋ฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ค์ ํ๊ธฐ (0) | 2025.01.07 |
---|---|
๐ 4. ์์ ์ ๊ฒฝ๋ง ๋คํธ์ํฌ (2) | 2025.01.07 |
๐ข 3. ํ์ด์ฌ๊ณผ ๋ฒกํฐํ (2) | 2025.01.07 |
๐ 2. ์ ๊ฒฝ๋ง๊ณผ ๋ก์ง์คํฑํ๊ท (2) | 2025.01.07 |
์ ๊ฒฝ๋ง๊ณผ ๋ฅ๋ฌ๋ (2) | 2023.09.19 |