korean-regexλ νκ΅μ΄(νκΈ)μ λΆμνκΈ° μν΄ regex(μ κ·ννμ)μ λ¬Έλ²μ μΆκ°ν ν¨ν€μ§μ λλ€. korean-regexλ‘λ νκΈκ³Ό κ΄λ ¨ν λ§μ μΆκ° κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
Rust λ°μΈλ©μ μ¬μ©νμ¬ λ§€μ° μ±λ₯μ΄ μ’μ΅λλ€.
import kre
regex = kre.compile(r'\b[^ ]+(?=[::^0]).\b')
print(regex.findall('ko_reλ νκ΅μ΄(νκΈ)μ λΆμνκΈ° μν΄ regex(μ κ·ννμ)μ λ¬Έλ²μ μΆκ°ν ν¨ν€μ§μ
λλ€. ko_reλ‘λ νκΈκ³Ό κ΄λ ¨ν λ§μ μΆκ° κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.')) # ['ko_reλ', 'νκ΅μ΄(νκΈ)μ', 'regex(μ κ·ννμ', 'λ¬Έλ²μ', 'μΆκ°ν', 'ko_reλ‘λ', 'κ΄λ ¨ν', 'λ§μ', 'κΈ°λ₯μ', 'μ¬μ©ν ']
korean-regexλ pipλ₯Ό ν΅ν΄ μ€μΉνμ€ μ μμ΅λλ€. kreλ₯Ό μ€μΉνλ κ²μ΄ μλ korean-regex
λ₯Ό μ€μΉν΄μΌ νλ€λ μ μ μ£ΌμνμΈμ.
pip install -U korean-regex
μ΄ νλ‘μ νΈλ λλͺ μ λ¬μ€νΈ νλ‘μ νΈλ₯Ό νμ΄μ¬μΌλ‘ λ°μΈλ©ν κ²μ λλ€. κΈ°λ³Έμ μΈ μλ λ°©μμ μμ ν κ°μΌλ μ‘°κΈ λ μμΈν μ€λͺ μ΄ νμνλ€λ©΄ μ΄ λ§ν¬λ₯Ό μ°Έκ³ νμΈμ.
κΈ°λ³Έμ μΌλ‘ korean-regexλ bracket expressionμμ νΉμ ν 쑰건μ λ°μμμΌ°μ λ μλνλ μΆκ°μ μΈ κΈ°λ₯μ κ°λ―Έν κ²μ λλ€. ν΄λΉ 쑰건μ μ μΈν λλ¨Έμ§ μν©μμλ νμ΄μ¬μ κΈ°λ³Έ re λΌμ΄λΈλ¬λ¦¬μ λμμ΄ μμ ν κ°μ΅λλ€.
μ°μ korean-regexλ₯Ό λΆλ¬μ€λ €λ©΄ kre.compile()μ μ¬μ©ν©λλ€. compileμΈμλ kre.sub
λ kre.search
, kre.match
μ κ°μ΄ λ°λ‘ μ¬μ©νλ κ²λ κ°λ₯ν©λλ€.
korean-regexμμ μ²λ¦¬λλ ꡬ문μ λ€μκ³Ό κ°μ΅λλ€: [μ΄μ±:μ€μ±]
(κ°
μ κ°μ μ’
μ±μ΄ μλ κΈμμ κ²½μ°) λλ [μ΄μ±:μ€μ±:μ’
μ±]
, λν μ΄λ regexμ bracket expressionμ²λΌ κΈμλ₯Ό μ£½ μ΄μ΄μ μ°κ±°λ -
μ μ²λ¦¬νλ κ²μΌλ‘ μ¬λ¬ μμ(μ리μ μ΅μ λ¨μλ‘, μμκ³Ό λͺ¨μμ μλ―Έν©λλ€.)λ₯Ό μ νν©λλ€.
μλ₯Ό λ€μ΄ [γ±γ΄:γ
]
λ regexꡬ문μμ [κ°λ]
λ₯Ό μλ―Ένκ³ , [γΉγ
:γ
:γΆγ
]
μ [λ‘’λ‘²νΎν]
μ μλ―Έν©λλ€. λν [γ±-γΉ:γ
]
λ [κ°κΉλλ€λ°λΌ]
λ₯Ό μλ―Έν©λλ€([κ°λλ€λΌ]
κ° μλμ μ£ΌμνμΈμ!).
# μμ μ½λ
import kre
some_regex = kre.compile('[γ±γ΄:γ
γ
γ
£:γΆγ·γΉγ
]')
print(some_regex) # re.compile('[κ°κ°κ°κ°κ±Άκ±·κ±Έκ²κΈΆκΈ·κΈΈκΉλλλ λ―λλλλλλλλ]')
print(some_regex.findall('κΈΈμ κ±·λ μ¬λμ 보μλ€. κ·Έλ λ λ³Ό λ―μ΄ μμ΄μ λ©λ¦¬λ©λ¦¬ λ λ¬λ€.')) # ['κΈΈ', 'κ±·', 'λ ', 'λ―']
λν regexꡬ문μ²λΌ ^
λ μ§μν©λλ€. μλ₯Ό λ€μ΄ [^γ·γΉγ
γ
:γ
]
λ [κ°κΉλλ°λ§λ°λΉ μ¬μΈμμμ°¨μΉ΄νν]
(γ
μ‘°ν© μ€ λ€,λΌ,μ§,ν
μμ.)μ
λλ€.
λ§μ½ ν΄λΉ μ리μ λͺ¨λ ꡬ문μ μΌμΉμν€κ³ μΆλ€λ©΄ ν΄λΉ μ리λ₯Ό λΉμλμΌλ©΄ λ©λλ€. μλ₯Ό λ€μ΄ [:γ
]
λ κ°λ₯ν λͺ¨λ γ
μ‘°ν©μ μλ―Ένκ³ , [:γ
:γ΄]
μ [κ³€κΌ°λ
Όλλ...νΌ]
μ μλ―Έν©λλ€.
λμ리λ₯Ό μ μΈν μ‘°ν©ν μμλ κ΄νΈλ₯Ό μ΄μ©ν΄μ ννν μ μμ΅λλ€. μλ₯Ό λ€μ΄ γ
λ (γ
γ
£)
μ μμ ν κ°μ ꡬ문μ΄κ³ , γΆ
μ (γ΄γ
)
κ³Ό μμ ν κ°μ΅λλ€. μλ₯Ό λ€μ΄ [:γ
γ
’:γΆγΌ]
μ [:(γ
γ
)γ
’:γΆ(γΉγ
)]
κ³Ό κ°μ΅λλ€.
0
μ ν΄λΉ μ리μ μμκ° μλ€λ μλ―Έμ
λλ€. μλ₯Ό λ€μ΄ [γ±:γ
:0γ΄γ
]
μ [κ°κ°κ°]
μ κ°μ΅λλ€. μ΄μ±κ³Ό μ€μ±μλ κΈ°λ³Έμ μΌλ‘λ 0
μ μ¬μ©νλ κ²μ΄ κΈμ§λμ§λ§ νΉλ³ν κ²½μ°, ν μμλ₯Ό λνλ΄κ³ μΆμ λ, μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄ [0:γ
-γ
]
νΉμ [0:γ
-γ
:0]
μ [γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
]
λ₯Ό μλ―Έν©λλ€. λν [γ±-γΉ:0]
λλ [γ±-γΉ:0:0]
μ [γ±γ²γ΄γ·γΈγΉ]
λ₯Ό μλ―Έν©λλ€. νμ§λ§ μ΄μ±κ³Ό μ€μ±μ 0
μ΄ λ€μ΄κ°λ κ²½μ°λ λͺ κ°μ§ μ μ½μ΄ μλλ°μ, μ°μ 0
μ΄ λ€μ΄κ°λ©΄ κ·Έ μ리μλ 0
μΈμ λ€λ₯Έ μμλ₯Ό μμ±ν μ μμ΅λλ€. λ€μμ λͺ κ°μ§ μ‘°ν©μ 0
μ μ¬μ©ν μ μλ€λ κ²μ
λλ€. μλ₯Ό λ€μ΄ [γ±:0:γ
]
μ μκ°ν΄ λ΄
μλ€. μ΄λ° νκΈμ κ³°κ³°ν μκ°ν΄λ μ¬μ©ν μ μλ ννλ μλλλ€. μ΄κ² λΏλ§ μλλΌ [0:γ
:γ
]
λ [0:0:0]
λ κΈμ§λ©λλ€.
regular_first
μλͺ¨μ('μ κ· μμ΄ μ ν μλͺ¨μ' μ΄ν 'μ ν μλͺ¨μ')μ λμ리λ μμκ΅°, ν©μ©μλ€μ΄ λ€λ‘ 보λ΄μ§ μμμ
λλ€.
κΈ°λ³Έ μμ(μ λμ½λ μμ λλ μ¬μ μ)μ λ€μκ³Ό κ°μ΅λλ€:
- μ΄μ±: γ±γ²γ΄γ·γΈγΉγ γ γ γ γ γ γ γ γ γ γ γ γ
- μ€μ±: γ γ γ γ γ γ γ γ γ γ γ γ γ γ γ γ γ γ γ ‘γ ’γ £
- μ’ μ±: γ±γ²γ³γ΄γ΅γΆγ·γΉγΊγ»γΌγ½γΎγΏγ γ γ γ γ γ γ γ γ γ γ γ γ
νμ§λ§ μ ν μλͺ¨μμ λ€μκ³Ό κ°μ΅λλ€:
- μ΄μ±: γ±γ΄γ·γΉγ γ γ γ γ γ γ γ γ γ γ²γΈγ γ γ
- μ€μ±: γ γ γ γ γ γ γ γ γ ‘γ £γ γ γ γ γ γ γ γ γ γ γ ’
- μ’ μ±: γ±γ΄γ·γΉγ γ γ γ γ γ γ γ γ γ γ²γ³γ΅γΆγΊγ»γΌγ½γΎγΏγ γ γ
μ΄ μμλ -
λ₯Ό ν΅ν΄ κ°μ μ κ·Όν λ μ¬μ©λμ§λ§, μ λ ¬μ μΌλ°μ μΈ μ λμ½λ μμ(μ¬μ μμ)λλ‘ μ λ ¬λ©λλ€.
μλ₯Ό λ€μ΄ [γ±-γ
:0:0]
μ κΈ°λ³Έ μμμμλ λͺ¨λ μ΄μ±μ ν¬ν¨νλ [γ±γ²γ΄γ·γΈγΉγ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
γ
]
μ΄μ§λ§, μ ν μλͺ¨μμμλ [γ±γ΄γ·γΉγ
γ
γ
γ
γ
γ
γ
γ
γ
γ
]
μ
λλ€.
λ€μκ³Ό κ°μ λ°©μμΌλ‘ μ ν μλͺ¨μμ μ¬μ©ν μ μμ΅λλ€.
import kre
kre.compile("[γ±-γ
:γ
]", order="regular_first") # μ ν μλͺ¨μ
kre.compile("[γ±-γ
:γ
]", order="default") # κΈ°λ³Έκ°(μ¬μ μ)
μ κ·ννμ νλκ·Έκ° λ λ¨Όμ μ€κΈ° λλ¬Έμ μ£Όμν΄μΌ ν©λλ€.
import kre
kre.compile("[γ±-γ
:γ
]", "regular_first") # XXX μ€λ₯! μ κ·ννμ flagλ‘ μ²λ¦¬λ¨
kre.compile("[γ±-γ
:γ
]", order="default") # μ¬λ°λ₯Έ μ¬μ©
- 0.2.0:
order
νλΌλ―Έν° μΆκ° - 0.1.0: λ¬μ€νΈ λ°μΈλ©μΌλ‘ μμ ν μ²μλΆν° μ¬μ μ, κΈ°μ‘΄ λ²μ κ³Ό μμ ν λ€λ¦
- 0.0.5: make_korean μΆκ°, μ΄λ¦ λ³κ²½, νμ μΆκ°, 리ν©ν λ§, κ²μ¬ μΆκ°
- 0.0.4: readme 보κ°, 리ν©ν λ§
- 0.0.3(첫 μμ ν λ²μ ): μμ