Skip to content

Commit 19b3390

Browse files
committed
update: update from develop
2 parents aea56de + c4f3e62 commit 19b3390

File tree

4 files changed

+107
-28
lines changed

4 files changed

+107
-28
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ jobs:
1414
node-version: [16.x, 18.x ]
1515

1616
steps:
17-
- uses: actions/checkout@v1
17+
- uses: actions/checkout@v3
1818

1919
- name: Use Node.js${{matrix.node-version}}
20-
uses: actions/setup-node@v2
20+
uses: actions/setup-node@v3
2121
with:
2222
node-version: ${{matrix.node-version}}
2323

package-lock.json

Lines changed: 49 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
"dependencies": {
33
"@babel/register": "^7.18.9",
44
"@slack/bolt": "^3.12.2",
5-
"axios": "^1.2.0",
5+
"axios": "^1.2.1",
66
"cheerio": "^1.0.0-rc.12",
77
"dotenv": "^16.0.3",
8+
"fast-levenshtein": "^3.0.0",
89
"sinon": "^15.0.0"
910
},
1011
"devDependencies": {
@@ -15,4 +16,4 @@
1516
"scripts": {
1617
"prepare": "husky install"
1718
}
18-
}
19+
}

src/findOffice.js

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const fs = require('fs');
2+
const levenshtein = require('fast-levenshtein');
23

34
const dataInput = fs
45
.readFileSync('./rsc/data/dept.txt', 'utf-8')
@@ -7,21 +8,66 @@ const dataInput = fs
78

89
/* 파일에서 학과의 사무실 위치 탐색 */
910
function findOffice(department) {
11+
let distance = 0;
12+
let min = 100;
13+
let office = 'undefined';
14+
let realDepart = 'undefined';
15+
let rawData = [];
1016
let result = '학과 이름을 올바르게 입력해주세요.';
1117
let data = '';
1218

1319
const trimmedInput = department.replace(/ /gi, '');
1420

15-
/* 입력으로 들어온 학과의 사무실을 찾았을 경우 */
16-
dataInput.forEach((element) => {
21+
// eslint-disable-next-line array-callback-return
22+
dataInput.some((element) => {
23+
1724
data = element.split('-');
18-
const trimmedData = data[0].replace(/ /gi, '');
19-
if (trimmedData.toLowerCase() === trimmedInput.toLowerCase()) {
25+
rawData = data[0].split('-');
26+
const trimmedData = data[0].replace(/ /gi, '');
27+
distance = levenshtein.get(
28+
trimmedInput.toLowerCase(),
29+
trimmedData.toLowerCase()
30+
);
31+
// console.log(` CASE ${trimmedInput} ${distance}`);
32+
33+
34+
// 입력으로 들어온 학과의 사무실을 찾았을 경우
35+
if (
36+
trimmedData.toLowerCase() ===
37+
trimmedInput.toLowerCase()
38+
) {
2039
result = data[1].trim();
40+
41+
42+
return {
43+
mag: result,
44+
success: true
45+
}
46+
}
47+
// 입력과 일치하는 이름이 없을 경우 비슷한 이름 탐색
48+
if (distance < 15) {
49+
realDepart = data[0].trim();
50+
office = data[1].trim();
51+
} else {
52+
rawData.forEach((word) => {
53+
distance = levenshtein.get(department, word);
54+
if (distance < min && word !== 'and') {
55+
min = distance;
56+
realDepart = data[0].trim();
57+
office = data[1].trim();
58+
}
59+
});
60+
result = `${realDepart}을 말씀하시는건가요? ${office} 입니다.`;
2161
}
22-
});
62+
63+
return false;
64+
});
2365

24-
return { msg: result, success: result !== '학과 이름을 올바르게 입력해주세요.' };
66+
return {
67+
msg: result,
68+
success:
69+
result !== '학과 이름을 올바르게 입력해주세요.',
70+
};
2571
}
2672

27-
module.exports = findOffice
73+
module.exports = findOffice;

0 commit comments

Comments
 (0)