Rhyme_Kr.js 4.65 KB
var start_sound = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];
var middle_sound = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ'];
var end_sound = ['', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'];

var chosung_value={'ㄱ':0 , 'ㄲ':0, 'ㄴ':1,'ㄷ':2, 'ㄸ':2 ,'ㄹ':3, 'ㅁ':4, 'ㅂ':5, 'ㅃ':5, 'ㅅ':6, 'ㅆ':6, 'ㅇ':7, 'ㅈ':8, 'ㅉ':8, 'ㅊ':8, 'ㅋ':0, 'ㅌ':2, 'ㅍ':5,'ㅎ':9};
var middle_value={'ㅏ':0, 'ㅐ':1, 'ㅑ':2,'ㅒ':1, 'ㅓ':3, 'ㅔ':1, 'ㅕ':4, 'ㅖ': 1, 'ㅗ':5, 'ㅘ':0, 'ㅙ':1, 'ㅚ':1,'ㅛ':6,'ㅜ':7,'ㅝ':3,'ㅞ':1,'ㅟ':10,'ㅠ':8,'ㅡ':9,'ㅢ':10,'ㅣ':10};
var end_value={'':0, 'ㄱ':1, 'ㄲ':1, 'ㄳ':1, 'ㅋ':1, 'ㄴ':2, 'ㄵ':2, 'ㄶ':2, 'ㄷ':3, 'ㅌ':3, 'ㅅ':3, 'ㅆ':3, 'ㅈ':3, 'ㅊ':3, 'ㅌ':3, 'ㅎ':3, 'ㄹ':4, 'ㄺ':4, 'ㄽ':4, 'ㄾ':4, 'ㅀ':4, 'ㅁ':5, 'ㄻ':5, 'ㅂ':6,'ㅍ':6, 'ㄼ':6, 'ㄿ':6, 'ㅄ':6, "ㅇ":7};

var refine = require('./Refine_String');
//var line = "[<div class=\"lyricsCont\">이 밤 그날의 구지가 우지개 수자가 반딧불을 <br/>당신의 창 가까이 보낼게요<br/>음 사랑한다는 말 이에요<br/><br/>나 우리의 첫 입맞춤을 떠올려<br/>그럼 언제든 눈을 감고 <br/>음 가장 먼 곳으로 가요<br/><br/>난 파도가 머물던 모래 위에 적힌 글씨처럼<br/>그대가 멀리 사라져 버릴 것 같아 <br/>늘 그리워 그리워<br/><br/>여기 내 마음속에 <br/>모든 말을 다 꺼내어 줄 순 없지만<br/>사랑한다는 말 이에요<br/><br/>어떻게 나에게 그대란 행운이 온 걸까<br/>지금 우리 함께 있다면 아 얼마나 좋을까요<br/><br/>난 파도가 머물던 모래 위에 적힌 글씨처럼<br/>그대가 멀리 사라져 버릴 것 같아<br/>또 그리워 더 그리워<br/><br/>나의 일기장 안에<br/>모든 말을 다 꺼내어 줄 순 없지만<br/>사랑한다는 말<br/><br/>이 밤 그날의 반딧불을 당신의<br/>창 가까이 띄울게요<br/>음 좋은 꿈 이길 바라요</div>]";

var lyric_Encoding = function(lyric)
{
	lyric = lyric.replace(/(^[ '\^\$\*#&]+)|([ '\^\$\*#&]+$)/g, '');

	var r_lst = [];
	var lyric_array = lyric.split("");
	for (var i = 0; i < lyric_array.length;i++)
	{
		if ( '가' <= lyric_array[i] && '힣' >= lyric_array[i])
		{
			var ch1 = parseInt((lyric_array[i].charCodeAt(0) - '가'.charCodeAt(0)) / 588);
			var ch2 = parseInt(((lyric_array[i].charCodeAt(0) - '가'.charCodeAt(0)) - 588*ch1) / 28);
			var ch3 = (lyric_array[i].charCodeAt(0) - '가'.charCodeAt(0)) - 588*ch1 - 28*ch2;
			r_lst.push([chosung_value[start_sound[ch1]], middle_value[middle_sound[ch2]], end_value[end_sound[ch3]]]);
		}
		else
		{
			r_lst.push(lyric_array[i]);
		}
	}
	return r_lst;
};

var lyric_data = function(raw)
{
	var source_data = [];
	var raw_array = raw.split("\r\n");
	for (var i = 0; i < raw_array.length;i++)
	{
		var dict_lst = [];
		var temp = raw_array[i].split(" ");
		for(var j = 0; j < temp.length;j++)
		{
			var word = lyric_Encoding(temp[j]);
			var word_count = word.length;
			dict_lst.push([word, temp[j],word_count]);
		}
		source_data.push(dict_lst);
		var twoWord_lst = [];
		for(var j = 0; j < temp.length-1;j++)
		{
			word = lyric_Encoding(temp[j] + temp[j+1]);
			word_count = word.length;
			twoWord_lst.push([word ,temp[i] + temp[i+1], word_count])
		}
		source_data.push(twoWord_lst);
	}
	var dictionaryData = [];
	dictionaryData = dictionaryData.concat(source_data[0],source_data[1]);
	return dictionaryData;
};


exports.rhyme_kr = function(sg, raw)
{
	var dictData = lyric_data(raw);
	var sgData = lyric_data(sg);
	var r_lst = [];


	for(var i = 0; i < dictData.length;i++)
	{
		if(dictData[i][2] == sgData[0][2])
		{
			var d = dictData[i][0];
			var s = sgData[0][0];
			var tr_count = 0;

			for (var j = 0; j < sgData[0][2];j++)
			{
				var flag = [0,0,0];
				for (var k =0; k < 3; k++)
				{
					if(d[j][k] == s[j][k])
						flag[k] = 1;
				}
				var val = 0;
				for (var l = 0; l < 3; l++)
				{
					if(flag[l] === 1)
						val = val + 1;
				}
				if(val > 1)
					tr_count = tr_count + 1;
			}
			if(sgData[0][2] < 4 && tr_count == sgData[0][2])
				r_lst.push(dictData[i][1]);
      else if (sgData[0][2] > 3 && tr_count > sgData[0][2]-2)
				r_lst.push(dictData[i][1]);
		}
	}
	const foo = new Set(r_lst);
	return (foo);
};

/*
line = refine.refine_String_Last(line);
line = refine.refine_String(line);
console.log(line);

console.log(rhyme_kr("무지개",line));
*/