❀Nineteen Poor Moths

    tetrapod-klleon

    1.0.7Β β€’Β PublicΒ β€’Β Published

    icon

    Tetrapod.js var1

    이 ν”„λ‘œμ νŠΈλŠ” λ³€ν˜•λœ μš•μ„€ 단어λ₯Ό νŒŒμ•…ν•˜κ³  νƒμ§€ν•˜λŠ” 것을 λͺ©μ μœΌλ‘œ ν•˜λŠ” λͺ¨λ“ˆλ‘œ, Github μœ μ € hmmhmmhmm의 Tetrapod ν”„λ‘œμ νŠΈλ₯Ό ν¬ν¬ν•œ 뒀에 μˆ˜μ •ν•œ λͺ¨λ“ˆμž…λ‹ˆλ‹€. μ‚¬μš©μž Utolee90이 일뢀 λ‚΄μš©μ„ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.

    Tetrapod.js λŠ” λ³€ν˜•λœ μš•μ„€ 단어 ν‘œν˜„λ“€μ„ νŒŒμ•…ν•˜κ³  νƒμ§€ν•˜κΈ° μœ„ν•΄ 개발 되고 μžˆλŠ” λͺ¨λ“ˆν˜• ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. ν•œκ΅­μ–΄μ—μ„œ μ‘΄μž¬ν•˜λŠ” μš•μ„€ 단어듀을 μš°μ„ μ μœΌλ‘œ 탐지 λŒ€μƒμœΌλ‘œ μ •ν•˜μ—¬ 개발되고 있으며, ν–₯ν›„ λͺ¨λ“  μ–Έμ–΄μ—μ„œ λ³€ν˜•λœ μš•μ„€ ν‘œν˜„μ„ νƒμ§€ν•˜λŠ”λ° μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

    ν”„λ‘œμ νŠΈ μš©λ„

    이 ν”„λ‘œμ νŠΈλŠ” (μ£Ό)ν΄λ ˆμ˜¨μ—μ„œ μ œκ³΅ν•˜λŠ” μ˜μƒ 곡유 SNS Kamelo μ—μ„œ ν™œμš©ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

    λΌμ΄μ„ΌμŠ€

    핡심 λͺ¨λ“ˆμ€ MIT Licensed. μ›λ³Έμ˜ λΌμ΄μ„ μŠ€λ₯Ό κ·ΈλŒ€λ‘œ λ”°λ¦…λ‹ˆλ‹€. λ‹€λ§Œ μš•μ„€ 감지 λ°μ΄ν„°λŠ” λ³΄μ•ˆμ‚¬ν•­μœΌλ‘œ κ³΅κ°œλ˜μ§€ μ•Šμ„ μ˜ˆμ •μž…λ‹ˆλ‹€.

    ν”„λ‘œμ νŠΈ 상 탐지 μ•Œκ³ λ¦¬μ¦˜ ꡬ성

    Tetrapod.js μ—μ„œ μ‚¬μš©ν•˜λŠ” μš•μ„€ 탐지 μ•Œκ³ λ¦¬μ¦˜μ˜ ꡬ성은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    정상단어 λͺ©λ‘ ꡬ성

    • μ‹œλ°œμ κ³Ό 같은 λ‹¨μ–΄μ˜ μ˜€νƒμ§€λ₯Ό 막기 μœ„ν•΄μ„œ 사전에 λ¬Έμžμ—΄μ—μ„œ μ°Ύμ•„μ„œ μš•μ„€ νƒμ§€μ‹œ νƒμ§€λŒ€μƒμ—μ„œ μ œμ™Έμ‹œν‚¬ μš©λ„μ˜ 정상단어 λͺ©λ‘μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.

    μš•μ„€λ‹¨μ–΄ λͺ©λ‘ ꡬ성

    • μ—¬λŸ¬ μš•μ„€ λ‹¨μ–΄μ˜ λ³€ν˜•μ„ λͺ¨λ‘ νŒŒμ•…ν•˜κΈ° μœ„ν•΄μ„œ, 음운, 음절, μ–΄μ ˆ 3단계에 κ±Έμ³μ„œ 각 κΈ€μž μš”μ†Œλ“€μ˜ λ³€ν˜•μ„ λͺ¨λ‘ νŒŒμ•…ν•˜μ—¬μ„œ μš•μ„€ 단어 λͺ©λ‘μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ€ ν•˜λ‹¨μ— Bias κ΅¬μ„±λž€ μ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.

    (μΆ”κ°€) μ €μ†ν•œ 단어 λͺ©λ‘ ꡬ성

    • μš•μ„€λ‘œ λΆ„λ₯˜ν•˜κΈ° μ• λ§€ν•˜μ§€λ§Œ μ €μ†ν•œ ν‘œν˜„μ„ κ²€μΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μš•μ„€λ‹¨μ–΄μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ‹¨μˆœνžˆ 리슀트만 μ“Έ 뿐 μ•„λ‹ˆλΌ 이차원 배열을 ν†΅ν•œ μ‘°ν•©μœΌλ‘œλ„ μœ λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    (μΆ”κ°€) νŠΉμ •ν•œ 받침을 μ•…μš©ν•œ 단어 검색

    • γ…‚γ……, ㄹㅁ, γ„Ήγ„± 받침을 λ‚¨μš©ν•œ ν‘œν˜„μ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

    ν”„λ‘œμ νŠΈ 상 탐지 μ•Œκ³ λ¦¬μ¦˜ ꡬ성

    Tetrapod.js μ—μ„œ μ‚¬μš©ν•˜λŠ” μš•μ„€ 탐지 μ•Œκ³ λ¦¬μ¦˜μ˜ 진행과정은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    정상 단어 탐색 ν›„ 배제

    • λ©”μ‹œμ§€μ—μ„œ 정상단어λ₯Ό μ°Ύμ•„μ„œ ν•΄λ‹Ή λ¬Έμžμ—΄μ˜ μ‹œμž‘ μœ„μΉ˜μ™€ λλ‚˜λŠ” μœ„μΉ˜λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€. ν•΄λ‹Ή λ¬Έμžμ—΄ λ²”μœ„λŠ” 이후 μ•Œκ³ λ¦¬μ¦˜ νƒμ§€μ‹œ λ²”μœ„μ—μ„œ λ°°μ œλ©λ‹ˆλ‹€.

    λ©”μ‹œμ§€μ˜ Nμžλ‹¨μœ„ 뢄리

    • λͺ¨λ“  λ¬Έμžμ—΄μ„ μž„μ˜μ˜ κΈ€μž λ‹¨μœ„μ˜ 청크 λ©”μ‹œμ§€ 둜 λΆ„λ¦¬ν•΄μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ λ‹¨μœ„λŠ” 15자이며, μžμ„Έν•œ 것은 μ•„λž˜ APIλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

    ν•œ κΈ€μžμ”© μš•μ„€ 단어 탐색

    • κ°–μΆ”κ³  μžˆλŠ” λͺ¨λ“  μš•μ„€ 문자λ₯Ό κΈ€μžλ‹¨μœ„λ‘œ λͺ¨λ‘ λΆ„λ¦¬ν•©λ‹ˆλ‹€. κ·Έ ν›„ 청크 λ©”μ‹œμ§€μ— ν•΄λ‹Ή μš•μ„€ 문자의 κΈ€μžκ°€ μ‘΄μž¬ν•˜λŠ”μ§€, λͺ‡λ²ˆμ§Έ μœ„μΉ˜μ— μ‘΄μž¬ν•˜λŠ”μ§€λ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€.
    • λ§Œμ•½ λ¬Έμžλ“€μ΄ λͺ¨λ‘ μ‘΄μž¬ν•  경우 ν•΄λ‹Ή λ¬Έμžλ“€μ˜ μœ„μΉ˜λ₯Ό ν•΄λ‹Ή μš•μ„€ λ‹¨μ–΄μ˜ κΈ€μžμˆœμ„œλŒ€λ‘œ μ •λ ¬ν•©λ‹ˆλ‹€. μ΄λ•Œ λ§Œμ•½ μˆœμ„œκ°€ μΌκ΄€λ˜μ§€ μ•Šλ‹€λ©΄ κΈ€μžκ°€ μ„žμ—¬μžˆλŠ” κ²ƒμœΌλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€.
    • λ§Œμ•½ κΈ€μžκ°€ μ„žμ—¬μžˆλŠ” 경우 μš•μ„€ λ‹¨μ–΄μ˜ 사이에 μ™„μ„±λœ ν•œκΈ€ λ¬Έμžκ°€ μ‘΄μž¬ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•˜κ³  μ‘΄μž¬ν•œλ‹€λ©΄ 이λ₯Ό μš•μ„€ λͺ©λ‘μ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€. (γ„±, γ…™ λŠ” μ™„μ„±λœ ν•œκΈ€μ΄ μ•„λ‹ˆλ©° μ™„μ„±λœ ν•œκΈ€μ€ μœ λ‹ˆμ½”λ“œλ‘œ κ°€(0xAC00) ~ 힣(0xD7A3) μ‚¬μ΄μ˜ κΈ€μžλ₯Ό λœ»ν•©λ‹ˆλ‹€.) λ˜ν•œ μ™„μ„±ν˜• κΈ€μžμ΄λ”λΌλ„ 자음이 γ…‡ μΈκ²½μš°μ—λŠ” μš•μ„€ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 예: λ°”μ•„μ•„λ³΄μ˜€ 와 같이 μ΄μ–΄μ£ΌλŠ” 음의 경우 μš•μ„€ μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

    ν•œμ˜μžλ‘œ 된 μš•μ„€ 탐지 (자체 μΆ”κ°€κΈ°λŠ₯)

    • 자체적인 ν•œμ˜λ³€ν™˜ 맡을 μ΄μš©ν•΄μ„œ ν•œ/영 λ³€ν™˜μ„ μ΄μš©ν•œ λ©”μ‹œμ§€μ—λ„ μš•μ„€μ„ 탐지할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ wlfkfμ΄λΌλŠ” λ©”μ‹œμ§€λŠ” QWERTY μ˜μžνŒμ— λŒ€μ‘λ˜λŠ” ν•œκΈ€ λ‘λ²Œμ‹ 자판의 ν‚€λ₯Ό μž…λ ₯ν•˜λ©΄ μ§€λž„μ΄λΌλŠ” λ©”μ‹œμ§€κ°€ λ‚˜νƒ€λŠ”λ°, μ΄λŸ¬ν•œ μš•μ„€μ„ 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.

    개발 μ„±κ³Ό

    원 ν”„λ‘œμ νŠΈμ—μ„œ κ΅¬ν˜„λœ λͺ©ν‘œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

    • [x] κ΅­λ¦½κ΅­μ–΄μ›μ—μ„œμ˜ ν•œκ΅­μ–΄ 정상 단어 λͺ©λ‘ 확보
    • [x] 인터넷 μƒμ—μ„œ μ“°μ΄λŠ” μš•μ„€ 데이터 1μ°¨ μˆ˜μ§‘
    • [x] λ¬Έμžμ—΄ μƒμ—μ„œ 정상단어λ₯Ό μ°Ύμ•„μ„œ λͺ¨λ“  정상단어 μœ„μΉ˜λ₯Ό νŒŒμ•…ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
    • [x] κΈ€μžλ‹¨μœ„ μš•μ„€ 단어 탐지 μ•Œκ³ λ¦¬μ¦˜
    • [x] λ’€μ§‘νžˆκ±°λ‚˜ λ’€μ„žμΈ μš•μ„€ 단어 ν‘œν˜„μ˜ 경우 μ‚¬λžŒμ΄ 인지 κ°€λŠ₯ν•œ μˆ˜μ€€λ§Œμ„ μš•μ„€λ‘œ μ„ μ •ν•΄μ„œ μ°¨λ‹¨ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ μΆ”κ°€
    • [x] μš•μ„€λ‹¨μ–΄ λ§Œμ„ μ‚­μ œν•˜κ±°λ‚˜ νŠΉμ • 특수문자둜 λŒ€μΉ˜ν•˜λŠ” ν‘œν˜„ μ •μ • ν•¨μˆ˜
    • [x] μš•μ„€ λ‹¨μ–΄μ˜ λ³€ν˜• 예λ₯Ό 음운, 음절, μ–΄μ ˆ 3λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄μ„œ μ •λ¦¬ν•΄λ‚˜κ°ˆ 수 μžˆλŠ” λΆ„ν• λœ JSON 기반 파일 데이터 병합 체계
    • [x] λ°°μ—΄ν˜•νƒœλ‘œ 단어λ₯Ό μ „/ν›„ κ°’μœΌλ‘œ λ‚˜λˆ μ„œ ꡬ성할 수 μžˆλŠ” Bias 데이터 포멧 (예: λ°”λ₯Ό γ…‚/ㅏ 둜 λ‚˜λˆ„μ–΄μ„œ ν‘œν˜„ν•  수 있게 ν•˜λŠ” 체계λ₯Ό λœ»ν•©λ‹ˆλ‹€.)
    • [x] n차원 ν˜•νƒœλ‘œ μ€‘μ²©μ‹œν‚¬ 수 μžˆλŠ” Bias 데이터 포멧 ꡬ성 (λ°”/보 λΌλŠ” λ‹¨μ–΄μ˜ λ³€ν˜• 예λ₯Ό λͺ¨λ‘ κ΅¬ν• λ•Œ, λ³„λ„λ‘œ μ‘΄μž¬ν•˜λŠ” γ…‚/ㅏ 와 γ…‚/γ…— 데이터λ₯Ό μ—°κ²°μ‹œμΌœμ„œ κ΅¬μ„±μ‹œν‚¬ 수 μžˆλŠ” 체계λ₯Ό λœ»ν•©λ‹ˆλ‹€.)
    • [x] nμ°¨μ›μ˜ 데이터λ₯Ό 병합할 수 μžˆλŠ” Bias 데이터 포멧
    • [x] Bias 데이터 ν¬λ©§μ—μ„œμ˜ 음절 λ³€μˆ˜
    • [x] Bias 데이터 ν¬λ©§μ—μ„œμ˜ μ‘μš© ν•¨μˆ˜
    • [x] Bias 데이터 ν¬λ©§μ—μ„œμ˜ 자λͺ¨ν•©μ„± ν•¨μˆ˜
    • [x] Bias 데이터 ν¬λ©§μ—μ„œμ˜ 결과배제 ν•¨μˆ˜
    • [x] Bias 데이터 ν¬λ©§μ—μ„œ ν…ŒμŠ€νŠΈ 쀑 μ€‘λ³΅μƒμ„ λœ 단어 탐지 및 μ‚­μ œ ν•„ν„°
    • [ ] Bias 데이터 포멧의 단어 μžλ™ λ³€ν˜• νŒŒμ•… κ°œλ… μΆ”κ°€ (만λŠ₯λ³€ν˜•μΈμž)
    • [ ] 1μ°¨ μˆ˜μ§‘λœ μš•μ„€ λ°μ΄ν„°μ˜ Bias μž¬ν•΄μ„
    • [ ] Bias 데이터 포멧의 νŒ¨ν‚€μ§€ κ°œλ… μΆ”κ°€ (μš•μ„€λ‹¨μ–΄ / 성적단어 / 폭λ ₯성단어 / 약물성단어)
    • [ ] LZString 을 ν†΅ν•œ Bias λ°μ΄ν„°μ˜ minify ν™” 및 μ••μΆ• μΆ”μΆœ 및 λ©”λͺ¨λ¦¬ λ‘œλ“œ 체계
    • [ ] 전체 μš•μ„€ 단어 λͺ©λ‘μ„ 사전에 μ €μž₯ν•˜λŠ” ν˜•νƒœκ°€ μ•„λ‹Œ, μš•μ„€ 단어 탐지가 λ°œμƒν• λ•Œ ν•΄λ‹Ή 단어 λͺ©λ‘μ„ μ‹€μ‹œκ°„μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬μ„œ μ“°λ‹€κ°€, 이λ₯Ό λ©”λͺ¨λ¦¬μƒμ— LRU 캐싱 해놓고 μ”€μœΌλ‘œ 전체 데이터 μš©λŸ‰μ„ μ€„μ΄λŠ” 동적인 Bias 데이터 해석 체계
    • [x] 청크 λ©”μ‹œμ§€μ—μ„œ 청크 쀑간에 μš•μ„€μ΄ 걸릴 λ•Œ 감지 보완. (Half-nodeλ₯Ό μ΄μš©ν•΄ 쀑간에 λ…ΈνŠΈ 끊기둜 λ³΄μ™„ν–ˆμŒ.)
    • [x] 청크 λ©”μ‹œμ§€μ—μ„œ μš•μ„€ λ‹¨μ–΄μ˜ κΈ€μžκ°€ λ©”μ‹œμ§€ 상에 μžˆλŠ”μ§€ 확인할 λ•Œ μ€‘μ²©μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” κΈ€μžκ°€ μ‘΄μž¬ν•˜λŠ” 경우, 이λ₯Ό λͺ¨λ‘ μˆ˜μ§‘ν•œ ν›„ λͺ¨λ“  경우수λ₯Ό λ‹€ κ³„μ‚°ν•΄μ„œ μš•μ„€ κ²€μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„ (λΆ€λΆ„μ μœΌλ‘œ κ΅¬ν˜„)
    • [ ] 검색엔진 기반 μ›Ή 크둀링을 ν†΅ν•œ μš•μ„€ νƒμ§€μ‹œλ„ 및 λ³€ν˜•λ‹¨μ–΄ μˆ˜μ§‘μ‹œλ„
    • [ ] ν…ŒμŠ€νŠΈ νŽ˜μ΄μ§€ 및 ν…ŒμŠ€νŠΈ μ„œλ²„ ꡬ성
    • [ ] gpu.js 쉐이더 기반의 GPU 병렬 μ—°μ‚° 가속화 κ΅¬ν˜„ (λͺ¨λ“  μ²­ν¬λ©”μ‹œμ§€λ₯Ό 숫자 λ°°μ—΄ν™” ν•œ ν›„ 코어단에 이λ₯Ό 곡유된 λ©”λͺ¨λ¦¬ ν˜•νƒœλ‘œ μ „λ‹¬ν•˜κ³ , 숫자 λ°°μ—΄ν™” 된 μš•μ„€ λ¬Έμžλ“€μ„ μ½”μ–΄μ—κ²Œ μ „λ‹¬ν•˜λ©΄ 이λ₯Ό λͺ¨λ“  μ½”μ–΄ ν•˜λ‚˜ν•˜λ‚˜κ°€ 각각의 μˆ«μžλ°°μ—΄ 일치 유무λ₯Ό νŒŒμ•…ν•˜λŠ” ꡬ쑰)

    μ‚¬μš©κ°€λŠ₯ν•œ ν•¨μˆ˜

    Tetrapod.js

    find.js νŒŒμΌμ— import Tetrapod from '../tetrapod';라고 μž…λ ₯ν•˜μ‹  뒀에 λ‹€μŒκ³Ό 같은 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŽΈμ˜μƒ 클래슀 λͺ…인 Tetrapod.(ν•¨μˆ˜λͺ…) ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

    • 비속어 쑴재 μ—¬λΆ€ νŒλ‹¨ : Tetrapod.isBad(message, includeSoft=false)

      1. message ν•­μ—λŠ” λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. 결과값은 μ°Έ/거짓 쀑 ν•˜λ‚˜.
      2. includeSoft 뢀뢄에 trueλ₯Ό μž…λ ₯ν•˜λ©΄ 비속어뿐 μ•„λ‹ˆλΌ μ €μ†ν•œ ν‘œν˜„, λΆ€μ μ ˆν•œ 받침을 λ‚¨μš©ν•˜λŠ” ν‘œν˜„κΉŒμ§€ μ‘΄μž¬ν•˜λŠ”μ§€ 체크할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 비속어 갯수 μ„ΈκΈ° : Tetrapod.countBad(message, isStrong=false)

      1. message ν•­μ—λŠ” λ¬Έμžμ—΄μ„ μž…λ ₯ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
      2. 결과값은 {bad:(비속어 갯수),soft:(μ €μ†ν•œ ν‘œν˜„ 갯수),end:(λΆ€μ μ ˆν•œ λ°›μΉ¨ 갯수)} ν˜•μ‹μœΌλ‘œ 좜λ ₯λ©λ‹ˆλ‹€.
      3. isStrong값을 참으둜 μ§€μ •ν•˜λ©΄ λ‹€λ₯Έ 문자λ₯Ό ν•œκΈ€μžλͺ¨μ²˜λŸΌ μ΄μš©ν•΄μ„œ 우회적 ν‘œν˜„μ΄λ‚˜ (예: γ„±Hμƒˆ77|) 첫 자음 γ…‡, λ¬΄μ˜λ―Έν•œ λͺ¨μŒ γ…‘μ‚½μž… 및 λœμ†Œλ¦¬λ₯Ό μ΄μš©ν•œ μš°νšŒν‘œν˜„(λΈŒμ•„λ³΄ 썌끼)도 μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 비속어 ν‘œν˜„ 직접 μ°ΎκΈ° : Tetrapod.find(message, needMultipleCheck=false, splitCheck=15, qwertyToDubeol=false, stronger=false)

      1. message ν•­μ—λŠ” λ¬Έμžμ—΄μ„ 직접 μž…λ ₯ν•΄μ„œ μ‚¬μš©κ°€λŠ₯ν•©λ‹ˆλ‹€.
      2. 결과값은 {totalResult:[(비속어 단어 λͺ©λ‘)], softResult:[(μ €μ†ν•œ ν‘œν˜„ 단어 λͺ©λ‘)], endResult:[(λ°›μΉ¨ μ•…μš©ν•œ ν‘œν˜„ λͺ©λ‘)]} ν˜•μ‹μ˜ 였브젝트둜 좜λ ₯λ©λ‹ˆλ‹€.
      3. needMultiplecheckλ₯Ό true둜 μ§€μ •ν•˜λ©΄ 필터에 κ±Έλ¦¬λŠ” λͺ¨λ“  ν‘œν˜„μ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
      4. splitCheckλ₯Ό μž„μ˜μ˜ 숫자(예 20)둜 μ§€μ •ν•˜λ©΄ μ§€μ •ν•œ 숫자만큼 λ¬Έμžμ—΄μ„ λ‚˜λˆˆ λ’€ λ‚˜λˆˆ μ‘°κ°λ“€λ§Œ μ‘°μ‚¬ν•©λ‹ˆλ‹€. 기본값은 15이며, 0을 μ§€μ •ν•˜λ©΄ λ¬Έμžμ—΄μ„ λ‚˜λˆ„μ§€ μ•Šκ³  전체 λ¬Έμžμ—΄μ„ κ²€μ‚¬ν•©λ‹ˆλ‹€. isStrong을 μ§€μ •ν•˜λ©΄ ν™œμ„±ν™”λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
      5. qwertyToDubeolλ₯Ό true둜 μ§€μ •ν•˜λ©΄ ν•œ/μ˜μ „ν™˜λœ ν‘œν˜„μ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ μ‹œλ°œμ˜ QWERTY에 λŒ€μ‘λ˜λŠ” ν‘œν˜„μΈ tlqkf을 μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
      6. isStrong을 true둜 μ§€μ •ν•˜λ©΄ λ‹€λ₯Έ 문자λ₯Ό ν•œκΈ€μžλͺ¨μ²˜λŸΌ μ΄μš©ν•˜λŠ” 우회적 ν‘œν˜„μ΄λ‚˜ 첫자음 γ…‡, λ¬΄μ˜λ―Έν•œ λͺ¨μŒ γ…‘μ‚½μž… 및 λœμ†Œλ¦¬λ₯Ό μ΄μš©ν•œ 우회 ν‘œν˜„λ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 영자λ₯Ό ν•œκΈ€λ‘œ λ³€ν™”ν•΄μ„œ κ²€μ‚¬ν•˜λŠ” νŠΉμ„±μƒ μœ„μ˜ qwertyToDubeol와 같이 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    • 비속어 ν‘œν˜„ 숨기기 : Tetrapod.fix(message, replaceCharacter, condition) ν˜•νƒœλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

      1. message ν•­μ—λŠ” μš•μ„€μ΄ λ“€μ–΄κ°„ λ¬Έμžμ—΄μ„ 직접 μž…λ ₯ν•΄μ„œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
      2. replaceCharacter ν•­μ—λŠ” μš•μ„€μ„ 숨길 λ•Œ μ‚¬μš©ν•˜λŠ” 문자λ₯Ό 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 기본값은 "*"μž…λ‹ˆλ‹€.
      3. condition ν•­μ—λŠ” qwertyToDubeol, antispoof, dropDouble μ˜΅μ…˜ 쀑 ν•˜λ‚˜λ₯Ό μΌ€ 수 μžˆμŠ΅λ‹ˆλ‹€. 기본은 {qwertyToDubeol:false, antispoof:false, dropDouble:false, fixSoft:false}으둜 λͺ¨λ‘ λΉ„ν™œμ„±ν™”λœ μƒνƒœμž…λ‹ˆλ‹€.
      4. ν˜„μž¬λŠ” condition에 μ˜΅μ…˜μ„ μΌ€ 경우 qwertyToDubeol(qwerty자판->λ‘λ²Œμ‹ 자판으둜 ν•œμ˜λ³€ν™˜ ν›„ ν…ŒμŠ€νŠΈ), antispoof(μœ μ‚¬μžμŒ, μœ μ‚¬λͺ¨μŒ μ „λΆ€ 자λͺ¨λ‘œ λ°”κΎΌ ν›„ ν…ŒμŠ€νŠΈ), dropDouble(γ…‡ λ“€μ–΄κ°€μ„œ 음 늘리기 λ“± μž‘μ•„λƒ„)으둜 바뀐 후에 μž‘μ•„λ‚Έ λ©”μ‹œμ§€λ§Œ 체크 κ°€λŠ₯ν•©λ‹ˆλ‹€. μ›λ¬Έμ—μ„œ κ΅μ •ν•˜λŠ” μ˜΅μ…˜μ€ ν˜„μž¬ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
      5. condition 쑰건에 {fixSoft:true}라고 지정할 경우 비속어 뿐 μ•„λ‹ˆλΌ μ €μ†ν•œ ν‘œν˜„κ³Ό κ³Όλ„ν•œ κ²Ήλ°›μΉ¨ ν‘œν˜„λ„ μˆ¨κΉ€μ²˜λ¦¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
    • 비속어 ν‘œν˜„ 리슀트 뢈러였기 : Tetrapod.defaultLoadλ₯Ό μ‚¬μš©ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

    • νŒŒμ‹±ν•œ 비속어 ν‘œν˜„ 리슀트 μ €μž₯ν•˜κΈ° : Tetrapod.defaultSaveAllDataλ₯Ό μ‚¬μš©ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

    JSON 파일 μž‘μ„±λ°©λ²•

    기본적으둜 ./resource/dictionary 디렉토리에 μžˆλŠ” bad-words.json, normal-words.json, soft-search-words.json 이 μ„Έ νŒŒμΌμ„ κ²€μ‚¬ν•©λ‹ˆλ‹€.

    • bad-words.json - μ˜ˆμƒλ˜λŠ” 비속어λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. νŒŒμ‹±ν•  λ•Œ recursiveComponenent λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜κΈ°μ— [['λ°”','ba'],['보','bo']]처럼 μ•žλ‹¨μ–΄/λ’·λ‹¨μ–΄λ‘œ κ΅¬μ„±λœ κ΅¬μ„±μš”μ†Œλ„ μž‘μ„± κ°€λŠ₯ν•©λ‹ˆλ‹€.
      • badword : κΈ°λ³Έ 비속어 λͺ©λ‘
      • drug : μ•½λ¬Ό κ΄€λ ¨ 비속어 λͺ©λ‘
      • insult : λͺ¨μš•μ μΈ ν‘œν˜„ κ΄€λ ¨ 비속어 λͺ©λ‘
      • sexuality : 성적인 ν‘œν˜„ κ΄€λ ¨ 비속어 λͺ©λ‘
      • violence : 폭λ ₯적 ν‘œν˜„ κ΄€λ ¨ 비속어 λͺ©λ‘
      • macro : νŠΉμ • λ°˜λ³΅λ˜λŠ” νŒ¨ν„΄λ“€μ„ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ €μž₯ν•  λ•ŒλŠ” "맀크둜λͺ…":[(λ§€ν¬λ‘œμ— ν¬ν•¨λœ 리슀트)] ν˜•μ‹μœΌλ‘œ μ‚¬μš©ν•˜μ‹œλ©΄ 되며, 맀크둜λ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” 맀크둜 이름 μ•žμ— "*"ν‘œμ‹œλ₯Ό 뢙이면 λ©λ‹ˆλ‹€.
        • 맀크둜 μ˜ˆμ‹œ : {λ†ˆ:["λ†ˆ", "λ‡Έ", "λ„˜", "둬", "룜", "럼"]}
        • badword μž…λ ₯ν•  λ•Œ [[["개", "λ©μ²­ν•œ"], ["*λ†ˆ"]]]
        • νŒŒμ‹± κ²°κ³Ό :
      [
        "κ°œλ†ˆ",
        "κ°œλ‡Έ",
        "κ°œλ„˜",
        "개둬",
        "개룜",
        "개럼",
        "λ©μ²­ν•œλ†ˆ",
        "λ©μ²­ν•œλ‡Έ",
        "λ©μ²­ν•œλ„˜",
        "λ©μ²­ν•œλ‘¬",
        "λ©μ²­ν•œλ£œ",
        "λ©μ²­ν•œλŸΌ"
      ]
      
    • normal-words.json - μ˜ˆμƒλ˜λŠ” 정상 단어λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. tetrapod ν”„λ‘œμ νŠΈλŠ” λ©”μ‹œμ§€μ—μ„œ μ •μƒλ‹¨μ–΄λ‘œ μ˜ˆμƒλ˜λŠ” μœ„μΉ˜μ—μ„œλŠ” κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ” λ°©μ‹μž…λ‹ˆλ‹€. 정상단어에 λͺ¨μš•μ  ν‘œν˜„μ΄ 뢙은 경우 이 뢀뢄을 κ°μ§€ν•˜μ§€ μ•ŠκΈ° μœ„ν•œ μ˜ˆμ™Έ λͺ©λ‘μ„ μΆ”κ°€ν•˜λ €λ©΄ exception 뢀뢄에 리슀트λ₯Ό μΆ”κ°€ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
    • soft-search-words.json - μ˜ˆμƒλ˜λŠ” μ €μ†ν•œ ν‘œν˜„μ„ μ €μž₯ν•©λ‹ˆλ‹€. 단어λͺ©λ‘μ„ νŒŒμ‹±ν•  λ•Œ recursiveComponent λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λΉ„μ†μ–΄λ‘œ 보기 μ• λ§€ν•˜μ§€λ§Œ μ €μ†ν•œ ν‘œν˜„μ΄λΌ μ—¬κΈ°λŠ” ν‘œν˜„μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 μ €μ†ν•œ ν‘œν˜„μ€ μž‘μ§€ μ•Šμ§€λ§Œ μ˜΅μ…˜μ„ μ£Όμ–΄μ„œ μ €μ†ν•œ ν‘œν˜„λ„ μž‘μ•„λ‚Ό 수 있게 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μž‘μ„±μš© 기호

    ν•œκΈ€ 단어 이외에 *, !, ?등을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    • 맀크둜용 문자. μ•žμ—μ„œ 뢙일 λ•Œμ—λ§Œ μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
      • * 맀크둜 μ‚¬μš©ν•  λ•Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ£Όμ˜ν•  점은 맀크둜 이름은 띄어쓰기λ₯Ό ν•΄μ„œλŠ” μ•ˆ 되며, λ¦¬μŠ€νŠΈμ— λ…λ¦½λœ 단어 ν˜•μ‹μœΌλ‘œ λ“€μ–΄κ°€μ•Ό ν•©λ‹ˆλ‹€.
    • λŒ€μ²΄ 문자 - κΈ€μž 뒀에 문자λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κΈ€μž ν•˜λ‚˜λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • ! μ•žμ— μ˜€λŠ” κΈ€μžμ— λŒ€ν•΄ λ³€ν˜•νŒ¨ν„΄λ“€μ„ λͺ¨λ‘ κ°μ§€ν•©λ‹ˆλ‹€. Tetrapod.isKindChar ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ λ³€ν˜• νŒ¨ν„΄μ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ μ‹œ!의 경우 γ……μ˜ λœμ†Œλ¦¬μΈ γ…†μ΄λ‚˜ ㅣ와 발음이 μœ μ‚¬ν•œ 이쀑λͺ¨μŒμΈ γ…Ÿ, γ…’λ‘œ λ³€ν˜•λœ κΈ€μžλ„ μž‘μ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
      • + μž„μ˜μ˜ 받침을 ν‘œν˜„ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ "μ‹œ+"λŠ” "μ‹œ,식,μ‹Ÿ,..."등을 λͺ¨λ‘ ν¬ν•¨ν•©λ‹ˆλ‹€.
    • μ•„λ¬΄κ°œ 문자 - κΈ€μž 뒀에 문자λ₯Ό μ•„λ¬΄κ±°λ‚˜ ν‘œν˜„ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. λ¬΄μ œν•œμœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • ? μ•žμ— μ˜€λŠ” κΈ€μžμ— λŒ€ν•΄ 뒀에 아무 ν•œκΈ€ ν•œ 자λ₯Ό λͺ¨λ‘ κ°μ§€ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ 멍?청이라고 μž…λ ₯ν•  경우, λ©κ°œμ²­μ„ 감지할 수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 TetrapodλŠ” μ–΄λŠ 정도 κΈ€μž 사이가 λ²Œμ–΄μ§„ 것을 κ°μ§€ν•˜μ§€λ§Œ 이 문자λ₯Ό μ΄μš©ν•˜λ©΄ 문자 뒀에 μ–΄λ–€ ν•œκΈ€μ΄ 와도 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ΄μŠ€μΌ€μ΄ν”„ 문자 - 특수 기호λ₯Ό λ”°λ‘œ ν‘œν˜„ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
      • , TetrapodλŠ” ν•œκΈ€μžλͺ¨κ°€ λ”°λ‘œ λ–¨μ–΄μ Έ 있으면 μžλ™μœΌλ‘œ 합성을 ν•΄μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. 즉, 비속어 λ¦¬μŠ€νŠΈμ— ["γ„±γ…£λ ˆγ„±γ…£"]라고 μž…λ ₯ν•˜λ©΄ "기레기"λ₯Ό λΉ„μ†μ–΄λ‘œ μΈμ‹ν•©λ‹ˆλ‹€. κ΅¬νƒœμ—¬ μ›λž˜μ˜ ν‘œν˜„μΈ "γ„±γ…£λ ˆγ„±γ…£"λ₯Ό μΈμ‹ν•˜κΈ° μœ„ν•΄μ„œλŠ” "γ„±,γ…£λ ˆγ„±,γ…£"라고 μž…λ ₯ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
      • . μœ„μ˜ νŠΉμˆ˜λ¬Έμžκ°€ ν¬ν•¨λœ 리슀트λ₯Ό μž‘μ„±ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” μ΄μŠ€μΌ€μ΄ν”„ λ¬Έμžμž…λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ "κΈ°!" 자체λ₯Ό λΉ„μ†μ–΄λ‘œ μΈμ‹ν•˜κ³  싢을 λ•ŒλŠ” "κΈ°.!"이라고 μž…λ ₯ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

    Bias.js

    find.js νŒŒμΌμ— import Bias from '../bias/bias';λ₯Ό μž…λ ₯ν•˜μ‹  뒀에 Bias.buildHelper('(νŒ¨ν‚€μ§€λͺ…)', '(원본 단어λͺ…)', false)λ₯Ό μž…λ ₯ν•˜μ‹œλ©΄ μ‚¬μš©κ°€λŠ₯ν•©λ‹ˆλ‹€. JSON νŒŒμΌμ€ bias/build에 μ €μž₯λ©λ‹ˆλ‹€.

    νŒ¨ν‚€μ§€ μ œμž‘ 및 μ‚¬μš© 방법

    Tetrapod ν”„λ‘œμ νŠΈλŠ” 기본적으둜 kr-badword νŒ¨ν‚€μ§€λ₯Ό μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Bias.js νŒŒμΌμ„ μ΄μš©ν•˜λ©΄ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” λŒ€λ‘œ λ³€ν˜• νŒ¨ν„΄μ„ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

    1. μš°μ„  bias/source 디렉토리에 νŒ¨ν‚€μ§€λͺ…μœΌλ‘œ 디렉토리λ₯Ό μ œμž‘ν•©λ‹ˆλ‹€.
    2. κ·Έ λ‹€μŒ μ•„λž˜ 포맷 κ·œμΉ™μ„ μ΄μš©ν•΄μ„œ JSON νŒŒμΌμ„ μž‘μ„±ν•©λ‹ˆλ‹€.

    Bias 데이터 포멧(λ―Έμ™„μ„±)

    • μš•μ„€ λ‹¨μ–΄λŠ” μŒμš΄λ§ˆλ‹€ 발음이 μ•½κ°„μ”© λ‹¬λΌμ§€κ±°λ‚˜ λͺ¨μ–‘이 μ•½κ°„μ”© λ‹¬λΌμ§€λŠ” λ³€ν˜• 단어가 νŒŒμƒλ  수 μžˆμœΌλ―€λ‘œ, 각 μŒμš΄λ³„λ‘œ λͺ¨λ“  λ³€ν˜• κ°€λŠ₯ν•œ 쑰합을 μ•Œμ•„λ‚΄μ•Όν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό λͺ…ν™•ν•˜κ²Œ νŒŒμ•…ν•˜κΈ° μœ„ν•΄μ„œ λͺ¨λ“  음운과 음절, μ–΄μ ˆμ— 쓰일 수 μžˆλŠ” ꡬ쑰λ₯Ό 1차원 λ°°μ—΄ λ˜λŠ” 2차원 λ°°μ—΄λ‘œ ν‘œν˜„ν•˜μ—¬μ„œ λ³€ν˜•κ΅¬μ‘°λ₯Ό μ–΄μ ˆλ‹¨κ³„μ—μ„œ νŒŒμ•…ν•  수 μžˆλŠ” μ–΄λ– ν•œ 데이터 ꡬ쑰가 ν•„μš”ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œ 개발된 데이터 ꡬ쑰가 Bias 데이터 ν¬λ©§μž…λ‹ˆλ‹€.

    RecursiveList

    • Bias 데이터 포멧은 필터에 μ‚¬μš©λ  μš•μ„€λ₯Ό 2차원 배열을 μ€‘μ²©ν•΄λ‚˜κ°€λ©΄μ„œ 쑰합될 λ‹¨μ–΄μ˜ λͺ©λ‘μ„ ꡬ성할 수 있게 λ•μŠ΅λ‹ˆλ‹€. 2차원 배열은 before+after ꡬ쑰둜, 각 차원 데이터가 ν•©μ³μ Έμ„œ 단어λ₯Ό κ΅¬μ„±ν•˜κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό RecursiveList 라고 ν•˜λ©° λ‹€μŒκ³Ό 같은 μ˜ˆμ‹œν˜•νƒœλ‘œ ꡬ성될 수 μžˆμŠ΅λ‹ˆλ‹€.
    2차원 λ°°μ—΄ μ˜ˆμ‹œ
    let data = [[
        "λ°”",
        "ba"
    ],[
        "보",
        "bo"
    ]]
    let result = Bias.recursiveList(data)
    let resultCheck = [
        "바보",
        "λ°”bo",
        "ba보",
        "babo"
    ]
    console.log(result == resultCheck)
    // true
    μ€‘μ²©λœ 2차원 λ°°μ—΄ μ˜ˆμ‹œ

    RecursiveList λ‘œλŠ” 자음과 λͺ¨μŒμ˜ λ³€ν˜•κ³Όμ •μ„ μ„ΈλΆ„ν™”ν•΄μ„œ λͺ…μ‹œν•˜λŠ”λ° μ ν•©ν•œ ꡬ쑰λ₯Ό κ°–μΆ”κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 자음 λͺ¨μŒμ„ ν•©μ„±ν•΄μ„œ μ™„μ„±λœ ν•œκΈ€λ¬Έμžλ‘œ ν•©μΉœλ‹€λ˜μ§€, 자음과 λͺ¨μŒμ„ μž¬ν™œμš©ν•  수 μžˆλŠ” μ–΄λ– ν•œ κ΅¬μ‘°λŠ” RecursiveComponent μ—μ„œ λ‹€λ£Ήλ‹ˆλ‹€.

    let data = [[
        [[
            'γ…‚',
            'γ…ƒ'
        ],[
            'ㅏ',
            'γ…‘'
        ]],
        "ba"
    ],[
        "보",
        "bo"
    ]]
    let result = Bias.recursiveList(data)
    let resultCheck = [
        "ㅂㅏ보",
        "ㅂㅑ보",
        "ㅃㅏ보",
        "ㅃㅑ보",
        "ㅂㅏbo",
        "γ…‚γ…‘bo",
        "ㅃㅏbo",
        "γ…ƒγ…‘bo",
        "ba보",
        "babo"
    ]
    console.log(result == resultCheck)
    // true

    RecursiveComponent (λ―Έμ™„μ„±)

    RecursiveComponent λŠ” RecursiveList 의 μž¬μ‚¬μš©μ„±μ„ 높이고 λ°°μ—΄ μƒμ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ 뢀가적인 ν•¨μˆ˜κ°œλ…μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

    λ³€μˆ˜ 및 μ½”λ“œ 뢄리

    RecursiveComponent λŠ” λ³€μˆ˜μ™€ μ½”λ“œκ°€ μ‘΄μž¬ν•˜λ©°, 자음과 λͺ¨μŒ 같이 ν•œκΈ€λ¬Έμžμ˜ μ΅œμ†Œ λ‹¨μœ„μΈ 음운 을 RecursiveList 둜 ν‘œν˜„ν•  λ•Œ μž¬ν™œμš©μ„±μ„ 높이기 μœ„ν•΄μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©°, ν•΄λ‹Ή μŒμš΄λ“€λ‘œ μ–΄λ– ν•œ μ΅œμ’…μ μΈ μŒμ ˆμ„ ꡬ성할 λ•Œ μ½”λ“œ λ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

    자유둜운 JSON νŒŒμΌκ΅¬μ„±

    RecursiveComponent λ₯Ό ꡬ성할 λ•Œ ν•œκ΅­μ–΄μ˜ 경우 음운, 음절, μ–΄μ ˆ 의 ν˜•νƒœλ‘œ ꡬ성될 수 μžˆμ§€λ§Œ, ν–₯ν›„ 개발 κ³Όμ •μ—μ„œ μƒˆλ‘œμš΄κ΅¬μ‘°κ°€ ν•„μš”ν•˜κ±°λ‚˜, μ°¨ν›„ λ‹€λ₯Έ 언어에 ν™•μž₯ν˜•νƒœλ‘œ λ‹€λ₯Έ ꡬ쑰λ₯Ό μ·¨ν•΄μ•Όν•  κ°€λŠ₯성이 μžˆκΈ°μ—, 보닀 μœ μ—°ν•˜κ²Œ 데이터λ₯Ό 뢄리해야할 ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œ JSON ν˜•νƒœλ‘œ 데이터λ₯Ό ν‘œν˜„ν•  수 있게 ν—ˆμš©ν•˜κ³  있으며, JSON λ°μ΄ν„°λŠ” ν•΄λ‹Ή μ†ŒμŠ€ν΄λ” μ•ˆμ—λ§Œ μžˆλ‹€λ©΄ 내뢀에 μ–Όλ§ˆλ‚˜ μ€‘μ²©λœ ν΄λ”μ•„λž˜μ— JSON파일이 μ‘΄μž¬ν•˜λ˜, μ–΄λ–€ μ΄λ¦„μœΌλ‘œ 폴더가 μ‘΄μž¬ν•˜λ˜, μ–΄λ–€ μ΄λ¦„μœΌλ‘œ JSON 파일이 μ‘΄μž¬ν•˜λ˜ 이λ₯Ό λͺ¨λ‘ μˆ˜μ§‘ν•΄μ„œ ꡬ성할 수 μžˆκ²Œλ” RecursiveComponent λ₯Ό κ΅¬μ„±ν•˜μ˜€κ³ , 이λ₯Ό ν†΅ν•΄μ„œ 자유둭게 데이터 λͺ…μΉ­ λΆ€μ—¬λ₯Ό ν•˜κ³  자유둜운 데이터 μΉ΄ν…Œκ³ λ¦¬ λΆ€μ—¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    JSONλ‚΄μ—μ„œμ˜ λ³€μˆ˜ ꡬ성 예

    JSON μ—μ„œ 객체λ₯Ό ν•˜λ‚˜ 생성후 κ·Έ μ•ˆμ— var λΌλŠ” μ΄λ¦„μ˜ 객체λ₯Ό ν•˜λ‚˜ λ‹΄μœΌλ©΄, κ·Έ var 객체 μ•ˆμ— λ³€μˆ˜λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. ν•œκ΅­μ–΄ λ°μ΄ν„°μ˜ κ²½μš°μ—” 이λ₯Ό ν†΅ν•΄μ„œ 음운 데이터λ₯Ό κ΅¬μ„±ν•˜λ©°, 이 κ³Όμ •μ—μ„œ ν•œ 음운의 λ°œμŒλ³€ν˜• κ³Ό λͺ¨μ–‘λ³€ν˜• 데이터λ₯Ό RecursiveComponent 둜 λͺ¨λ‘ κ΅¬μ„±ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ κ΅¬μ„±λœ γ…‚ 의 음운 데이터화 μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    {
        "var": {
            "γ…‚_λ°œμŒλ³€ν˜•": [
                "γ…‚",
                "γ…ƒ",
                "ㅍ"
            ],
            "γ…‚_λͺ¨μ–‘λ³€ν˜•": [
                "γ…‚",
                "γ…ƒ",
                "ㅍ",
                "b",
                "f"
            ]
        }
    }
    JSONλ‚΄μ—μ„œ λ³€μˆ˜ κ°„ μ°Έμ‘°

    JSON ν˜•νƒœλ‘œ Bias 데이터λ₯Ό ꡬ성할 λ•Œ λ³€μˆ˜λ₯Ό ꡬ성할 수 μžˆλŠ”λ°, 이 λ³€μˆ˜ λ‚΄μ—μ„œ λ‹€λ₯Έ λ³€μˆ˜λ₯Ό μ¨μ•Όν•˜λŠ” 상황이 생길 수 μžˆμŠ΅λ‹ˆλ‹€. ν•œκ΅­μ–΄λŠ” 주둜 음절 데이터 κ΅¬μ„±μ‹œ 음운 λ³€μˆ˜λ₯Ό λΆˆλŸ¬μ™€μ•Όν•¨κ³Ό λ™μ‹œμ— μžμ‹ λ„ λ³€μˆ˜μ—¬μ•Όν•˜λŠ” 상황이 λ°œμƒν•˜λŠ”λ°, 이런 상황을 μœ„ν•΄μ„œ λ³€μˆ˜κ°€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λŠ” RecursiveList λ₯Ό μ‚¬μš©ν• λ•Œ μš”μ†Œ μ•žμ— *λ₯Ό λΆ™μ—¬μ„œ μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή μœ„μΉ˜μ— λ³€μˆ˜ 데이터가 μ°Έμ‘°λ©λ‹ˆλ‹€. 음절 데이터 ꡬ성 μ‹œ 자음과 λͺ¨μŒμ„ ν•©μ³μ„œ μ™„μ„±λœ ν•œκΈ€ κΈ€μžλ₯Ό λ§Œλ“€μ–΄μ•Όν•˜λŠ” κ²½μš°κ°€ μƒκΈ°λŠ”λ°, 이럴 λ•Œλ₯Ό μœ„ν•œ 자λͺ¨ν•©μ„± ν•¨μˆ˜κΈ°λŠ₯ λ˜ν•œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 자λͺ¨λ₯Ό ν•©μ„±ν•΄μ„œ μ™„μ„±λœ ν•œκΈ€ κΈ€μžλ₯Ό λ§Œλ“€μ§€ μ•Šκ³  자λͺ¨λ₯Ό 각각 λΆ„λ¦¬λœ κΈ€μžμ²˜λŸΌ μ·¨κΈ‰ν•˜λŠ” 것은 단어병합 ν•¨μˆ˜ 라고 ν•©λ‹ˆλ‹€. 기본적으둜 RecursiveList λŠ” 단어병합 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μž‘λ™λ˜μ§€λ§Œ, 자λͺ¨ν•©μ„±κ³Ό 차이λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ ν•¨μˆ˜λͺ…을 ν‘œκΈ°ν•΄μ„œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

    λ³€μˆ˜κ°„ μ°Έμ‘° 및 ν•¨μˆ˜ μ‚¬μš© 예
    {
        "var": {
            "μ‹œ": [
                {
                    "type": "단어병합",
                    "data": [[
                        "*γ……_λͺ¨μ–‘λ³€ν˜•"
                    ], [
                        ""
                    ]]
                },
    
                {
                    "type": "자λͺ¨ν•©μ„±",
                    "data": [
                        [
                            "γ……",
                            "γ…†"
                        ], [
                            "*γ…£_λ°œμŒλ³€ν˜•"
                        ]
                    ],
                    "exclude": ["μ‡ "]
                }
            ]
        }
    }
    단어병합 ν•¨μˆ˜ 및 μ½”λ“œ ꡬ성 예

    code λŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μ΅œμ’…μ μœΌλ‘œ μ •μ˜λ  데이터λ₯Ό μ •μ˜ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€. ν•œκΈ€μ—μ„œλŠ” μ–΄μ ˆ 을 정리할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. μ΅œμ’…μ μœΌλ‘œ μ‚°μΆœλœ κ²°κ³Όλ¬Ό 쀑 λ°°μ œν•˜κ³  싢은 단어λ₯Ό exclude 뢀뢄에 μž…λ ₯ν•΄μ£Όλ©΄ ν•΄λ‹Ή λ‹¨μ–΄λŠ” κ²°κ³Όλ¬Όμ—μ„œ μ‚­μ œλœμ±„λ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€.

    {
        "code": [
    
            {
                "type": "단어병합",
                "data": [[
                    "*λ°”"
                ],[
                    "*보"
                ]],
                "exclude": [
                    "babo"
                ]
            }
    
        ]
    }

    μ£Όμ˜μ‚¬ν•­

    λ‹¨μ–΄λ³‘ν•©μ‹œ μ£Όμ˜μ‚¬ν•­
    • 단어병합 ν•¨μˆ˜λŠ” ν•œκΈ€ κΈ€μž 자λͺ¨μ— 각각 ν•œκΈ€μžμ”©μ„ ν• λ‹Ήν•΄μ„œ λ³‘ν•©ν•˜λŠ” ν•¨μˆ˜λ₯Ό λœ»ν•©λ‹ˆλ‹€. (예: ㅂㅏㅂㅗ-> ㅂㅏㅂㅗ)
    • 자음만으둜 μš•μ„€κ°€ 될 수 μžˆλŠ” μš•μ„€μ˜ κ²½μš°μ—” λ‹¨μ–΄λ³‘ν•©μ‹œ λͺ¨μŒμ„ μ ˆλŒ€ μΆ”κ°€λ‘œ ν‘œκΈ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • λΆˆν•„μš”ν•œ λͺ¨μŒμ„ μΆ”κ°€ν•˜λ©΄ λΆˆν•„μš”ν•œ μš©λŸ‰μ¦κ°€μ™€ μ²˜λ¦¬μ†λ„ 지연을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.
    자λͺ¨ν•©μ„±μ‹œ μ£Όμ˜μ‚¬ν•­
    • 자λͺ¨ν•©μ„± ν•¨μˆ˜λŠ” ν•œκΈ€ κΈ€μž 자λͺ¨λ₯Ό μ΅œλŒ€ν•œ ν•œκΈ€μžλ‘œ λͺ°μ•„μ„œ λ³‘ν•©ν•˜λŠ” ν•¨μˆ˜λ₯Ό λœ»ν•©λ‹ˆλ‹€. (예: ㅂㅏㅂㅗ-> 바보)
    • γ…‚γ…—γ…‘ 와 같이 ν•œκΈ€μžλ‘œ 합성될 수 μ—†λŠ” 단어 합성을 μ ˆλŒ€μ μœΌλ‘œ ν”Όν•΄μ•Όν•©λ‹ˆλ‹€.

    Install

    npm i tetrapod-klleon

    DownloadsWeekly Downloads

    0

    Version

    1.0.7

    License

    MIT

    Unpacked Size

    472 kB

    Total Files

    23

    Last publish

    Collaborators

    • utolee90