calcDistance.js
1.49 KB
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
31
32
33
34
35
36
37
38
39
40
41
const e = require('express');
const levenshtein = require('js-levenshtein');
const db = require('../model/db');
const {calcDistance} = require('../service/calcDistance');
const {getProfanity} = require('../service/query');
const {standardize, removeSpecial} = require('../service/standardization');
const Hangul = require('hangul-js');
exports.calcDistance = async (req, res, next) => {
const { word } = req.body;
const profanityList = await getProfanity();
let rare = word;
let specialRemoved = removeSpecial(word);
let specialRemovedRare = specialRemoved;
let specialNotRemoved = word;
rare = Hangul.disassemble(rare);
rare = rare.join('');
specialRemovedRare = Hangul.disassemble(specialRemovedRare);
specialRemovedRare = specialRemovedRare.join('');
specialRemoved = standardize(specialRemoved);
specialNotRemoved = standardize(specialNotRemoved);
const rareResult = calcDistance(rare, profanityList);
const specialRemovedRareResult = calcDistance(specialRemovedRare, profanityList);
const specialRemovedResult = calcDistance(specialRemoved, profanityList);
const specialNotRemovedResult = calcDistance(specialNotRemoved, profanityList);
const minResult = Math.min(rareResult, specialRemovedRareResult, specialRemovedResult, specialNotRemovedResult);
if (minResult <= 1){
res.status(200).json({success : true, isProfanity : "욕설"});
}else{
res.status(200).json({success : true, isProfanity : "정상"});
}
};