π Improved swear word detection module
Tetrapod.js λ λ³νλ μμ€ λ¨μ΄ ννλ€μ νμ νκ³ νμ§νκΈ° μν΄ κ°λ° λκ³ μλ λͺ¨λν νλ‘κ·Έλ¨μ λλ€. νκ΅μ΄μμ μ‘΄μ¬νλ μμ€ λ¨μ΄λ€μ μ°μ μ μΌλ‘ νμ§ λμμΌλ‘ μ νμ¬ κ°λ°λκ³ μμΌλ©°, ν₯ν λͺ¨λ μΈμ΄μμ λ³νλ μμ€ ννμ νμ§νλλ° μ¬μ©λ μ μμ΅λλ€.
νμ¬ μ΄κΈ° κ°λ° μ§ν μ€μ μλ νλ‘μ νΈμ λλ€.
λμ²΄λ‘ λΆμκΈ°κ° μ’μ§ μμΌλ©΄, μΈμ΄ λν κ·Έλ κ² λλ€. (When the general atmosphere is bad, language must suffer)
μΈν°λ· μμμ λ€μκ° λͺ¨μ¬μ λν μ€ λΆμκΈ°κ° λλΉ μ§κ±°λ μ¬ν λ΄ λΆμκΈ°κ° λμκ² λλ©΄, μ΄μλ°λΌ μ¬λλ€μ΄ μ¬μ©νλ μΈμ΄ λν 과격νκ² λκ±°λ μμ€λ μ μν λ¨μ΄λ₯Ό μμ΄ μ¬μ©νλ μ¬λλ€μ΄ λ±μ₯νκ² λ©λλ€. μ΄λ¬ν μν©μ κ·Όλ³Έμ μμΈμ μ¬νμ λ¬Έμ μΌ μλ, κ°μΈμ λ¬Έμ μΌ μλ μμ΅λλ€. μ΄λ¬ν ννμ λΉμ¬μμ κ°μ μ λ΄κ³ μμΌλ©° μ΄λ₯Ό λ³Έ μ¬λλ€ λν κ°μ μ΄ μνκ² λλ κ²½μ°κ° μκΉλλ€.
μκ°μ΄ μΈμ΄λ₯Ό μ€μΌμν¨λ€λ©΄, μΈμ΄ μμ μκ°μ μ€μΌμν¬ μ μλ€. (If thought corrupts language, language can also corrupt thought.)
μΈμ΄λ κ°μ μ μ€μ μ μλ 맀κ°μ²΄λ‘μ¨, μ΄λ ν μΈμ΄μ ννμ λ³΄κ³ κΈ°λΆμ΄ λμκ² λ§λλ κ² λΏλ§ μλλΌ, μ΄λ ν κ°μ μ μ λ¬νκΈ° μν λͺ©μ λ§μ μν΄μ μ¬νμ μΌλ‘ κ°μΈ λλ μ§λ¨μ μν΄μ λͺ¨λκ° μ¬μ©νλ μΈμ΄κ° λ³νλ μ μμ΅λλ€. κ·Έλ κ² μΈμ΄μ λ΄κΈ°λ κ°μ μλ μ±μ μΈ κ°μ μ΄ λ΄κΈΈ μλ, νλ ₯μ μΈ κ°μ μ΄ λ΄κΈΈ μλ μμΌλ©° κ·Έ μ νμ λ§€μ° λ€μν©λλ€.
νκ΅μ΄λ μμκ³Ό λͺ¨μμ λͺ¨μμ μΈ μ μλ λͺ¨μμ°κΈ°κ° κ°λ₯ν μ μμ κΈ°μ‘΄ λ€λ₯Έ μΈμ΄κΆκ³Όλ λ€λ₯΄κ² μ΄λ ν λ¨μ΄κ° λ³νλμ΄ μκΈΈ μ μλ νμλ¨μ΄μ μκ° λ§€μ° λ§μ΄ μ‘΄μ¬ν μ μμΌλ©°, μ΄λ κ² λ³ν & νμλ μμ€ λ¨μ΄λ₯Ό κΈ°κ³μ μΌλ‘ νμ§νκΈ° λ§€μ° μ΄λ €μ΄ ꡬ쑰λ₯Ό κ°μΆκ³ μμ΅λλ€.
μμ μ΄ μ°λ μΈμ΄λ₯Ό κ°κ²°νκ² νλ€λ©΄, κ°μ₯ μ΄λ¦¬μμ ν΅μ€λ‘λΆν° μμ λ‘μμ§ μ μλ€. λΆνμν κ΄μ©μ΄λ₯Ό μΈ μ μμΌλ©°, μ΄λ¦¬μμ ννμ μ°λ©΄ κ·Έ μ΄λ¦¬μμμ΄ μ€μ€λ‘μκ²λ λΆλͺ ν λλ¬λ 보μ΄κ² λλ€. (If you simplify your English, you are freed from the worst follies of orthodoxy. You cannot speak any of the necessary dialects, and when you make a stupid remark its stupidity will be obvious, even to yourself.)
μ΄ νλ‘μ νΈμ λͺ©νλ μΈν°λ· μμμ λ²λνλ μμ€μ΄ 무λΆλ³νκ² νΌμ§λ κ²μ λ°©μ§ν μ μλ μ΄λ ν λ°©νμ μ κ°μ λͺ¨λμ κ°λ°νλ κ²μ λλ€. λͺ¨λμ΄ λ§μ κ³³μμ μ¬μ©λλλ‘ νλ κ²μ λͺ©μ μΌλ‘ νκΈ°μ μ΄ νλ‘μ νΈμ μ μκΆμ Copyleft λ‘ κ΅¬μ±λλ©° μμ μ λΉμμ μ ꡬλΆμ κ°λ¦¬μ§ μκ³ μ΄λ ν μλΉμ€λ 무λ£λ‘ μμ λ‘μ΄ μ¬μ©μ΄ κ°λ₯νκ²λ νμμ΅λλ€.
MIT Licensed
κΈ°μ‘΄μ νν°λ§μ λ¬Έμ₯ λ¨μλ‘ μμ€ λ¬Έμκ° λ¬Έμμ΄ μμ μ‘΄μ¬νλμ§ λ§μ νμΈν©λλ€. κ°λ Ή λ°λ³΄
λΌλ μμ€λ₯Ό μ°¨λ¨νλ € ν λ μ΄μ©μκ° μλ
λ°λ³΄μΌ
λΌλ λ©μΈμ§λ₯Ό μ
λ ₯νλ€λ©΄, λ°λ³΄
λΌλ λ¬Έμ₯μ΄ μ‘΄μ¬νλ κ²½μ°μ κ°μ΄, λ³νλμ§ μμ μμ€μ΄ μ‘΄μ¬νλ λ©μμ§μ νν΄μλ§ νμ§κ° κ°λ₯ν©λλ€. κ·Έλ¬λ μλμ κ°μ λ³νμ λν΄μλ λμ²νμ§ λͺ»ν©λλ€.
μλ
λ°111보μΌ
, μλ
λ°μμμ보μΌ
μλ
λΉ μλ½μ€μΌ!
, μλ
ba보μΌ!
κ°μΎνͺλλΆ
μ λ° μ’ μ
λ₯μ³!
=> μ λ° μ’ μ
μ³λ₯!
λν μμ€λ₯Ό μΌλΆ ν¬ν¨νκ³ μμ§λ§ μ μμ μΌλ‘ μ°μΌ μ μλ λ¨μ΄λ€μ΄ μ‘΄μ¬νμ¬ μΌλΆ ννμ μ€νμ§ν νλ₯ μ λμ΄κΈ°λ ν©λλ€.
κ·Έ μ¬κ±΄μ μλ°μ μ Aμ¨μλ€.
Tetrapod.js μ μ΄λ¬ν μμ€ νμ§ μκ³ λ¦¬μ¦μ νκ³λ₯Ό 극볡νκΈ°μν΄μ, μ μλ¨μ΄λ₯Ό λ¨Όμ μ°Ύμμ νμ§ λ²μμμ λ°°μ νλ€μ, μμ€ λ¨μ΄λ₯Ό ν κΈμ μ© μ‘΄μ¬μ¬λΆλ₯Ό νμ
ν©λλ€. λν νκ΅μ΄ μμ€μ μμ§νκ³ ν΄λΉ μμ€μ λ³νμ νμ μμ΄
, μμ
, μ΄μ
3λ¨κ³μ κ±Έμ³μ κ°λ₯ν λͺ¨λ λ³νκ°λ₯ν ννλ₯Ό νμ
ν©λλ€.
Tetrapod.js μμ μ¬μ©νλ μμ€ νμ§ μκ³ λ¦¬μ¦μ ꡬμ±μ λ€μκ³Ό κ°μ΅λλ€.
μλ°μ
κ³Ό κ°μ λ¨μ΄μ μ€νμ§λ₯Ό λ§κΈ° μν΄μ μ¬μ μ λ¬Έμμ΄μμ μ°Ύμμ μμ€ νμ§μ νμ§λμμμ μ μΈμν¬ μ©λμ μ μλ¨μ΄ λͺ©λ‘μ ꡬμ±ν©λλ€.μμ΄
, μμ
, μ΄μ
3λ¨κ³μ κ±Έμ³μ κ° κΈμ μμλ€μ λ³νμ λͺ¨λ νμ
νμ¬μ μμ€ λ¨μ΄ λͺ©λ‘μ ꡬμ±ν©λλ€. ν΄λΉ λ΄μ©μ νλ¨μ Bias ꡬμ±λ μμ μμΈν μ€λͺ
ν©λλ€.Tetrapod.js μμ μ¬μ©νλ μμ€ νμ§ μκ³ λ¦¬μ¦μ μ§νκ³Όμ μ λ€μκ³Ό κ°μ΅λλ€.
γ±
, γ
λ μμ±λ νκΈμ΄ μλλ©° μμ±λ νκΈμ μ λμ½λλ‘ κ°
(0xAC00) ~ ν£
(0xD7A3) μ¬μ΄μ κΈμλ₯Ό λ»ν©λλ€.) λν μμ±ν κΈμμ΄λλΌλ μμμ΄ γ
μΈκ²½μ°μλ μμ€ μμΈμ²λ¦¬λ₯Ό νμ§ μμ΅λλ€. μ: λ°μμλ³΄μ€ μ κ°μ΄ μ΄μ΄μ£Όλ μμ κ²½μ° μμ€ μ²λ¦¬κ° νμν©λλ€.
let data = [[
"λ°",
"ba"
],[
"보",
"bo"
]]
let result = Bias.recursiveList(data)
let resultCheck = [
"λ°λ³΄",
"λ°bo",
"ba보",
"babo"
]
console.log(result == resultCheck)
// true
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 λ RecursiveList μ μ¬μ¬μ©μ±μ λμ΄κ³ λ°°μ΄ μμμ μ¬μ©κ°λ₯ν λΆκ°μ μΈ ν¨μκ°λ μ μ 곡ν©λλ€.
RecursiveComponent λ λ³μ
μ μ½λ
κ° μ‘΄μ¬νλ©°, μμκ³Ό λͺ¨μ κ°μ΄ νκΈλ¬Έμμ μ΅μ λ¨μμΈ μμ΄
μ RecursiveList λ‘ ννν λ μ¬νμ©μ±μ λμ΄κΈ° μν΄μ λ³μ
λ₯Ό μ¬μ©νλ©°, ν΄λΉ μμ΄
λ€λ‘ μ΄λ ν μ΅μ’
μ μΈ μμ
μ ꡬμ±ν λ μ½λ
λ₯Ό ꡬμ±ν©λλ€.
RecursiveComponent λ₯Ό ꡬμ±ν λ νκ΅μ΄μ κ²½μ° μμ΄
, μμ
, μ΄μ
μ ννλ‘ κ΅¬μ±λ μ μμ§λ§, ν₯ν κ°λ° κ³Όμ μμ μλ‘μ΄κ΅¬μ‘°κ° νμνκ±°λ, μ°¨ν λ€λ₯Έ μΈμ΄μ νμ₯ννλ‘ λ€λ₯Έ ꡬ쑰λ₯Ό μ·¨ν΄μΌν κ°λ₯μ±μ΄ μκΈ°μ, λ³΄λ€ μ μ°νκ² λ°μ΄ν°λ₯Ό λΆλ¦¬ν΄μΌν νμκ° μμ΅λλ€. μ΄λ₯Ό μν΄μ JSON ννλ‘ λ°μ΄ν°λ₯Ό ννν μ μκ² νμ©νκ³ μμΌλ©°, JSON λ°μ΄ν°λ ν΄λΉ μμ€ν΄λ μμλ§ μλ€λ©΄ λ΄λΆμ μΌλ§λ μ€μ²©λ ν΄λμλμ JSONνμΌμ΄ μ‘΄μ¬νλ, μ΄λ€ μ΄λ¦μΌλ‘ ν΄λκ° μ‘΄μ¬νλ, μ΄λ€ μ΄λ¦μΌλ‘ JSON νμΌμ΄ μ‘΄μ¬νλ μ΄λ₯Ό λͺ¨λ μμ§ν΄μ ꡬμ±ν μ μκ²λ RecursiveComponent λ₯Ό ꡬμ±νμκ³ , μ΄λ₯Ό ν΅ν΄μ μμ λ‘κ² λ°μ΄ν° λͺ
μΉ λΆμ¬λ₯Ό νκ³ μμ λ‘μ΄ λ°μ΄ν° μΉ΄ν
κ³ λ¦¬ λΆμ¬κ° κ°λ₯ν©λλ€.
JSON μμ κ°μ²΄λ₯Ό νλ μμ±ν κ·Έ μμ var
λΌλ μ΄λ¦μ κ°μ²΄λ₯Ό νλ λ΄μΌλ©΄, κ·Έ var
κ°μ²΄ μμ λ³μλ₯Ό μμ±ν μ μμ΅λλ€. νκ΅μ΄ λ°μ΄ν°μ κ²½μ°μ μ΄λ₯Ό ν΅ν΄μ μμ΄
λ°μ΄ν°λ₯Ό ꡬμ±νλ©°, μ΄ κ³Όμ μμ ν μμ΄
μ λ°μλ³ν
κ³Ό λͺ¨μλ³ν
λ°μ΄ν°λ₯Ό RecursiveComponent λ‘ λͺ¨λ ꡬμ±ν©λλ€. μ΄λ κ² κ΅¬μ±λ γ
μ μμ΄ λ°μ΄ν°ν μμλ λ€μκ³Ό κ°μ΅λλ€.
{
"var": {
"γ
_λ°μλ³ν": [
"γ
",
"γ
",
"γ
"
],
"γ
_λͺ¨μλ³ν": [
"γ
",
"γ
",
"γ
",
"b",
"f"
]
}
}
JSON ννλ‘ Bias λ°μ΄ν°λ₯Ό ꡬμ±ν λ λ³μλ₯Ό ꡬμ±ν μ μλλ°, μ΄ λ³μ λ΄μμ λ€λ₯Έ λ³μλ₯Ό μ¨μΌνλ μν©μ΄ μκΈΈ μ μμ΅λλ€. νκ΅μ΄λ μ£Όλ‘ μμ
λ°μ΄ν° ꡬμ±μ μμ΄
λ³μλ₯Ό λΆλ¬μμΌν¨κ³Ό λμμ μμ λ λ³μμ¬μΌνλ μν©μ΄ λ°μνλλ°, μ΄λ° μν©μ μν΄μ λ³μκ° λ³μλ₯Ό μ°Έμ‘°ν μ μλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€. λ³μλ RecursiveList λ₯Ό μ¬μ©ν λ μμ μμ *
λ₯Ό λΆμ¬μ μ¬μ©νλ©΄ ν΄λΉ μμΉμ λ³μ λ°μ΄ν°κ° μ°Έμ‘°λ©λλ€. μμ
λ°μ΄ν° κ΅¬μ± μ μμκ³Ό λͺ¨μμ ν©μ³μ μμ±λ νκΈ κΈμλ₯Ό λ§λ€μ΄μΌνλ κ²½μ°κ° μκΈ°λλ°, μ΄λ΄ λλ₯Ό μν μλͺ¨ν©μ±
ν¨μκΈ°λ₯ λν ꡬνλμ΄ μμ΅λλ€. μλͺ¨λ₯Ό ν©μ±ν΄μ μμ±λ νκΈ κΈμλ₯Ό λ§λ€μ§ μκ³ μλͺ¨λ₯Ό κ°κ° λΆλ¦¬λ κΈμμ²λΌ μ·¨κΈνλ κ²μ λ¨μ΄λ³ν©
ν¨μ λΌκ³ ν©λλ€. κΈ°λ³Έμ μΌλ‘ RecursiveList λ λ¨μ΄λ³ν©
μκ³ λ¦¬μ¦μΌλ‘ μλλμ§λ§, μλͺ¨ν©μ±
κ³Ό μ°¨μ΄λ₯Ό λͺ
ννκ² νκΈ° μν΄μ ν¨μλͺ
μ νκΈ°ν΄μ ꡬλΆν μ μμ΅λλ€.
{
"var": {
"μ": [
{
"type": "λ¨μ΄λ³ν©",
"data": [[
"*γ
_λͺ¨μλ³ν"
], [
""
]]
},
{
"type": "μλͺ¨ν©μ±",
"data": [
[
"γ
",
"γ
"
], [
"*γ
£_λ°μλ³ν"
]
],
"exclude": ["μ "]
}
]
}
}
code
λ λ³μλ₯Ό μ¬μ©ν΄μ μ΅μ’
μ μΌλ‘ μ μλ λ°μ΄ν°λ₯Ό μ μνλ 곡κ°μ
λλ€. νκΈμμλ μ΄μ
μ μ 리ν λ μ¬μ©λ©λλ€. μ΅μ’
μ μΌλ‘ μ°μΆλ κ²°κ³Όλ¬Ό μ€ λ°°μ νκ³ μΆμ λ¨μ΄λ₯Ό exclude
λΆλΆμ μ
λ ₯ν΄μ£Όλ©΄ ν΄λΉ λ¨μ΄λ κ²°κ³Όλ¬Όμμ μμ λμ±λ‘ λ°νλ©λλ€.
{
"code": [
{
"type": "λ¨μ΄λ³ν©",
"data": [[
"*λ°"
],[
"*보"
]],
"exclude": [
"babo"
]
}
]
}
γ
γ
γ
μ κ°μ΄ νκΈμλ‘ ν©μ±λ μ μλ λ¨μ΄ ν©μ±μ μ λμ μΌλ‘ νΌν΄μΌν©λλ€.νμ¬ νμ ν μμ€ νμ§ μ²΄κ³μ νκ³λ₯Ό κΈ°λ‘ν΄λμ΅λλ€.
ν΄λΉ νλ‘μ νΈλ λ¬Έλ§₯μ μ΄ν΄νκ³ λ¬Έλ§₯μμμ μ΄λ ν λ¨μ΄κ° λΆμ μ ν μλλ‘ μ¬μ©λμλμ§, ννμλ
λ₯Ό νλ¨νμ§λ λͺ»ν©λλ€. κ·Έλ¬λ κ·Έλ¬ν ννμλλ₯Ό νμ
νκ³ μνλ νλ‘μ νΈλ₯Ό λκ΅°κ° μ§ννκ² λ λμ, ννμλλ₯Ό λΆμν μ μλ μ°Έμ‘° λ°μ΄ν°κ° λ μ μκ²λ μ΄ νλ‘μ νΈλ₯Ό ν΅ν΄μ λ°μ΄ν°μ λ³ν ꡬ쑰λ₯Ό νμ
νκ³ μ ν©λλ€.
2016λ
λ³μ λ
(δΈη³εΉ΄)μλ μ΄λ¬ν μΌμ΄ μμμ΅λλ€.
λλ μ΄λ¨Έλκ° μꡬλ
λκ° μλ°μ μ΄μΌ μ΄ μλ°μ μ!
κΈ°λ³Έμ μΌλ‘ Tetrapod.js λ λͺ ννκ² μμ€λ‘μ¨ μ£Όλ‘ μ¬μ©λλ λ¨μ΄λ₯Ό μ£Ό νν°λ§ λμμΌλ‘ μ¬μ©ν©λλ€. κ·Έλ κΈ°μ λμμ΄μμ΄ λ±μΌλ‘ μΈν΄ μ€νμ§μ¨μ΄ λμ μ μλ λ¨μ΄λ, λͺ νν μμ€λ‘ μ°μ΄κΈ° λ³΄λ¨ μΌλ°μ μΈ μ©λλ‘ μ¬μ©λ κ°λ₯μ±μ΄ λ§μ λ¨μ΄μ κ²½μ° νμ§λμμΌλ‘ ν¬ν¨μν€μ§ μμ΅λλ€.
κ·Έλ κΈ°μ Tetrapod.js λ νμ₯ ν¨ν€μ§ κ°λ μ μ 곡ν©λλ€. μ΄λ Tetrapod.js μ μΆκ°ν μ μλ νν°λ§ λμ λ¨μ΄ λͺ¨μ μ¬μ μΌλ‘, Tetrapod.js μμ μ 곡νλ Bias 체κ³λ₯Ό μ¬μ©νμ¬μ μμ€μ΄ μλ νλ ₯μ± λ¨μ΄λ, μλμ± λ¨μ΄ λ± νν°λ§ μνλ λ¨μ΄ μ¬μ μ μμ λ‘κ² κ΅¬μ±ν μ μλλ‘ λμ΅λλ€.
μμ΄
, μμ
, μ΄μ
3λ¨κ³λ‘ λλμ΄μ μ 리ν΄λκ° μ μλ λΆν λ JSON κΈ°λ° νμΌ λ°μ΄ν° λ³ν© 체κ³γ
/γ
λ‘ λλμ΄μ ννν μ μκ² νλ 체κ³λ₯Ό λ»ν©λλ€.)λ°/보
λΌλ λ¨μ΄μ λ³ν μλ₯Ό λͺ¨λ ꡬν λ, λ³λλ‘ μ‘΄μ¬νλ γ
/γ
μ γ
/γ
λ°μ΄ν°λ₯Ό μ°κ²°μμΌμ ꡬμ±μν¬ μ μλ 체κ³λ₯Ό λ»ν©λλ€.)