ํ
์คํธ๋ก๋ถํฐ slot ํํ์ ์์์ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ๊ท์น ๊ธฐ๋ฐ
๋๊ตฌ๋ก์, ์๋์ ๋ชฉ์ ์ ํ์ฉ ๊ฐ๋ฅํ๋ค.
ํ๊ตญ์ด๋ฅผ ๊ฒจ๋ฅํด์ ์ค๊ณ๋์์ผ๋, ๋ณธ ํ๋ก์ ํธ์ ๊ทผ๊ฐ์ด ๋๋ ๊ท์น ํ์ผ
์ ์ธ์ด์ ๋
๋ฆฝ์ ์ด๋ฏ๋ก, ์ธ๊ณ ์ด๋ค ์ธ์ด์ด๋ ๊ฐ์ ๊ตฌ๋ถ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์ง์์๋ต ์์คํ
- ๋ํ์์คํ (์ฑ๋ด)
- ํ ์คํธ ์ ์ฒ๋ฆฌ ๋ฐ ์ฌ๋กฏ(slot) ์ถ์ถ
- ์ฌ์ ๊ธฐ๋ฐ์ ๋์ฉ๋ NER ์ถ์ถ
๋ณธ ํ๋ก์ ํธ๋ฅผ ํด๋ก ๋ฐ๊ณ ํ๊ฒฝ๋ณ์ ์ค์
(์์) ๋ง์ฝ bash ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, ~/.bashrc ํ์ผ์ ๋ํ์ฌ ์๋์ ๊ฐ์ด ํ๊ฒฝ์ค์
~$ cat >> ~/.bashrc
PYTHON_PATH=$PYTHON_PATH:/home/your_id/
(์ปจํธ๋กคํค ๋๋ฅธ์ฑ๋ก d ๋๋ฌ์ ํธ์ง ์ข
๋ฃํ๊ธฐ)
~$ source ~/.bashrc
~$
- python 3.x
์๋์ ๊ฐ์ด ์์ฐฝ์์ ํ ์คํธ๋ฅผ ์คํ ๊ฐ๋ฅํ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ๊ท์น ํ์ผ์ ์์ฑํ ํ, test.py ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ๋ค๋ฅธ ์ดํ๋ฆฌ์ผ์ด์ ๋๋ ์๋น์ค์ ์ฌ์ฉํ ์ ์๋ค. ํ ์คํธ์ ๋ํ์ฌ ๊ท์น์ ์ฒดํฌํ ๋, Tree(ํธ๋ฆฌ) ๊ธฐ๋ฐ์ผ๋ก recursive call์ผ๋ก์จ ๊ท์น์ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ๋๋ฌด ๊ธด ํ ์คํธ์ ๋ํด์๋ '์ฝ์คํ ์ค๋ฒํ๋ก์ฐ' ๋ฑ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ์ํด์ผ ํ๋ค. ๋ฐ๋ผ์, test.py ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ๋๋ฌด ๊ธด ํ ์คํธ๋ ์ ๋นํ ๊ธธ์ด(์: 100~500๊ธ์ ์ฌ์ด)๋ก ์๋ผ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ๋ํ, ์์ด ์ํ๋ฒณ ํ ์คํธ์ ์ ์ฉํ ๊ฒฝ์ฐ์๋ ์๋ฌธ์ํํ์ฌ ๊ท์น์ ์ฒดํฌํ๋๋ก ํ๋ค.
(1) ๊ท์น ๊ธฐ๋ฐ์ slot ์ ๊ทํ ๊ธฐ๋ฅ ํ
์คํธ
~/slotminer$ python3 test.py
(2) ์ฌ์ ๊ธฐ๋ฐ์ NER ์ถ์ถ ๊ธฐ๋ฅ ํ
์คํธ
~/slotminer$ python3 test_trie.py
๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ค์ํ ํํ์ slot์ ์ถ์ถ
ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, slot
์ ์์นํํ(์: ๊ฐ์, ์์น, ๋ ์ง, ์๊ฐ ๋ฑ)๊ณผ Named entity (NE)๋ฅผ ํฌํจํ๋ ๊ฐ๋
์ด๋ผ๊ณ ์ ์ํ๋ค.
๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ์์ ํตํด slot ์ถ์ถ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ์์ ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ์ํ ๊ท์น ๋ฌธ๋ฒ์ ๊ธฐ๋ฐํ์ฌ ๊ท์น ํ์ผ
(json ํฌ๋งท)์ ์์ฑํ๋ ๊ฒ์ด๊ณ , ๋ ๋ฒ์งธ ๋ฐฉ์์ ๋์์ด ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ ํ์ผ
(json ํฌ๋งท)์ ์์ฑํ๋ ๊ฒ์ด๋ค.
๊ท์น ํ์ผ๊ณผ ์ฌ์ ํ์ผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์๋ ๋ถ๋ถ์ ์์ธํ ๊ธฐ์ฌ๋์ด ์๋ค.
๊ฐ๋ฐ์๋ slotminer ์ ์์ค์ฝ๋์ ๊ธฐ์ฌํ ์๋ ์๊ณ , ํน์ slot์ ์ถ์ถํ๋ ๊ท์น ํ์ผ ๋๋ ์ฌ์ ํ์ผ์ ์์ฑ/๊ฐ์ ํจ์ผ๋ก์จ ๊ธฐ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค. ํน์ง์ผ๋ก๋ white-space (์คํ์ด์ค๋ฐ)์ ํ ์คํธ ๋งค์นญ ๋์์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์๋๋ฏ๋ก, ๊ท์น์ด "๊ธฐ์์ "์ผ ๊ฒฝ์ฐ, "๊ธฐ ์ ์ ", "๊ธฐ์ ์ " ๋ฑ๊ณผ ๊ฐ์ ํ ์คํธ๋ค์ด ๋ชจ๋ ๊ท์น/์ฌ์ ๋งค์นญ์ ํต๊ณผ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐฉ์
(๊ท์น ๊ธฐ๋ฐ)์ ์ฌ์ฉํ ๊ฒฝ์ฐ, white-space ๋ฅผ ๋๊ดํธ๋ก ๋๋ฌ์ผ ํํ(์: [ ])๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ๋ช
์์ ์ผ๋ก ๊ท์น์์ white-space ๋ฅผ ์ฒดํฌํ๋๋ก ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋ ๋ฒ์งธ ๋ฐฉ์
(์ฌ์ ๊ธฐ๋ฐ)์ ์ฌ์ฉํ ๊ฒฝ์ฐ, white-space ๋ฅผ ๋ฌด์ํ๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง ์๋๋ค.
์ต๊ทผ, ๊ธฐ๊ณํ์ต๊ณผ ๋ฅ๋ฌ๋ ๋ฑ์ ํตํด ์๊ฐ์ ๋ณด์ ๋ํ '์ ๊ทํ'๋ฅผ ์๋ํํ๋ ค๋ ์ฐ๊ตฌ๋ค์ด ์์ผ๋, ์ค์ ์๋น์ค์ ์ ์ฉ๋๊ธฐ์๋ ๊ฐ ๊ธธ์ด ๋งค์ฐ ๋ฉ๋ค.
ํนํ, 1999๋
, ๋ค์์ฃผ ์์์ผ
๊ณผ ๊ฐ์ ํํ(์ด๋ฅผ TIMEX3 slot ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค)์ ๋ํ ์ถ์ถ ๋ฐ ์ ๊ทํ๋ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ์ถ์ถํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ด๋ผ ํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก๋ ISO-8601๊ณผ ISO-TimeML ํ์ค์ ๋ฐ๋ฅด์ง๋ง, Y.S. Jeong et al., 2016 ๋
ผ๋ฌธ์์ ์ธ๊ธํ๋ฏ์ด, ์ค์ ํ๋ก๊ทธ๋จ ์์์๋ ์ ๋๊ฐ์ ํ์ค์ ๊ทธ๋๋ก ๋ฐ๋ฅด๊ฒ ๋๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ด๊ฑฐ๋ ํํํ์ง ๋ชปํ๋ ์๊ฐ ์ ๋ณด๋ค์ด ์กด์ฌํ๋ค.
๋ฐ๋ผ์, Y.S. Jeong et al., 2016 ๋
ผ๋ฌธ๊ณผ C.G. Lim et al., 2018 ๋
ผ๋ฌธ์์ ์ ์ํ๋ ์๋ก์ด Korean TimeML์ ๋ฐ์ํ์ฌ ์๊ฐ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค.
์ด ๊ธฐ๋ฅ์ ์ํ ๊ท์นํ์ผ์ rule/timex3.rule
์ด๋ค.
ํนํ, ์๊ฐ์ ๋ณด ์ค์์ EVENT, MAKEINSTANCE, TLINK ๋ฑ์ ์ ์ธํ๊ณ , TIMEX3 ์์๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํํ ์ธ์๋ ๊ณผ๊ฐํ ์ ์ธํ์๋ค. ์๋ฅผ ๋ค๋ฉด, ์ถ์ถ๋๋ ์ ๋ณด๋ฅผ ๋ถํ์ํ๊ฒ ๋ฒ์กํ๊ฒ ๋ง๋๋ 'SET' ํ์ TIMEX3๋ ์ ์ธ๋์๋ค. ์ถ์ถ๋๋ TIMEX3 ์ ๋ณด์ ๋ํ ์ ์๋ ์๋์ ๊ฐ๋ค. ๋ง์ฝ ๊ธฐ์ /๊ธฐ๊ด์์ ์ฌ์ฉํ๋ ค๋ ๋ณ๋์ ์๊ฐ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ์์ ์ ์๋ขฐํ๊ณ ์ถ๋ค๋ฉด ๋ณธ๋ฌธ ๋งจ ๋ฐ์ ์ ํ์๋ ์ ํด๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋ค.
attributes ::= type text extent calendar [year] [month] [day] [week] [week_day] [mod]
type ::= 'DATE' | 'TIME' | 'DURATION'
text ::= CDATA
extent ::= [(begin, end), ...]
begin ::= CDATA {begin ::= <integer>}
end ::= CDATA {end ::= <integer>}
calendar ::= 'GREGORIAN' | 'LUNAR' | 'JULIAN'
year ::= mark CDATA
month ::= mark CDATA
day ::= mark CDATA
hour ::= mark CDATA
minute ::= mark CDATA
second ::= mark CDATA
week ::= mark CDATA
week_day ::= 0 | 1 | 2 | 3 | 4 | 5 | 6
mark ::= 'P' | '+' | '-' | '_' (Note: '_'๋ '๊ธฐ์์ ' ํํ ์ ์ฉ)
mod ::= 'START' | 'MID' | 'END' | 'START_MID' | 'MID_END'
์๋ณธ: 3๋
5๊ฐ์๋์
๊ฒฐ๊ณผ:
{'year': 'P3', 'type': 'DURATION', 'month': 'P5', 'calendar': 'GREGORIAN', 'text': '3๋
5๊ฐ์', 'name': 'slot_timex3', 'extent': [(0, 6)]}
์๋ณธ: ์ฌ์์น๊ตฌ์ ๋ค์์ฃผ ์์์ผ์ ๋ง๋๊ธฐ๋ก ํ๋ค.
๊ฒฐ๊ณผ:
{'name': 'slot_timex3', 'week_day': '3', 'extent': [(6, 13)], 'calendar': 'GREGORIAN', 'type': 'DATE', 'text': '๋ค์์ฃผ ์์์ผ', 'week': '+1'}
"Rweek_day": {
"name": "slot_timex3",
"result": {"week_day": "[$s]", "type": "DATE", "calendar": "GREGORIAN"},
"condition": [
{"ext": "(์[$s=1]|ํ[$s=2]|์[$s=3]|๋ชฉ[$s=4]|๊ธ[$s=5]|ํ [$s=6]|์ผ[$s=0])์์ผ"}
]
},
๋ณ์์์ ์์ ์ ์๋ ์์ ์ 'ํ๊ฐ์'๋ฅผ ์์ฑํ๋๋ฐ, ์ด ํ๊ฐ์์๋ ํ์์ ์ํ, ํน์ง ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฏ๋ก ์ฌ๋ฌ๊ฐ์ง๋ก ํ์ฉ(์: ํ์์ ์์ ํ ์ํ ์์ธก ๋ฑ)์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, ์ด ํ๊ฐ์๋ ์์ฐ์ด ๋ฌธ์ฅ์ ๋์ด๋ก์จ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ํ๊ฐ์๋ก๋ถํฐ ์ ํํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ ์์ ์ด ํ์ํ๋ค. ์ด ๊ธฐ๋ฅ์ ์์ ์๋ฃ์ธ์ด ์์ ์ ์ ์์ฑํ๋ ํ๊ฐ์ ํ ์คํธ๋ก๋ถํฐ ์ ํํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํด์ค๋ค.
attributes ::= name feature text extent
name ::= 'slot_param1'
feature ::= CDATA
text ::= CDATA
extent ::= [(begin, end), ...]
begin ::= CDATA {begin ::= <integer>}
end ::= CDATA {end ::= <integer>}
๊ธฐ๋ณธ์ ์ผ๋ก๋ ์์ฒํฅ๋ํ๊ต ์์ธ๋ณ์
(https://www.schmc.ac.kr/seoul/index.do)์์ ์ฌ์ฉ๋๋ ์ ๋ฌธ์ฉ์ด/์ฝ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ท์น์ด ์์ฑ๋์์ผ๋ฉฐ, ๋ค๋ฅธ ๋ณ์ ๋ฐ ๊ธฐ๊ด์์๋ ๋ค์์ ์ฉ์ด ์ฐจ์ด๊ฐ ์กด์ฌํ ์ ์๋ค.
๊ท์นํ์ผ ๊ฒฝ๋ก๋ rule/sch_seoul.rule
์ด๋ค.
๊ฒฐ๊ณผ๋ฌผ๋ก ์์ฑ๋๋ slot๋ค ์ค์ 'name'๊ฐ์ด 'slot_number'๋ก์จ ์์ฑ๋๋ slot๋ค์ ๋จ์์ซ์ํํ๋ง์ ์ธ์งํ๋ฏ๋ก ๋ฌด์ํ๋๋ก ํ๋ค. ์ซ์ํํ์ ์ธ์ํ๋ ์ด์ ๋ glucose, TFT ๋ฑ๊ณผ ๊ฐ์ด ์์น๊ฐ์ ์ถ์ถํ๋ ์ฉ์ด์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ํจ์ด๋ค.
๋ฐ๋ผ์ 'name'๊ฐ์ด 'slot_param1'์ธ slot์ ๋ํ์ฌ, feature
ํญ๋ชฉ์ ๊ฐ์ ์ฝ 50๊ฐ์ง ์ด์์ ์ ๋ฌธ์ฉ์ด/์ฝ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ฒ ๋๋ค.
์ด ์ ๋ณด๋ ํน์ ์ฉ์ด/์ฝ์ด๊ฐ ํ๊ฐ์์ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋๋๋ก ์์น๊ฐ(์: glucose:50)์ ์ถ์ถํด์ฃผ๊ธฐ๋ ํ๋ค.
์ถ์ถ๋๋ ์ฉ์ด/์ฝ์ด๋ค์ ๋ํ ๋ชฉ๋ก์ ์๋์ ๊ฐ๋ค. ๋ง์ฝ ๋ณ์/๊ธฐ๊ด์์ ์ฌ์ฉํ๋ ๋ณ๋์ ์ฉ์ด๋ค์ ์ถ๊ฐํ๋ ์์ ์ ์๋ขฐํ๊ณ ์ถ๋ค๋ฉด ๋ณธ๋ฌธ ๋งจ ๋ฐ์ ์ ํ์๋ ์ ํด๋ฌธ์๋ฅผ ์ฐธ๊ณ ๋ฐ๋๋ค.
- COPD, Bedridden, CPR, Alcoholic hepatitis, Alcoholic LC, IPF, Anemia, Myocardial infarction, PCI, Atherosclerosis, DVT, Carotid artery stenosis, Cerebral atherosclerosis, ESRD KT, Hyperparathyroidism, CAD, Fatty liver, Angina, VPC, APC, CHF, MR, MS, HTN, Pulmonary hypertension, Pulmonary embolism, TR, DM, Diastolic dysfunction, Concentric LVH, Eccentric LVH, HCMP, LAE, RAE, LVE, RVE, Ischemic heart disease, Regional wall motion abnormality, LV systolic dysfunction, RV dysfunction, A.fib, DCMP, AS, AR, Uremic CMP, IVC plethora, Pericardial effusion, Pleural effusion, Depression, Cancer, Glucose, aBGA, EGFR, CAG, TFT
์๋ณธ: TFT : TSH/fT4/T3 3.66(N)/1.26(N)/60.03(L)
๊ฒฐ๊ณผ:
{'text': 'fT4/T33.66(N)/1.26(N)/60.03', 'name': 'slot_param1', 'feature': 'ft4:1.26:t3:60.03', 'extent': [(10, 37)]}
์๋ณธ: Chest CT :. Diffuse tubular bronchiectasis and multiple small subsolid/solid
๊ฒฐ๊ณผ:
{'text': 'bronchiectasis', 'name': 'slot_param1', 'feature': 'copd', 'extent': [(60, 74)]}
"Rtft": {
"name": "slot_param1",
"result": {"feature": "ft4:[$s0]:t3:[$s1]"},
"condition": [
{"ext": "(ft4/t3)([ ])?[$s=([@Rnumber.value])]([.]){3}/[$s0=([@Rnumber.value])]([.]){3}/[$s1=([@Rnumber.value])]"}
]
}
-
๊ท์น์ ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก์, ์ ๊ท์๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ๊ท์น์ ์ ์ํ๊ณ ์ด ๊ท์น์ ๋งค์นญ๋๋ slot ๋ค์ ์ถ์ถํจ๊ณผ ๋์์ ๊ทธ ๊ฐ์ ์ ๊ทํํ์ฌ ์ป์ ์ ์๋ค.
-
๊ท์นํ์ผ: ๊ท์นํ์ผ์ 1๊ฐ ์ด์์ ๊ท์น๋ค์ ๋ชจ์์ด๋ฉฐ, ๊ท์น์ json ์์์ผ๋ก ๊ธฐ์ ๋๋ค. ๊ท์นํ์ผ์๋ ๋ค์์ ๊ฒ๋ค์ด ํฌํจ๋๋ค.
- ์ /ํ์ฒ๋ฆฌ ์ ๋ณด
- ๊ท์น๋ค
-
๊ท์น: ๊ท์น์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ์คํธ ๋งค์นญ์ ํตํด
๊ฒฐ๊ณผ๋ฌผ
(์ฌ๋กฏ ๋๋ ํ๊ทธ)์ ์์ฑํ๋ค. ๊ท์นํ์ผ์์ ๊ธฐ์ ๋๋ ๊ฐ๊ฐ์ ๊ท์น์ ์๋ ์ฌํญ์ ํฌํจํ๋ค.- ๊ท์น ์ด๋ฆ (์ฃผ์: ๊ท์น์ด๋ฆ์ ์ค๋ณต๋ ์ ์๋ค. ์ค๋ณต๋๋ฉด ๋์ค์ ์ ์๋ ๊ท์น์ด ์์ ๊ท์น์ ๋ฎ์ด์ด๋ค.)
- ์์ฑ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ด๋ฆ, ํค-๊ฐ์ ์, ์กฐ๊ฑด๋ค
- ์ฐธ๊ณ : ๊ฒฐ๊ณผ๋ฌผ์ ์ต์ํ 3๊ฐ์ง(name, text, extent)์ ํค-๊ฐ ์์ ํฌํจํ๋ค.
-
๊ท์น ์์ฑ ๋ฐฉ๋ฒ (๊ธฐ์ด๋ ๋ฒจ I)
์๋ ๊ท์น์ ์ฐธ๊ณ ํ์. ์ด ๊ท์น์์๋, ๊ท์น์ ์ด๋ฆ์ Rule ์ด๊ณ , ๊ฒฐ๊ณผ๋ฌผ์ ์ด๋ฆ์ slot_sample, ํค-๊ฐ์ ์์ value: 100 ์ด๋ฉฐ, ์กฐ๊ฑด๋ค์ condition ์ ํด๋นํ๋ค.
"Rule" : { "name": "slot_sample", "result": {"value": "100"}, "condition": [ {"ext": "hundred"} ] }
์ด ๊ท์น์ ํ ์คํธ "one hundred"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'name': 'slot_sample', 'extent': [(4, 11)], 'text': 'hundred', 'value': '100'}
-
๊ท์น ์์ฑ ๋ฐฉ๋ฒ (๊ธฐ์ด๋ ๋ฒจ II)
์๋ ๊ท์น์ ์ฐธ๊ณ ํ์. condition ๋ถ๋ถ์์ ๋งค์นญํ๋ ค๋ ํ ์คํธ ๋ถ๋ถ์ ๊ด์ฐฐํด๋ณด๋ฉด, ์ ๊ท์ ๋ฌธ๋ฒ๊ณผ ์ ์ฌํ๊ฒ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฌ์ฉ๊ฐ๋ฅํ ํํ๋ค์ +, ?, | ์ด๋ค. ์ด ํํ๋ค์ ์๊ดํธ์ ํญ์ ํจ๊ป ์จ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, (a)+ ์ด๋ผ๊ณ ํ๋ฉด, a ๋ฌธ์ 1๊ฐ ์ด์์ ์๋ฏธํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต๋ฐฑ์ ๋ฌด์ํ๋๋ก ๋์ด์๋๋ฐ, ๋ง์ฝ ๊ณต๋ฐฑ์ ์ฒดํฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ [ ] ์ด๋ผ๊ณ ๊ธฐ์ ํ๋ฉด ๋๋ค. ๋ฌธ์ฅ์ ๋งจ ์ฒ์์ด๊ฑฐ๋ white-space(' ', '\t' ๋ฑ)์ธ ๊ฒฝ์ฐ๋ [<] ์ด๋ผ๊ณ ๊ธฐ์ ํ ์ ์์ผ๋ฉฐ, ๋ฌธ์ฅ์ ๋งจ ๋์ด๊ฑฐ๋ white-space์ธ ๊ฒฝ์ฐ๋ [>]์ด๋ผ๊ณ ๊ธฐ์ ํ๋ค.
"Rule" : { "name": "slot_sample", "result": {"value": "pet"}, "condition": [ {"ext": "(dog|cat)"} ] }
์ด ๊ท์น์ ํ ์คํธ "I have a dog and a cat"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'extent': [(9, 12)], 'value': 'pet', 'text': 'dog', 'name': 'slot_sample'}
{'extent': [(19, 22)], 'value': 'pet', 'text': 'cat', 'name': 'slot_sample'}
์ฃผ์ํ ์ ์ผ๋ก,
| ํํ์ ์ฌ์ฉํ ๋์๋ ํญ๋ชฉ๋ค์ ์ผ์ชฝ๋ถํฐ ๊ณ ๋ คํ๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, (dog|doggie) ๋ผ๋ ๊ธฐ์ ํ ๊ฒฝ์ฐ, "It's a doggie" ๋ฌธ์ฅ์ ๋ํด ์ ์ฉํ์ ๋ "dog" ๋ถ๋ถ์ด ๋งค์นญ๋ ๊ฒ์ด๋ค. ๊ท์น์ dog ๋๋ doggie ๋ฅผ ๊ฒ์ถํ๋๋ก ๊ธฐ์ ํ์์๋ ๋ถ๊ตฌํ๊ณ , dog ๊ฐ doggie ๋ณด๋ค ์ผ์ชฝ์ ์์ผ๋ฏ๋ก, dog๊ฐ ๋งค์นญ๋์์ ๋ doggie๋ ๋์ด์ ๊ณ ๋ ค๋์ง ์๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ๋ค๋ฉด, (doggie|dog)
๋๋ (dog(gie)?)
์ ๊ฐ์ด ๊ธฐ์ ํ ์ ์๋ค.
-
๊ท์น ์์ฑ ๋ฐฉ๋ฒ (๊ธฐ์ด๋ ๋ฒจ III)
์๋ ๊ท์น์ ์ฐธ๊ณ ํ์. ๋จผ์ condition ๋ถ๋ถ์ ์ ๊ด์ฐฐํด๋ณด์. ๋๊ดํธ๋ก ๋๋ฌ์ธ์ธ ๋ถ๋ถ์ ๋์์
s
๋ผ๋ ์ด๋ฆ์๋ณ์
๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๋ณ์์3
์ด๋ผ๋ ๊ฐ์ ๋ฃ๋ ๊ฒ์ด๋ค. ๊ทธ ๋ค์์ result ๋ถ๋ถ์ ์ดํด๋ณด๋ฉด, value ํค์ ๊ฐ์๋ณ์ s
๊ฐ ์ฌ์ฉ๋์๋ค. ์ฆ, condition ๋ถ๋ถ์์ ์์ฑํ ๋ณ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ํค-๊ฐ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค."Rule" : { "name": "slot_sample", "result": {"value": "[$s]"}, "condition": [ {"ext": "three[$s=3]"} ] }
์ด ๊ท์น์ ํ ์คํธ "I am three years old"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'text': 'three', 'extent': [(5, 10)], 'value': '3', 'name': 'slot_sample'}
-
๊ท์น ์์ฑ ๋ฐฉ๋ฒ (์ค๊ธ๋ ๋ฒจ I)
์๋ ๊ท์น์ ์ฐธ๊ณ ํ์. condition ์์ ๋ณ์๋ฅผ ์์ฑํ๊ณ ์๋๋ฐ, ๋ณ์์ ๊ฐ์ ํด๋นํ๋ ๋ถ๋ถ์ ์๊ดํธ๋ก ๋๋ฌ์ธ์ or ์ฐ์ฐ(|)์ผ๋ก ๊ธฐ์ ํ๋ ๊ฒฝ์ฐ, ์ด ๋ถ๋ถ์ด ์ง์ ๋ณ์์ ๊ฐ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
"Rule" : { "name": "slot_sample", "result": {"value": "[$s]"}, "condition": [ {"ext": "[$s=(dog|cat)]"} ] }
์ด ๊ท์น์ ํ ์คํธ "I have a dog and a cat"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'text': 'dog', 'value': 'dog', 'name': 'slot_sample', 'extent': [(9, 12)]} {'text': 'cat', 'value': 'cat', 'name': 'slot_sample', 'extent': [(19, 22)]}
์ ๊ท์น ์์์์๋ ๋ณ์์ ๊ฐ์ ์๊ดํธ๊ฐ ๋ฑ์ฅํ์๋๋ฐ, ๋ฐ๋๋ก ์๊ดํธ์ |(or) ์ฐ์ฐ์ ์์ชฝ์ ๋ณ์ ๊ฐ์ ์ง์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก , ์ด ๋ ๊ฐ์ง๋ฅผ ์์ด์ ์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ์๋ ์์๋ฅผ ๊ด์ฐฐํด๋ณด์. ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ | ํํ์ ์ผ์ชฝ ๋ถ๋ถ์ (dog|puppy) ๋ฅผ ๋ง์กฑํ ๊ฒฝ์ฐ $s ๋ณ์์
๊ฐ์์ง
๊ฐ์ ๋ฃ๋๋ค๋ ๋ด์ฉ์ด๋ฉฐ, ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ (cat|kitten) ์ ๋ง์กฑํ ๊ฒฝ์ฐ ๊ทธ ํ ์คํธ ์์ฒด๋ฅผ $s ๋ณ์์ ๋ฃ๋๋ค๋ ๋ด์ฉ์ด๋ค."Rule" : { "name": "slot_sample", "result": {"value": "[$s]"}, "condition": [ {"ext": "((dog|puppy)[$s=๊ฐ์์ง]|[$s=(cat|kitten)])"} ] }
์ด ๊ท์น์ ํ ์คํธ "I have a dog and a kitten."์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'text': 'dog', 'name': 'slot_sample', 'value': '๊ฐ์์ง', 'extent': [(9, 12)]} {'text': 'kitten', 'name': 'slot_sample', 'value': 'kitten', 'extent': [(17, 23)]}
-
๊ท์น ์์ฑ ๋ฐฉ๋ฒ (์ค๊ธ๋ ๋ฒจ II)
์ง๊ธ๊น์ง๋ condition ๋ถ๋ถ์ 1๊ฐ์ ์กฐ๊ฑด๋ง ํฌํจ์์ผฐ์ผ๋, 2๊ฐ ์ด์์ ์กฐ๊ฑด์ ํฌํจ์ํฌ ์ ์๋ค. ์๋ ์์๋ฅผ ๋ณด์.
"Rule" : { "name": "slot_sample", "result": {"value": "[$s]"}, "condition": [ {"ext": "(one[$s=1]|two[$s=2])"}, {"ext": "dollar"} ] }
์ด ๊ท์น์ ํ ์คํธ "I have two dollars!"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'extent': [(7, 10), (11, 17)], 'name': 'slot_sample', 'text': 'twodollar', 'value': '2'}
๊ธฐ์ ํ์๋ ์กฐ๊ฑด๋ค๊ณผ ๊ฒฐ๊ณผ๋ฌผ์ ๊ด์ฐฐํด๋ณด๋ฉด, ๊ฒฐ๊ตญ 2๊ฐ์ ์กฐ๊ฑด๋ค์
(one[$s=1]|two[$s=2])dolloar
๋ก์จ 1๊ฐ์ ์กฐ๊ฑด์ผ๋ก ํฉ์น ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๋ฏ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด๋ค์ 1๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์ฝ๊ฒ ํฉ์น ์ ์์์๋ ๋ถ๊ตฌํ๊ณ , condition ๋ถ๋ถ์์ ์ฌ๋ฌ ์กฐ๊ฑด๋ค์ ๋ ์ ์๋๋ก ํ ๊ฒ์ ์๋์ ๊ท์น์ ๋ณด๋ฉด ์ ์ ์๋ค. ์ด ๊ท์น์ ์ธ๋ป ๋ณด๋ฉด ์ ๊ท์น๊ณผ ๋์ผํด ๋ณด์ด์ง๋ง, ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์ ํค๊ฐext
๊ฐ ์๋next
๋ผ๋ ์ ์ ์ ์ ์๋ค. ์กฐ๊ฑด์ ํค๊ฐext
์ธ ๊ฒ์ ๊ฒฐ๊ณผ๋ฌผ ํ ์คํธ extent(๋ฒ์)์ ํฌํจ์ด ๋๋ค๋ ์๋ฏธ์ด๋ฉฐ,next
๋ ํฌํจ๋์ง ์๋๋ค๋ ๋ป์ด๋ค."Rule" : { "name": "slot_sample", "result": {"value": "[$s]"}, "condition": [ {"next": "(one[$s=1]|two[$s=2])"}, {"ext": "dollar"} ] }
์ด ๊ท์น์ ํ ์คํธ "I have two dollars!"์ ์ ์ฉํ๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋๋ค.
{'extent': [(11, 17)], 'name': 'slot_sample', 'text': 'dollar', 'value': '2'}
๊ฐ ์กฐ๊ฑด์ ํค๋
ext
๋๋next
์ค์ ํ๋๋ง์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์กฐ๊ฑด์ ์ฒดํฌํ๋ฉด์๋ ์ํ๋ ๋ถ๋ถ๋ง ๊ฒฐ๊ณผ๋ฌผ ํ ์คํธ ๋ฒ์์ ํฌํจํ ์ ์๊ฒ ๋๋ค.
-
์ฌ์ (dictionary)์ ์ถ์ถํ๊ณ ์ ํ๋ ๋์์ด Named entity (NE)๋ผ๊ณ ๊ฐ์ ํ๋ฉฐ, NE tag (์: Person(์ฌ๋์ด๋ฆ), Book(์ฑ ์ ๋ชฉ) ๋ฑ)์ ๋ํ ์ฌ์ ์ ๋์ดํ๋ฉด ์ด ์ฌ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋งค์นญ๋๋ NE tag๊ฐ ์ถ์ถ๋๋ค. ๊ท์น ๊ธฐ๋ฐ ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ, ๊ทธ ๊ฐ์ด ์ ๊ทํ(์: 21์ธ๊ธฐ --> ์ซ์21๋ก ์ธ์)๋์ง๋ ์๋๋ค.
-
์์ฑ๋ฒ ์ถ๊ฐ๋ ์์ (To be continued..)
LICENSE ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋, ๋ณธ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ ๋๋ ์ฐ๊ตฌ๋ ผ๋ฌธ์ ์๋์ ํญ๋ชฉ๋ค ์ค์ ์ ์ด๋ 1๊ฐ๋ฅผ reference ๋ก citation ํ๋๋ก ํ๋ค.
ํนํ, ์๋ ๋ ๊ฐ์ง์ ํด๋น๋๋ ๊ฒฝ์ฐ์๋ ๋ณธ ํ๋ก์ ํธ ์ฑ ์์( pinodewaider_at_gmail.com )์๊ฒ ์ฐ๋ฝํ์ฌ ์ ํด/์ ์์ ๋ ผ์ํ ์ ์๋ค.
- slotminer ํ๋ก์ ํธ๋ฅผ ์๋ฆฌ ์ฌ์
์ ํ์ฉํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ
- ์ฐ๊ตฌ, ๋น์๋ฆฌ ์ฌ์ ์๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉ ๊ฐ๋ฅ(๋จ, ์์ ๊ฐ ๊ธฐ๋ฅ ๋ณ๋ก 1๊ฐ ์ด์์ reference ๋ช ์)
- ํฅ์๋ ๋ฒ์ (์: ์๊ฐ์ ๋ณด ์ถ์ถ ๊ท์นํ์ผ ๊ณต๊ฐ๋ฒ์ ๋ณด๋ค ํฅ์๋ ๋ฒ์ )์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ
- ๋ณธํ๋ก์ ํธ์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ๋๊ตฌ๋ ์ด์ฉ ๊ฐ๋ฅํ์ง๋ง, ์ฑ
์์๊ฐ ์ง์ ๊ด๋ฆฌํ๋
ํฅ์๋ ๋ฒ์ ์ ๊ท์น ํ์ผ
์ open ๋์ด์์ง ์์ผ๋ฉฐ, ์ด ํ์ผ์ ์ป๊ณ ์ถ์ ๊ฒฝ์ฐ
- ๋ณธํ๋ก์ ํธ์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ๋๊ตฌ๋ ์ด์ฉ ๊ฐ๋ฅํ์ง๋ง, ์ฑ
์์๊ฐ ์ง์ ๊ด๋ฆฌํ๋