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"
            ]
        }

    ]
}

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

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

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.7
    4
    • latest

Version History

Package Sidebar

Install

npm i tetrapod-klleon

Weekly Downloads

4

Version

1.0.7

License

MIT

Unpacked Size

472 kB

Total Files

23

Last publish

Collaborators

  • utolee90