hanlint 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +23 -5
- package/data/adjectiveStems.txt +118 -0
- package/data/baselineAnchors.txt +3 -0
- package/data/blindEvaluation.schema.json +26 -0
- package/data/bridgeOpeners.txt +10 -0
- package/data/candidateActionNouns.txt +39 -0
- package/data/candidateSplitEndings.txt +13 -0
- package/data/cliches.json +1 -1
- package/data/confusable.json +2 -2
- package/data/deixis.txt +10 -3
- package/data/draftHistory.txt +10 -0
- package/data/easyWords.json +0 -42
- package/data/enoughMarkers.txt +6 -0
- package/data/entailmentPredictions.schema.json +52 -0
- package/data/euiNouns.txt +3 -4
- package/data/evidenceEntailmentBenchmark.schema.json +126 -0
- package/data/exemplars.json +347 -0
- package/data/holeKinds.json +1 -2
- package/data/iVerbStems.txt +26 -0
- package/data/inNouns.txt +147 -0
- package/data/irregularStems.txt +64 -0
- package/data/nonNouns.txt +153 -0
- package/data/panelAssignmentReview.schema.json +117 -0
- package/data/panelJudgePredictions.schema.json +78 -0
- package/data/panelReviewBatch.schema.json +79 -0
- package/data/panelTrialSet.schema.json +44 -0
- package/data/patterns.json +114 -0
- package/data/profiles.json +1 -0
- package/data/readerCalls.txt +12 -7
- package/data/redundantPair.json +1 -1
- package/data/rieulStems.txt +30 -0
- package/data/ruleCategories.json +56 -0
- package/data/ruleDocs.json +29 -17
- package/data/ruleMechanisms.json +56 -0
- package/data/spacing.json +0 -12
- package/data/spelling.json +6 -24
- package/data/translationese.json +10 -0
- package/data/verbTails.txt +17 -0
- package/data/version.json +1 -1
- package/data/writingBrief.schema.json +64 -0
- package/data/writingBriefV2.schema.json +116 -0
- package/data/writingTrial.schema.json +36 -0
- package/package.json +13 -5
- package/src/analysis/grammar/ending.js +336 -0
- package/src/analysis/grammar/hangul.js +94 -0
- package/src/analysis/grammar/index.js +5 -0
- package/src/analysis/grammar/josa.js +73 -0
- package/src/analysis/grammar/register.js +115 -0
- package/src/analysis/grammar/voice.js +43 -0
- package/src/analysis/index.js +4 -31
- package/src/analysis/josa.js +2 -0
- package/src/analysis/{surface/splitSentences.js → splitSentences.js} +1 -1
- package/src/analysis/{surface/tokenize.js → tokenize.js} +70 -13
- package/src/baseline/store.js +114 -0
- package/src/cli/main.js +506 -58
- package/src/cli/walk.js +30 -0
- package/src/cli/welcome.js +52 -0
- package/src/config/settings.js +103 -8
- package/src/data/exemplars.js +177 -0
- package/src/data/load.js +10 -0
- package/src/data/operations.js +278 -0
- package/src/data/patches.js +125 -0
- package/src/data/patterns.js +48 -0
- package/src/data/profiles.js +102 -0
- package/src/document/model.js +2 -0
- package/src/document/parseMarkdown.js +84 -11
- package/src/edit/applyFixes.js +0 -0
- package/src/fingerprint/build.js +50 -32
- package/src/{rules/shared → fingerprint}/codeBlocks.js +11 -11
- package/src/fingerprint/codeMarkers.js +73 -0
- package/src/fingerprint/markers.js +9 -0
- package/src/fingerprint/readerState.js +126 -0
- package/src/fingerprint/sourceSentence.js +37 -0
- package/src/fingerprint/topics.js +1 -1
- package/src/index.js +2 -16
- package/src/report/compactReport.js +6 -1
- package/src/report/fingerprintJson.js +8 -3
- package/src/report/jsonReport.js +50 -3
- package/src/report/operationMatch.js +31 -0
- package/src/report/patchMatch.js +44 -0
- package/src/report/registerMatch.js +40 -0
- package/src/report/textReport.js +41 -5
- package/src/rules/code/duplicateBlock.js +4 -3
- package/src/rules/code/firstResultDistance.js +1 -0
- package/src/rules/code/inputFileSource.js +23 -68
- package/src/rules/code/installImport.js +4 -4
- package/src/rules/code/platformApi.js +7 -6
- package/src/rules/document/countMismatch.js +22 -6
- package/src/rules/document/enoughOnce.js +25 -0
- package/src/rules/document/fieldEcho.js +38 -0
- package/src/rules/document/keywordHeading.js +27 -0
- package/src/rules/document/keywordMissing.js +1 -0
- package/src/rules/document/noQuestion.js +5 -1
- package/src/rules/document/promiseRecall.js +4 -2
- package/src/rules/document/tableOddCell.js +60 -0
- package/src/rules/finding.js +24 -2
- package/src/rules/orthography/confusable.js +1 -0
- package/src/rules/orthography/spacing.js +1 -0
- package/src/rules/orthography/spelling.js +1 -0
- package/src/rules/paragraph/factListParagraph.js +1 -0
- package/src/rules/paragraph/paraFragment.js +21 -11
- package/src/rules/paragraph/topicBreak.js +1 -0
- package/src/rules/registry.js +72 -3
- package/src/rules/sentence/cliche.js +1 -0
- package/src/rules/sentence/connectorRepeat.js +8 -7
- package/src/rules/sentence/danglingDeixis.js +8 -3
- package/src/rules/sentence/dash.js +2 -1
- package/src/rules/sentence/deixis.js +7 -3
- package/src/rules/sentence/doubleNegative.js +4 -1
- package/src/rules/sentence/doublePassive.js +38 -1
- package/src/rules/sentence/draftHistory.js +24 -0
- package/src/rules/sentence/ellipsis.js +17 -3
- package/src/rules/sentence/endingRepeat.js +6 -2
- package/src/rules/sentence/euiChain.js +3 -2
- package/src/rules/sentence/fillerOpener.js +1 -0
- package/src/rules/sentence/hardWord.js +1 -0
- package/src/rules/sentence/imperativePeriod.js +2 -1
- package/src/rules/sentence/japaneseLoan.js +1 -0
- package/src/rules/sentence/longSentence.js +3 -1
- package/src/rules/sentence/negationRedefine.js +10 -1
- package/src/rules/sentence/nounPile.js +1 -0
- package/src/rules/sentence/numberOrphan.js +45 -0
- package/src/rules/sentence/outsideProfile.js +68 -0
- package/src/rules/sentence/redundantPair.js +1 -0
- package/src/rules/sentence/translationese.js +1 -0
- package/src/rules/shared/candidates.js +129 -0
- package/src/rules/shared/dictionaryRule.js +12 -2
- package/src/rules/shared/localAntecedent.js +12 -0
- package/src/rules/shared/repeat.js +48 -0
- package/src/rules/structure/blockUnread.js +33 -0
- package/src/rules/structure/bridgeRepeat.js +40 -0
- package/src/rules/structure/emojiBullet.js +1 -0
- package/src/rules/structure/headingQuestion.js +19 -0
- package/src/rules/structure/headingSentence.js +9 -4
- package/src/rules/structure/headingSkip.js +1 -0
- package/src/rules/structure/headingUniform.js +9 -17
- package/src/rules/structure/introImage.js +19 -0
- package/src/rules/structure/introLong.js +1 -0
- package/src/rules/structure/loneSubheading.js +42 -0
- package/src/rules/structure/moreLater.js +48 -0
- package/src/rules/structure/sectionNoProse.js +1 -0
- package/src/rules/structure/sectionResult.js +3 -2
- package/src/text.js +19 -0
- package/src/rules/document/readerAbsent.js +0 -11
- package/src/rules/shared/runs.js +0 -22
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entry": [
|
|
3
|
+
{
|
|
4
|
+
"rule": "blockUnread",
|
|
5
|
+
"before": "```python\nprint(count)\n```\n\n```text\n5247597\n```\n\n## 다음 절\n\n마무리입니다.\n",
|
|
6
|
+
"after": "```python\nprint(count)\n```\n\n```text\n5247597\n```\n\n답은 5백만 줄이 조금 넘습니다. 이 숫자가 나오면 파일을 다 읽은 것입니다.\n",
|
|
7
|
+
"moved": "출력 바로 아래에 그 숫자를 읽어 주는 문장을 붙였다"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"rule": "bridgeRepeat",
|
|
11
|
+
"before": "## 파일 열기\n\n파일을 엽니다. 이번에는 값을 넣습니다.\n\n## 값 넣기\n\n값을 넣습니다. 이번에는 표를 만듭니다.\n\n## 표 만들기\n\n표를 만듭니다. 이번에는 저장합니다.\n\n## 저장하기\n\n저장합니다.\n",
|
|
12
|
+
"after": "## 파일 열기\n\n파일을 엽니다. 열린 파일은 아직 비어 있습니다.\n\n## 값은 어디에 넣나?\n\n값을 넣습니다. 넣은 값은 아직 표가 아닙니다.\n\n## 표가 만들어지는 자리\n\n표를 만듭니다. 만든 표는 아직 파일에 없습니다.\n\n## 저장\n\n저장합니다.\n",
|
|
13
|
+
"moved": "절마다 되풀이되던 예고 대신 방금 만든 것을 이름으로 부르고 아직 못 하는 일을 적었다"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"rule": "cliche",
|
|
17
|
+
"before": "핵심은 속도입니다.",
|
|
18
|
+
"after": "같은 질문에 pandas 는 3.7초, Polars 는 0.18초가 걸립니다.",
|
|
19
|
+
"moved": "포장하는 말을 지우고 핵심이라던 것을 그 자리에 숫자로 썼다"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"rule": "confusable",
|
|
23
|
+
"before": "학생으로써 할 일을 합니다.",
|
|
24
|
+
"after": "학생으로서 할 일을 합니다.",
|
|
25
|
+
"moved": "자격은 로서, 수단은 로써다"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"rule": "connectorRepeat",
|
|
29
|
+
"before": "그런데 표가 큽니다. 그런데 열은 두 개면 됩니다.",
|
|
30
|
+
"after": "그런데 표가 큽니다. 필요한 열은 두 개뿐입니다.",
|
|
31
|
+
"moved": "둘째 문장의 접속부사를 지우고 앞 문장이 만든 것을 이어받게 했다"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"rule": "countMismatch",
|
|
35
|
+
"before": "여섯 가지를 소개합니다.\n\n## 절\n\n다섯 가지를 봤습니다.\n",
|
|
36
|
+
"after": "여섯 가지를 소개합니다.\n\n## 절\n\n여섯 가지를 봤습니다.\n",
|
|
37
|
+
"moved": "도입이 약속한 수와 결말이 센 수를 맞췄다"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"rule": "danglingDeixis",
|
|
41
|
+
"before": "터미널을 엽니다.\n\n이것을 실행합니다.\n",
|
|
42
|
+
"after": "터미널을 엽니다.\n\n`[실제 파일 이름]` 을 실행합니다.\n",
|
|
43
|
+
"moved": "지시어 자리에 글쓴이가 확인한 실제 이름을 쓴다. 대괄호 문구를 그대로 내보내지 않는다"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"rule": "dash",
|
|
47
|
+
"before": "결과는 둘입니다 {em} 빠르거나 느리거나.",
|
|
48
|
+
"after": "결과는 둘입니다. 빠르거나 느립니다.",
|
|
49
|
+
"moved": "긴 줄표를 마침표로 끊었다"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"rule": "deixis",
|
|
53
|
+
"before": "표를 엽니다. 이것을 표에 다시 넣습니다.",
|
|
54
|
+
"after": "표를 엽니다. 첫 열의 값을 표에 다시 넣습니다.",
|
|
55
|
+
"moved": "지시어를 독자가 화면에서 찾을 이름으로 바꿨다"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"rule": "doubleNegative",
|
|
59
|
+
"before": "설치하지 않으면 안 됩니다.",
|
|
60
|
+
"after": "먼저 설치합니다.",
|
|
61
|
+
"moved": "부정을 두 번 겹치지 않고 할 일을 바로 시켰다"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"rule": "doublePassive",
|
|
65
|
+
"before": "결과가 저장되어집니다.",
|
|
66
|
+
"after": "결과가 저장됩니다.",
|
|
67
|
+
"moved": "피동을 하나로 줄였다"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"rule": "draftHistory",
|
|
71
|
+
"before": "이 코드가 그대로 도는 것을 확인했습니다.",
|
|
72
|
+
"after": "이 코드는 `ibis-framework[duckdb]` 만 설치해도 돕니다.",
|
|
73
|
+
"moved": "글쓴이가 확인한 과정을 지우고 알아낸 사실만 남겼다"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"rule": "duplicateBlock",
|
|
77
|
+
"before": "```text\n한 줄\n두 줄\n세 줄\n네 줄\n다섯 줄\n```\n\n같은 것을 다시 싣습니다.\n\n```text\n한 줄\n두 줄\n세 줄\n네 줄\n다섯 줄\n```\n",
|
|
78
|
+
"after": "```text\n한 줄\n두 줄\n세 줄\n네 줄\n다섯 줄\n```\n\n두 번째 실행은 셋째 줄만 다르고 나머지는 위와 같습니다.\n",
|
|
79
|
+
"moved": "거의 같은 블록을 다시 싣지 않고 달라진 줄만 말했다"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"rule": "ellipsis",
|
|
83
|
+
"before": "속도는 조금 느려집니다...",
|
|
84
|
+
"after": "속도는 조금 느려집니다.",
|
|
85
|
+
"moved": "말끝을 흐리지 않고 같은 사실로 문장을 끝냈다"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"rule": "emojiBullet",
|
|
89
|
+
"before": "- ✅ 파일을 만듭니다\n",
|
|
90
|
+
"after": "- 파일을 만듭니다\n",
|
|
91
|
+
"moved": "이모지를 빼고 항목의 말로만 뜻을 냈다"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"rule": "endingRepeat",
|
|
95
|
+
"before": "파일을 엽니다. 값을 넣습니다. 표를 만듭니다. 화면을 봅니다.",
|
|
96
|
+
"after": "파일을 엽니다. 값을 넣으면 표가 생깁니다. 그래서 화면에서 표를 확인합니다.",
|
|
97
|
+
"moved": "네 문장을 조건과 인과로 이어 같은 사실을 세 문장에 담았다"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"rule": "enoughOnce",
|
|
101
|
+
"before": "## 첫 절\n\n여기까지면 만들어 쓰는 데 충분합니다.\n\n## 둘째 절\n\n여기까지면 혼자 쓰는 데 충분합니다.\n",
|
|
102
|
+
"after": "## 첫 절\n\n여기까지면 만들어 쓰는 데 충분합니다.\n\n## 표가 한 대에 안 들어가면?\n\n다음 절의 방법이 필요합니다.\n",
|
|
103
|
+
"moved": "끊는 문장을 한 번만 두고 나머지는 다음 절이 필요한 이유로 바꿨다"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"rule": "euiChain",
|
|
107
|
+
"before": "회사의 팀의 결정의 근거를 봅니다.",
|
|
108
|
+
"after": "그 팀이 왜 그렇게 정했는지 근거를 봅니다.",
|
|
109
|
+
"moved": "관형격을 풀어 누가 무엇을 했는지 드러냈다"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"rule": "factListParagraph",
|
|
113
|
+
"before": "값이 있습니다. 칸은 빕니다. 순서가 깨집니다.",
|
|
114
|
+
"after": "병합 셀은 첫 칸에만 값이 들어 있고 나머지는 비어 있습니다. 그대로 정렬하면 빈 칸이 값과 떨어져 순서가 깨집니다.",
|
|
115
|
+
"moved": "나란히 놓인 사실 사이에 이유를 넣어 이었다"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"rule": "fieldEcho",
|
|
119
|
+
"before": "---\nreaderTakeaway: 표를 언제 어느 도구로 고르나\n---\n\n엑셀이 멈춥니다.\n\n## 절\n\n설치 방법입니다.\n",
|
|
120
|
+
"after": "---\nreaderTakeaway: 표를 언제 어느 도구로 고르나\n---\n\n엑셀이 멈춥니다.\n\n## 절\n\n표가 작으면 pandas 로 고르고 커지면 Polars 로 옮깁니다.\n",
|
|
121
|
+
"moved": "미리보기가 약속한 것을 본문이 그 말로 답하게 했다"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"rule": "fillerOpener",
|
|
125
|
+
"before": "다음으로, 압축 파일을 풉니다.",
|
|
126
|
+
"after": "압축 파일을 풉니다.",
|
|
127
|
+
"moved": "순서 표지만 지우고 나머지 사실은 바꾸지 않았다"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"rule": "firstResultDistance",
|
|
131
|
+
"before": "첫 문단입니다.\n\n둘째 문단입니다.\n\n셋째 문단입니다.\n\n넷째 문단입니다.\n\n다섯째 문단입니다.\n\n```python\nprint(1)\n```\n",
|
|
132
|
+
"after": "첫 문단입니다.\n\n둘째 문단입니다.\n\n```python\nprint(1)\n```\n",
|
|
133
|
+
"moved": "첫 결과를 첫 화면 안으로 끌어올렸다"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"rule": "hardWord",
|
|
137
|
+
"before": "금일 중으로 소정의 양식을 제출합니다.",
|
|
138
|
+
"after": "오늘 안에 정해진 양식을 냅니다.",
|
|
139
|
+
"moved": "관청 말을 평소에 쓰는 말로 바꿨다"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"rule": "headingQuestion",
|
|
143
|
+
"before": "## 파일은 어디에 생길까요?\n\n첫 문단.\n\n## 왜 안 열릴까요?\n\n둘째 문단.\n\n## 크기는 어떻게 바꿀까요?\n\n셋째 문단.\n",
|
|
144
|
+
"after": "## 파일이 생기는 자리\n\n첫 문단.\n\n## 왜 안 열릴까요?\n\n둘째 문단.\n\n## 인쇄용 크기로 다시 저장\n\n셋째 문단.\n",
|
|
145
|
+
"moved": "질문 제목을 하나만 남기고 나머지는 행동과 결과로 바꿨다"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"rule": "headingSentence",
|
|
149
|
+
"before": "## 표가 제대로 들어왔는지 확인합니다\n\n열 다섯 개가 모두 보이면 된 것입니다.\n",
|
|
150
|
+
"after": "## 표가 제대로 들어왔는지 확인\n\n열 다섯 개가 모두 보이면 된 것입니다.\n",
|
|
151
|
+
"moved": "본문 문장 꼴이던 제목을 목차에서 대상이 보이는 짧은 이름으로 줄였다"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"rule": "headingSkip",
|
|
155
|
+
"before": "## 절\n\n첫 문단.\n\n#### 너무 깊은 제목\n\n둘째 문단.\n",
|
|
156
|
+
"after": "## 절\n\n첫 문단.\n\n### 한 단계 아래 제목\n\n둘째 문단.\n",
|
|
157
|
+
"moved": "건너뛴 제목 수준을 한 단계로 되돌렸다"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"rule": "headingUniform",
|
|
161
|
+
"before": "## 파일 열기\n\n하나.\n\n## 값 넣기\n\n둘.\n\n## 표 만들기\n\n셋.\n\n## 결과 보기\n\n넷.\n",
|
|
162
|
+
"after": "## 파일 열기\n\n하나.\n\n## 값은 어디에 넣나?\n\n둘.\n\n## 표가 만들어지는 자리\n\n셋.\n\n## 결과 확인\n\n넷.\n",
|
|
163
|
+
"moved": "한 어미로 끝나던 목차에 형태를 섞어 과정으로 읽히게 했다"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"rule": "imperativePeriod",
|
|
167
|
+
"before": "파일을 열어 보세요{dot}",
|
|
168
|
+
"after": "파일을 열어 보세요",
|
|
169
|
+
"moved": "명령과 권유의 뜻은 그대로 두고 마지막 마침표만 뺐다"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"rule": "inputFileSource",
|
|
173
|
+
"before": "```python\n표 = open(\"sales.xlsx\")\n```\n",
|
|
174
|
+
"after": "앞 절의 make_sales.py 가 sales.xlsx 를 만듭니다.\n\n```python\n표 = open(\"sales.xlsx\")\n```\n",
|
|
175
|
+
"moved": "읽는 파일을 만드는 자리를 앞에 두었다"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"rule": "installImport",
|
|
179
|
+
"before": "```bash\npip install duckdb\n```\n\n```python\nimport polars\n```\n",
|
|
180
|
+
"after": "```bash\npip install duckdb polars\n```\n\n```python\nimport polars\n```\n",
|
|
181
|
+
"moved": "코드가 부르는 패키지를 설치 줄에 넣었다"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"rule": "introImage",
|
|
185
|
+
"before": "도입 문단입니다.\n\n\n\n\n\n## 절\n\n본문입니다.\n",
|
|
186
|
+
"after": "도입 문단입니다.\n\n\n\n## 절\n\n본문입니다.\n\n\n",
|
|
187
|
+
"moved": "도입의 그림을 한 장으로 줄이고 나머지를 설명하는 절로 내렸다"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"rule": "introLong",
|
|
191
|
+
"before": "하나.\n\n둘.\n\n셋.\n\n넷.\n\n다섯.\n\n## 절\n\n본문입니다.\n",
|
|
192
|
+
"after": "하나.\n\n둘.\n\n## 절\n\n본문입니다.\n",
|
|
193
|
+
"moved": "미룬 배경 설명을 걷고 도입을 네 문단 안으로 줄였다"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"rule": "japaneseLoan",
|
|
197
|
+
"before": "구좌 잔고를 익일에 확인합니다.",
|
|
198
|
+
"after": "계좌 잔액을 다음 날에 확인합니다.",
|
|
199
|
+
"moved": "일본어투 낱말을 우리말로 바꿨다"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"rule": "keywordMissing",
|
|
203
|
+
"before": "---\ntitle: 표를 빠르게 다루기\nprimaryKeyword: 파이썬 데이터프레임 라이브러리\n---\n\n엑셀이 멈춥니다.\n",
|
|
204
|
+
"after": "---\ntitle: 파이썬 데이터프레임 라이브러리 여섯 가지\nprimaryKeyword: 파이썬 데이터프레임 라이브러리\n---\n\n엑셀이 멈춥니다.\n",
|
|
205
|
+
"moved": "독자가 검색창에 친 말을 제목에 그대로 넣었다"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"rule": "keywordHeading",
|
|
209
|
+
"before": "---\ntitle: 파이썬 QR코드 만들기\nprimaryKeyword: 파이썬 QR코드\n---\n\n도입.\n\n## QR코드 파일 만들기\n\n하나.\n\n## 휴대폰이 읽는가?\n\n둘.\n\n## 인쇄물에 넣을 크기\n\n셋.\n",
|
|
210
|
+
"after": "---\ntitle: 파이썬 QR코드 만들기\nprimaryKeyword: 파이썬 QR코드\n---\n\n도입.\n\n## 파이썬으로 QR코드 파일 만들기\n\n하나.\n\n## 휴대폰이 읽는가?\n\n둘.\n\n## 인쇄물에 넣을 크기\n\n셋.\n",
|
|
211
|
+
"moved": "제목이 약속한 말을 그 일을 맡은 절 제목에 한 번 넣었다"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"rule": "loneSubheading",
|
|
215
|
+
"before": "## 파일 저장 자리\n\n첫 문단.\n\n### 파일 저장\n\n둘째 문단.\n\n## 다음 절\n\n끝.\n",
|
|
216
|
+
"after": "## 파일 저장 자리\n\n첫 문단.\n\n둘째 문단.\n\n## 어디에 저장됐나?\n\n끝.\n",
|
|
217
|
+
"moved": "새 말이 없는 외동 소제목을 지우고 본문을 절 제목 아래로 올렸다"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"rule": "longSentence",
|
|
221
|
+
"before": "표를 열고 열 이름을 하나씩 확인한 뒤 필요한 두 열만 남기고 나머지 열을 전부 지운 다음 값을 기준으로 정렬해서 상위 열 줄만 뽑아 새 이름으로 다시 저장하면 원하던 결과가 그대로 나오는 것을 볼 수 있습니다.",
|
|
222
|
+
"after": "표를 열어 열 이름을 확인합니다. 필요한 두 열만 남기고 정렬한 뒤 상위 열 줄을 저장합니다.",
|
|
223
|
+
"moved": "한 문장에 몰아넣은 단계를 둘로 끊었다"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"rule": "moreLater",
|
|
227
|
+
"before": "## 절\n\n본문.\n\n## 더 해 볼 것\n\n- DuckDB 도 엑셀 파일을 읽습니다. 확장을 한 번 설치하고 나면 함수 하나로 부릅니다. 다만 옛 확장자는 안 되고 새 확장자만 됩니다. 그래서 파일 확장자를 먼저 봅니다. 확장자가 다르면 엑셀에서 열어 새 확장자로 바꿔 저장한 뒤에 다시 부릅니다. 이 순서를 지키지 않으면 확장을 깔고도 파일을 못 엽니다.\n",
|
|
228
|
+
"after": "## 엑셀은 어떻게 읽나?\n\n본문.\n\n## 더 해 볼 것\n\n- DuckDB 도 엑셀을 읽습니다. read_xlsx 한 줄이면 됩니다.\n",
|
|
229
|
+
"moved": "미룬 항목을 한 줄과 코드 한 줄로 줄였다"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"rule": "negationRedefine",
|
|
233
|
+
"before": "단순한 도구가 아닙니다. 글쓰기 습관을 바꾸는 장치입니다.",
|
|
234
|
+
"after": "이 도구는 같은 지적을 두 번 받지 않게 만듭니다.",
|
|
235
|
+
"moved": "부정하고 재정의하는 대구를 지우고 하는 일을 바로 썼다"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"rule": "noQuestion",
|
|
239
|
+
"before": "## 절\n\n파일을 엽니다.\n\n## 다음 절\n\n표가 생깁니다.\n",
|
|
240
|
+
"after": "## 절\n\n파일을 엽니다.\n\n## 다음 절\n\n그럼 표는 어디에 생겼을까요? 실행한 폴더에 있습니다.\n",
|
|
241
|
+
"moved": "독자가 품을 의문을 대신 묻고 다음 문장에서 답했다"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"rule": "nounPile",
|
|
245
|
+
"before": "가상환경 생성 후 패키지 설치 확인 절차를 따릅니다.",
|
|
246
|
+
"after": "가상환경을 만든 뒤 패키지가 깔렸는지 확인합니다.",
|
|
247
|
+
"moved": "쌓인 명사를 동사로 되돌려 무엇이 무엇의 목적어인지 드러냈다"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"rule": "nounPile",
|
|
251
|
+
"presets": [
|
|
252
|
+
"report"
|
|
253
|
+
],
|
|
254
|
+
"before": "지역 경제 활성화 지원 사업 추진 계획을 발표했습니다.",
|
|
255
|
+
"after": "지역 경제를 활성화하려고 지원 사업을 추진한다는 계획을 발표했습니다.",
|
|
256
|
+
"moved": "보고서의 사업 이름은 남기고 관계를 동사로 풀었다"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"rule": "nounPile",
|
|
260
|
+
"presets": [
|
|
261
|
+
"docs",
|
|
262
|
+
"encyclopedia"
|
|
263
|
+
],
|
|
264
|
+
"before": "사용자 인증 토큰 갱신 실패 처리 절차를 설명합니다.",
|
|
265
|
+
"after": "사용자 인증 토큰을 갱신하지 못했을 때 어떻게 처리하는지 설명합니다.",
|
|
266
|
+
"moved": "기술 용어는 남기고 실패 조건과 처리 행동을 풀어 썼다"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"rule": "numberOrphan",
|
|
270
|
+
"before": "메모리 최대치는 453MB에서 700MB로 올라갔습니다.",
|
|
271
|
+
"after": "표를 통째로 올린 직후가 453MB였고 넘기고 나자 700MB가 됐습니다.",
|
|
272
|
+
"moved": "기준값이 어디서 나온 값인지 그 자리에서 밝혔다"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"rule": "outsideProfile",
|
|
276
|
+
"before": "파일을 열고 표를 확인한 다음 열 다섯 개의 이름을 하나씩 읽어 두고 값을 고친 뒤 저장하고 폴더를 만들고 파일을 옮기고 이름을 바꾸고 목록을 다시 보고 끝낸 다음 다시 처음부터 열어 표가 보이면 열의 순서를 적어 두고 값을 고친 뒤 저장하고 닫고 다시 열어 확인하고 이름을 바꾼 파일을 목록에서 찾아 열고 표를 확인하고 값을 고치고 저장한 다음 폴더를 정리하고 파일을 옮기고 목록을 다시 보고 끝냅니다.",
|
|
277
|
+
"after": "파일을 열고 표를 확인합니다. 열 다섯 개의 이름을 읽어 두고 값을 고친 뒤 저장합니다. 폴더를 만들고 파일을 옮긴 뒤 이름을 바꿉니다. 목록을 다시 보고 끝냅니다.",
|
|
278
|
+
"moved": "같은 종류 글의 99% 가 들어오는 길이 안으로 문장을 넷으로 나눴다"
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"rule": "paraFragment",
|
|
282
|
+
"before": "표를 엽니다.\n\n값을 넣습니다.\n\n화면을 봅니다.\n",
|
|
283
|
+
"after": "표를 열어 값을 넣으면 화면에 다섯 열이 보입니다. 열 이름이 첫 줄에 그대로 있으면 제대로 읽은 것입니다.\n",
|
|
284
|
+
"moved": "줄바꿈을 화제가 바뀌는 자리에만 두고 조각을 한 문단으로 묶었다"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"rule": "platformApi",
|
|
288
|
+
"before": "```python\nprint(process.memory_info().peak_wset)\n```\n",
|
|
289
|
+
"after": "```python\nimport tracemalloc\ntracemalloc.start()\nprint(tracemalloc.get_traced_memory()[1])\n```\n",
|
|
290
|
+
"moved": "한 운영체제에서만 도는 API 를 표준 라이브러리의 어디서나 도는 것으로 바꿨다"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"rule": "promiseRecall",
|
|
294
|
+
"before": "자세한 것은 뒤에서 다루겠습니다.\n\n## 절\n\n다른 이야기로 끝납니다.\n",
|
|
295
|
+
"after": "자세한 것은 뒤에서 다루겠습니다.\n\n## 절\n\n앞에서 미룬 usecols 를 이제 봅니다.\n",
|
|
296
|
+
"moved": "미룬 것을 앞에서 쓴 이름으로 다시 불러 회수했다"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"rule": "redundantPair",
|
|
300
|
+
"before": "그때 당시에는 매 시간마다 확인했습니다.",
|
|
301
|
+
"after": "그때는 한 시간마다 확인했습니다.",
|
|
302
|
+
"moved": "같은 뜻이 두 번 든 겹말을 하나로 줄였다"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"rule": "sectionNoProse",
|
|
306
|
+
"before": "도입입니다.\n\n## 절\n\n```python\nprint(1)\n```\n\n## 다음 절\n\n끝.\n",
|
|
307
|
+
"after": "도입입니다.\n\n## 절\n\n이 코드는 줄 수를 출력합니다.\n\n```python\nprint(1)\n```\n\n## 몇 줄이 나올까?\n\n끝.\n",
|
|
308
|
+
"moved": "코드가 하는 일을 한 문장으로 먼저 말했다"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"rule": "sectionResult",
|
|
312
|
+
"before": "도입.\n\n## 말투 찾기\n\n첫 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n둘째 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n셋째 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n넷째 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n## 결과는 어디에 남나?\n\n끝.\n",
|
|
313
|
+
"after": "도입.\n\n## 말투 찾기\n\n첫 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n둘째 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\n셋째 문단입니다. 이유가 붙습니다. 그래서 이어집니다.\n\npython make_qr.py 를 돌리면 폴더에 link.png 가 생깁니다.\n\n## 결과는 어디에 남나?\n\n끝.\n",
|
|
314
|
+
"moved": "절 끝에 독자가 자기 화면에서 확인할 결과를 하나 남겼다"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"rule": "spacing",
|
|
318
|
+
"before": "할수 있다고 생각한지 두번째입니다.",
|
|
319
|
+
"after": "할 수 있다고 생각한 지 두 번째입니다.",
|
|
320
|
+
"moved": "의존명사와 단위 명사를 띄어 썼다"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"rule": "spelling",
|
|
324
|
+
"before": "몇일만에 됬습니다.",
|
|
325
|
+
"after": "며칠 만에 됐습니다.",
|
|
326
|
+
"moved": "자주 틀리는 표기를 표준 표기로 바꿨다"
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"rule": "tableOddCell",
|
|
330
|
+
"before": "| 이름 | 시간 |\n|---|---|\n| pandas | 3.72초 |\n| Polars | 0.18초 |\n| DuckDB | 0.13초 |\n| PyArrow | 직접 부르지 않음 |\n| Dask | 2.12초 |\n",
|
|
331
|
+
"after": "| 이름 | 시간 |\n|---|---|\n| pandas | 3.72초 |\n| Polars | 0.18초 |\n| DuckDB | 0.13초 |\n| PyArrow | 0.02초 |\n| Dask | 2.12초 |\n",
|
|
332
|
+
"moved": "열의 잣대를 하나로 맞췄다"
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"rule": "topicBreak",
|
|
336
|
+
"before": "## 절\n\n메모리는 절반으로 줄어듭니다. 자리를 덜 쓰면 그만큼 빨라집니다.\n\n이제 정렬을 봅니다. 순서를 바꾸면 결과가 달라집니다.\n",
|
|
337
|
+
"after": "## 절\n\n메모리는 절반으로 줄어듭니다. 자리를 덜 쓰면 그만큼 빨라집니다.\n\n메모리를 아낀 그 표를 이번에는 정렬해 봅니다. 순서를 바꾸면 결과가 달라집니다.\n",
|
|
338
|
+
"moved": "새 문단 첫 문장에서 앞 문단이 만든 것을 이름으로 다시 불렀다"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"rule": "translationese",
|
|
342
|
+
"before": "모든 분야에 있어서 기준이 필요합니다.",
|
|
343
|
+
"after": "모든 분야에서 기준이 필요합니다.",
|
|
344
|
+
"moved": "번역투를 우리말 어순으로 되돌렸다"
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
}
|
package/data/holeKinds.json
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# `이` 로 끝나는 동사 어간. 합니다체 `보입니다` 는 계사 `보+입니다` 와 동사 `보이+ㅂ니다` 가 같은 글자라
|
|
2
|
+
# 표층으로는 갈리지 않는다. 여기 있는 어간이면 동사다. 출처: 본보기 서술어 (보입니다, 줄입니다) 와
|
|
3
|
+
# 기술 산문에서 흔한 것. 말뭉치가 오면 빈도로 다시 잰다.
|
|
4
|
+
보이
|
|
5
|
+
줄이
|
|
6
|
+
높이
|
|
7
|
+
늘이
|
|
8
|
+
붙이
|
|
9
|
+
들이
|
|
10
|
+
쓰이
|
|
11
|
+
모이
|
|
12
|
+
쌓이
|
|
13
|
+
섞이
|
|
14
|
+
놓이
|
|
15
|
+
먹이
|
|
16
|
+
죽이
|
|
17
|
+
속이
|
|
18
|
+
녹이
|
|
19
|
+
끓이
|
|
20
|
+
꼬이
|
|
21
|
+
매이
|
|
22
|
+
묶이
|
|
23
|
+
깎이
|
|
24
|
+
기울이
|
|
25
|
+
움직이
|
|
26
|
+
덧붙이
|
package/data/inNouns.txt
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# 인 으로 끝나는 세 음절 이상의 명사. 표층은 `도구인`, `규모인` 처럼 명사에 계사 관형형 인 이 붙은 어절을 명사 나열의
|
|
2
|
+
# 끝으로 보는데, 이 목록의 낱말은 통째로 명사라 그렇게 보지 않는다. 두 음절 (개인, 원인, 확인) 은 어간이 한 음절이라
|
|
3
|
+
# 애초에 계사로 보지 않는다. 실측: 말뭉치 390편에서 `커맨드 라인 도구인 kubectl`, `필수 구성 요소인 가상 네트워크`,
|
|
4
|
+
# `IP 주소인 딱 한 종류`, `사상 최대 규모인 한화 기준` 이 명사 다섯으로 세어졌다 (2026-08-29). 목록에 없는 인 명사는
|
|
5
|
+
# 계사로 읽혀 나열을 끊는다. 놓치는 쪽으로 틀리지 잡는 쪽으로는 틀리지 않는다. 검증에서 관리인, 임대인, 피고인이
|
|
6
|
+
# 걸려 직무와 법률과 국적과 신분의 인 명사를 넓게 적었다.
|
|
7
|
+
# 직무와 역할
|
|
8
|
+
관리인
|
|
9
|
+
대리인
|
|
10
|
+
보증인
|
|
11
|
+
지배인
|
|
12
|
+
감정인
|
|
13
|
+
후견인
|
|
14
|
+
피후견인
|
|
15
|
+
참고인
|
|
16
|
+
발기인
|
|
17
|
+
창립인
|
|
18
|
+
설립인
|
|
19
|
+
경비인
|
|
20
|
+
간병인
|
|
21
|
+
집행인
|
|
22
|
+
중개인
|
|
23
|
+
매도인
|
|
24
|
+
매수인
|
|
25
|
+
양도인
|
|
26
|
+
양수인
|
|
27
|
+
수취인
|
|
28
|
+
발신인
|
|
29
|
+
수신인
|
|
30
|
+
수령인
|
|
31
|
+
신청인
|
|
32
|
+
청구인
|
|
33
|
+
피청구인
|
|
34
|
+
위탁인
|
|
35
|
+
수탁인
|
|
36
|
+
고용인
|
|
37
|
+
피고용인
|
|
38
|
+
사용인
|
|
39
|
+
위임인
|
|
40
|
+
수임인
|
|
41
|
+
대여인
|
|
42
|
+
차용인
|
|
43
|
+
임대인
|
|
44
|
+
임차인
|
|
45
|
+
피고인
|
|
46
|
+
변호인
|
|
47
|
+
증여인
|
|
48
|
+
상속인
|
|
49
|
+
피상속인
|
|
50
|
+
발행인
|
|
51
|
+
편집인
|
|
52
|
+
인쇄인
|
|
53
|
+
출판인
|
|
54
|
+
기획인
|
|
55
|
+
제작인
|
|
56
|
+
연출인
|
|
57
|
+
촬영인
|
|
58
|
+
미술인
|
|
59
|
+
음악인
|
|
60
|
+
연극인
|
|
61
|
+
영화인
|
|
62
|
+
방송인
|
|
63
|
+
언론인
|
|
64
|
+
출판인
|
|
65
|
+
광고인
|
|
66
|
+
금융인
|
|
67
|
+
경제인
|
|
68
|
+
기업인
|
|
69
|
+
무역인
|
|
70
|
+
법조인
|
|
71
|
+
의료인
|
|
72
|
+
교육인
|
|
73
|
+
종교인
|
|
74
|
+
문화인
|
|
75
|
+
예술인
|
|
76
|
+
체육인
|
|
77
|
+
정치인
|
|
78
|
+
지식인
|
|
79
|
+
언론인
|
|
80
|
+
연예인
|
|
81
|
+
직장인
|
|
82
|
+
사회인
|
|
83
|
+
일반인
|
|
84
|
+
민간인
|
|
85
|
+
자연인
|
|
86
|
+
장애인
|
|
87
|
+
비장애인
|
|
88
|
+
외국인
|
|
89
|
+
내국인
|
|
90
|
+
현지인
|
|
91
|
+
원주민
|
|
92
|
+
이방인
|
|
93
|
+
도시인
|
|
94
|
+
현대인
|
|
95
|
+
원시인
|
|
96
|
+
고대인
|
|
97
|
+
지구인
|
|
98
|
+
외계인
|
|
99
|
+
우주인
|
|
100
|
+
# 국적과 지역
|
|
101
|
+
한국인
|
|
102
|
+
조선인
|
|
103
|
+
일본인
|
|
104
|
+
중국인
|
|
105
|
+
미국인
|
|
106
|
+
영국인
|
|
107
|
+
프랑스인
|
|
108
|
+
독일인
|
|
109
|
+
러시아인
|
|
110
|
+
인도인
|
|
111
|
+
태국인
|
|
112
|
+
베트남인
|
|
113
|
+
서양인
|
|
114
|
+
동양인
|
|
115
|
+
유럽인
|
|
116
|
+
아시아인
|
|
117
|
+
아프리카인
|
|
118
|
+
남미인
|
|
119
|
+
북미인
|
|
120
|
+
호주인
|
|
121
|
+
캐나다인
|
|
122
|
+
스페인인
|
|
123
|
+
이탈리아인
|
|
124
|
+
멕시코인
|
|
125
|
+
브라질인
|
|
126
|
+
터키인
|
|
127
|
+
이란인
|
|
128
|
+
아랍인
|
|
129
|
+
유대인
|
|
130
|
+
몽골인
|
|
131
|
+
# 인 으로 끝나는 그 밖의 명사 (확인, 승인, 할인 의 합성)
|
|
132
|
+
재확인
|
|
133
|
+
미확인
|
|
134
|
+
미승인
|
|
135
|
+
불승인
|
|
136
|
+
재승인
|
|
137
|
+
사전승인
|
|
138
|
+
무승인
|
|
139
|
+
선승인
|
|
140
|
+
특별할인
|
|
141
|
+
추가할인
|
|
142
|
+
현금할인
|
|
143
|
+
회원할인
|
|
144
|
+
학생할인
|
|
145
|
+
단체할인
|
|
146
|
+
조기할인
|
|
147
|
+
가격할인
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 불규칙 활용 어간. `어간<TAB>부류`. 어미 `아/어` 가 붙을 때만 모양이 바뀌고 습니다 앞에서는 규칙이다.
|
|
2
|
+
# 부류: ㅂ (춥+어 → 추워), ㅂ와 (돕+아 → 도와), ㄷ (듣+어 → 들어), ㅅ (낫+아 → 나아), ㅎ (그렇+어 → 그래),
|
|
3
|
+
# 르 (다르+아 → 달라). 규칙 활용하는 같은 받침의 어간 (잡다, 입다, 벗다, 묻다 (파묻다)) 은 적지 않는다.
|
|
4
|
+
#
|
|
5
|
+
# 출처: 본보기와 문형의 서술어와 소유 저장소 상위 어절에서 실제로 나온 것 (다르다, 빠르다, 새롭다,
|
|
6
|
+
# 자연스럽다, 어렵다, 쉽다, 듣다, 낫다, 그렇다). 나머지는 그 부류의 대표적인 것만 두고 말뭉치가 오면 잰다.
|
|
7
|
+
춥 ㅂ
|
|
8
|
+
덥 ㅂ
|
|
9
|
+
어렵 ㅂ
|
|
10
|
+
쉽 ㅂ
|
|
11
|
+
새롭 ㅂ
|
|
12
|
+
자연스럽 ㅂ
|
|
13
|
+
아름답 ㅂ
|
|
14
|
+
무겁 ㅂ
|
|
15
|
+
가볍 ㅂ
|
|
16
|
+
뜨겁 ㅂ
|
|
17
|
+
차갑 ㅂ
|
|
18
|
+
맵 ㅂ
|
|
19
|
+
두껍 ㅂ
|
|
20
|
+
어둡 ㅂ
|
|
21
|
+
가깝 ㅂ
|
|
22
|
+
반갑 ㅂ
|
|
23
|
+
즐겁 ㅂ
|
|
24
|
+
괴롭 ㅂ
|
|
25
|
+
외롭 ㅂ
|
|
26
|
+
부드럽 ㅂ
|
|
27
|
+
날카롭 ㅂ
|
|
28
|
+
놀랍 ㅂ
|
|
29
|
+
두렵 ㅂ
|
|
30
|
+
돕 ㅂ와
|
|
31
|
+
곱 ㅂ와
|
|
32
|
+
듣 ㄷ
|
|
33
|
+
걷 ㄷ
|
|
34
|
+
묻 ㄷ
|
|
35
|
+
싣 ㄷ
|
|
36
|
+
깨닫 ㄷ
|
|
37
|
+
낫 ㅅ
|
|
38
|
+
짓 ㅅ
|
|
39
|
+
잇 ㅅ
|
|
40
|
+
붓 ㅅ
|
|
41
|
+
젓 ㅅ
|
|
42
|
+
긋 ㅅ
|
|
43
|
+
그렇 ㅎ
|
|
44
|
+
이렇 ㅎ
|
|
45
|
+
저렇 ㅎ
|
|
46
|
+
어떻 ㅎ
|
|
47
|
+
빨갛 ㅎ
|
|
48
|
+
파랗 ㅎ
|
|
49
|
+
하얗 ㅎ
|
|
50
|
+
노랗 ㅎ
|
|
51
|
+
까맣 ㅎ
|
|
52
|
+
다르 르
|
|
53
|
+
빠르 르
|
|
54
|
+
부르 르
|
|
55
|
+
모르 르
|
|
56
|
+
흐르 르
|
|
57
|
+
오르 르
|
|
58
|
+
기르 르
|
|
59
|
+
자르 르
|
|
60
|
+
고르 르
|
|
61
|
+
누르 르
|
|
62
|
+
마르 르
|
|
63
|
+
이르 르
|
|
64
|
+
서두르 르
|