hangul-search
Advanced tools
Comparing version 1.4.0 to 1.4.1
{ | ||
"name": "hangul-search", | ||
"version": "1.4.0", | ||
"version": "1.4.1", | ||
"description": "Json객체에서 한글 검색을 수행. 한글 초성 검색을 지원. Korean search within JSON objects. Supports Korean initial consonant search.", | ||
@@ -5,0 +5,0 @@ "main": "src/index.js", |
@@ -14,5 +14,8 @@ ## hansearch | ||
- 한글 초성 검색을 지원합니다. | ||
- 기본적으로 exact matching 으로 동작합니다. | ||
- 특수문자에 대한 검색을 지원합니다. (Contributions by [hwahyeon](https://github.com/hwahyeonhttps:/)) | ||
- 마지막 입력 문자를 분해하여 다음 문자열 검색에 사용합니다. 예) "많"을 입력한 경우 "만화" 도 함께 검색됩니다. | ||
- 사용자 입력 그대로 exact matching 검색이 가능합니다. (mode:"exact" 옵션항목 참고) | ||
- 기본적으로 자음 분해 결합을 통해 사용자의 입력 실수 대응 및 예측 검색을 수행합니다. 예) "얹"을 입력한 경우 "언제나"가 검색 결과로 도출. | ||
- 마지막 문자의 홑받침을 다음 문자 검색에 사용합니다. 예) "국"을 입력한 경우 "_국_" 와 "_구ㄱ_"로 검색을 수행. | ||
- 마지막 문자의 겹받침을 분해하여 다음 문자를 예측 검색 합니다. 예) "많" 입력시 "_많_", "_만_", "_만ㅎ_"로 검색을 수행. | ||
- 겹초성으로 입력된 경우 분해 검색을 수행합니다. 예) ㅍㄻㅌ 입력시 "_ㅍㄹㅁㅌ_" 로 검색 수행. | ||
- Typescript 를 지원하도록 구현하였습니다. | ||
@@ -59,3 +62,3 @@ - AMD, CJS 스펙을 모두 지원할 수 있도록 UMD 패턴으로 작성하였습니다. | ||
// 검색 수행 | ||
const result = hansearch(json, "ㅈ렬화"); | ||
const result = hansearch(json, "ㅈㅀ"); | ||
console.log(result); | ||
@@ -102,3 +105,3 @@ | ||
var result = hansearch(json, "ㅈ렬화"); | ||
var result = hansearch(json, "ㅈㅀ"); | ||
console.log(result); | ||
@@ -142,5 +145,5 @@ | ||
var options = { | ||
"mode" : "exact", | ||
"keys" : ["key1", "key2"] | ||
} | ||
mode: "exact", | ||
keys: ["key1", "key2"], | ||
}; | ||
var result = hansearch(json, "ㅈ렬화", options); | ||
@@ -159,7 +162,6 @@ ``` | ||
var keys = ["title", "users"]; | ||
var options = { "keys" : ["title", "users"] }; | ||
var options = { keys: ["title", "users"] }; | ||
var result = hansearch(json, "ㅈ렬화", keys); | ||
var result = hansearch(json, "ㅈ렬화", options); | ||
``` | ||
@@ -166,0 +168,0 @@ |
@@ -43,22 +43,21 @@ /*! | ||
// 사용자의 예상 기대 결과 도출을 위해 검색 키워드를 생성. 마지막 문자를 분해 조합. | ||
// 사용자의 예상 기대 결과 도출을 위해 검색 키워드를 생성. 자음 문자 분해 조합. | ||
const makeSearchWords = (keyWord = "") => { | ||
let keywords = [keyWord]; | ||
let keywords = []; | ||
let preCharacters = keyWord.slice(0, -1); // 마지막 문자를 제외한 모든 문자열 | ||
const lastCharacter = keyWord.slice(-1); // 마지막 문자 | ||
let preCharacters = keyWord.slice(0, keyWord.length - 1); // 마지막 문자를 제외한 모든 문자열 | ||
preCharacters = preCharacters | ||
.split("") | ||
.map((currentChar) => { | ||
if (MAP_DOUBLE_MOUM.hasOwnProperty(currentChar)) { | ||
// 앞 문자열에 겹초성만 있는 문자는 분해해서 조립 | ||
return MAP_DOUBLE_MOUM[currentChar]; | ||
} else { | ||
return currentChar; | ||
} | ||
}) | ||
.join(""); | ||
keywords.push(keyWord); // 사용자 입력 문자 그대로 추가 | ||
//keywords.push(preCharacters); | ||
const lastCharacter = keyWord.charAt(keyWord.length - 1); // 마지막 문자 | ||
if (preCharacters) { | ||
preCharacters = preCharacters | ||
.split("") | ||
.map((c) => (MAP_DOUBLE_MOUM.hasOwnProperty(c) ? MAP_DOUBLE_MOUM[c] : c)) | ||
.join(""); | ||
if (preCharacters !== preCharacters.split("").join("")) { | ||
keywords.push(preCharacters); // 초성 분해 결합 문자 추가 | ||
} | ||
} | ||
if (lastCharacter >= "가" && lastCharacter <= "힣") { | ||
@@ -73,12 +72,13 @@ // 모음이 포함된 경우 | ||
const jong_char = JONG_HANGUL[jong]; | ||
if (jong > 0) { | ||
if (MAP_DOUBLE_MOUM.hasOwnProperty(jong_char)) { | ||
// 겹받침인 경우 | ||
let result = johapHangul(cho_char, jung_char, MAP_DOUBLE_MOUM[jong_char][0]); | ||
keywords.push(preCharacters + result); | ||
keywords.push(preCharacters + result + MAP_DOUBLE_MOUM[jong_char][1]); | ||
const result = johapHangul(cho_char, jung_char, MAP_DOUBLE_MOUM[jong_char][0]); | ||
keywords.push(preCharacters + result); // 겹받침 분해 홑받침으로 조합해서 추가 | ||
keywords.push(preCharacters + result + MAP_DOUBLE_MOUM[jong_char][1]); // 겹받침 분해 홑받침 + 초성 문자 추가 | ||
} else { | ||
// 홑받침인 경우 | ||
keywords.push(preCharacters + johapHangul(cho_char, jung_char)); | ||
keywords.push(preCharacters + johapHangul(cho_char, jung_char) + jong_char); | ||
keywords.push(preCharacters + johapHangul(cho_char, jung_char)); // 초성+중성 문자 추가 | ||
keywords.push(preCharacters + johapHangul(cho_char, jung_char) + jong_char); // 초성+중성+초성 문자 추가 | ||
} | ||
@@ -89,7 +89,8 @@ } | ||
if (MAP_DOUBLE_MOUM.hasOwnProperty(lastCharacter)) { | ||
keywords.push(preCharacters + MAP_DOUBLE_MOUM[lastCharacter]); | ||
} else { | ||
keywords.push(preCharacters + lastCharacter); | ||
keywords.push(preCharacters + MAP_DOUBLE_MOUM[lastCharacter]); // 겹초성 분해 문자 추가 | ||
} | ||
} | ||
if (preCharacters + lastCharacter !== keyWord) { | ||
keywords.push(preCharacters + lastCharacter); // 초성 분해 + 마지막 문자 추가 | ||
} | ||
return keywords; | ||
@@ -120,4 +121,5 @@ }; | ||
} | ||
const regexArray = searchWords.map((word) => makeRegexByCho(word)).filter((regex) => regex); | ||
//console.log(searchWords, regexArray); | ||
console.log(searchWords, regexArray); | ||
@@ -124,0 +126,0 @@ let searchResult = jsonObj.filter((obj) => { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
20369
173
168