hanlint 0.0.1

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.
Files changed (106) hide show
  1. package/README.md +27 -0
  2. package/bin/hanlint.js +4 -0
  3. package/data/causalMarkers.txt +25 -0
  4. package/data/cliches.json +99 -0
  5. package/data/confusable.json +76 -0
  6. package/data/connectors.txt +18 -0
  7. package/data/countUnits.txt +6 -0
  8. package/data/coverageTypes.txt +7 -0
  9. package/data/deixis.txt +8 -0
  10. package/data/easyWords.json +340 -0
  11. package/data/emphasisWords.txt +11 -0
  12. package/data/endings.txt +9 -0
  13. package/data/euiNouns.txt +40 -0
  14. package/data/hedges.txt +15 -0
  15. package/data/hiddenDeps.txt +11 -0
  16. package/data/holeKinds.json +145 -0
  17. package/data/japaneseLoan.json +82 -0
  18. package/data/josa.txt +54 -0
  19. package/data/koreanNumbers.txt +22 -0
  20. package/data/passiveStems.txt +53 -0
  21. package/data/platformApis.txt +12 -0
  22. package/data/promiseMarkers.txt +7 -0
  23. package/data/pythonPackages.txt +35 -0
  24. package/data/pythonStdlib.txt +193 -0
  25. package/data/readerCalls.txt +14 -0
  26. package/data/recallMarkers.txt +6 -0
  27. package/data/redundantPair.json +70 -0
  28. package/data/ruleDocs.json +44 -0
  29. package/data/spacing.json +76 -0
  30. package/data/spelling.json +166 -0
  31. package/data/stopwords.txt +33 -0
  32. package/data/translationese.json +104 -0
  33. package/data/verbTails.txt +56 -0
  34. package/data/version.json +1 -0
  35. package/package.json +39 -0
  36. package/src/analysis/index.js +34 -0
  37. package/src/analysis/surface/splitSentences.js +36 -0
  38. package/src/analysis/surface/tokenize.js +162 -0
  39. package/src/cli/main.js +376 -0
  40. package/src/config/loadConfig.js +51 -0
  41. package/src/config/settings.js +80 -0
  42. package/src/config/toml.js +239 -0
  43. package/src/data/load.js +63 -0
  44. package/src/document/model.js +55 -0
  45. package/src/document/parseMarkdown.js +183 -0
  46. package/src/document/plainText.js +43 -0
  47. package/src/edit/applyFixes.js +0 -0
  48. package/src/fingerprint/build.js +284 -0
  49. package/src/fingerprint/dictionaries.js +118 -0
  50. package/src/fingerprint/markers.js +175 -0
  51. package/src/fingerprint/topics.js +42 -0
  52. package/src/index.js +68 -0
  53. package/src/regex.js +47 -0
  54. package/src/report/compactReport.js +9 -0
  55. package/src/report/fingerprintJson.js +126 -0
  56. package/src/report/githubReport.js +13 -0
  57. package/src/report/jsonReport.js +16 -0
  58. package/src/report/textReport.js +19 -0
  59. package/src/rules/code/duplicateBlock.js +48 -0
  60. package/src/rules/code/firstResultDistance.js +23 -0
  61. package/src/rules/code/inputFileSource.js +103 -0
  62. package/src/rules/code/installImport.js +126 -0
  63. package/src/rules/code/platformApi.js +36 -0
  64. package/src/rules/document/countMismatch.js +42 -0
  65. package/src/rules/document/keywordMissing.js +21 -0
  66. package/src/rules/document/noQuestion.js +11 -0
  67. package/src/rules/document/promiseRecall.js +12 -0
  68. package/src/rules/document/readerAbsent.js +11 -0
  69. package/src/rules/finding.js +53 -0
  70. package/src/rules/orthography/confusable.js +9 -0
  71. package/src/rules/orthography/spacing.js +9 -0
  72. package/src/rules/orthography/spelling.js +9 -0
  73. package/src/rules/paragraph/factListParagraph.js +27 -0
  74. package/src/rules/paragraph/paraFragment.js +29 -0
  75. package/src/rules/paragraph/topicBreak.js +25 -0
  76. package/src/rules/registry.js +147 -0
  77. package/src/rules/sentence/cliche.js +9 -0
  78. package/src/rules/sentence/connectorRepeat.js +23 -0
  79. package/src/rules/sentence/danglingDeixis.js +19 -0
  80. package/src/rules/sentence/dash.js +21 -0
  81. package/src/rules/sentence/deixis.js +19 -0
  82. package/src/rules/sentence/doubleNegative.js +28 -0
  83. package/src/rules/sentence/doublePassive.js +17 -0
  84. package/src/rules/sentence/ellipsis.js +17 -0
  85. package/src/rules/sentence/endingRepeat.js +25 -0
  86. package/src/rules/sentence/euiChain.js +18 -0
  87. package/src/rules/sentence/fillerOpener.js +18 -0
  88. package/src/rules/sentence/hardWord.js +10 -0
  89. package/src/rules/sentence/imperativePeriod.js +20 -0
  90. package/src/rules/sentence/japaneseLoan.js +9 -0
  91. package/src/rules/sentence/longSentence.js +20 -0
  92. package/src/rules/sentence/negationRedefine.js +22 -0
  93. package/src/rules/sentence/nounPile.js +20 -0
  94. package/src/rules/sentence/redundantPair.js +9 -0
  95. package/src/rules/sentence/translationese.js +9 -0
  96. package/src/rules/shared/codeBlocks.js +44 -0
  97. package/src/rules/shared/dictionaryRule.js +35 -0
  98. package/src/rules/shared/runs.js +22 -0
  99. package/src/rules/structure/emojiBullet.js +34 -0
  100. package/src/rules/structure/headingSentence.js +17 -0
  101. package/src/rules/structure/headingSkip.js +18 -0
  102. package/src/rules/structure/headingUniform.js +36 -0
  103. package/src/rules/structure/introLong.js +20 -0
  104. package/src/rules/structure/sectionNoProse.js +16 -0
  105. package/src/rules/structure/sectionResult.js +37 -0
  106. package/src/text.js +63 -0
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # hanlint
2
+
3
+ 한국어 글에서 반복되는 결함을 결정적으로 잡는 린터다. 번역투, 상투어, 자주 틀리는 맞춤법과 띄어쓰기,
4
+ 헷갈리는 말, 조각난 문단, 코드 튜토리얼의 계약 위반까지 집는다. 의존성이 없고 Node 18 이상이면 된다.
5
+
6
+ ```powershell
7
+ npx hanlint 글.md
8
+ npx hanlint fix 글.md
9
+ npx hanlint 글.md --format compact --errors-only
10
+ ```
11
+
12
+ 지적마다 규칙 이름, 줄 번호, 인용 문장, 왜 문제인지가 붙는다. 고친 표기가 확정된 자리는 `fix` 가 원문에
13
+ 적용한다. `--format json` 은 기계가 읽는 꼴이고 종료 코드는 지적이 없으면 0, error 가 있으면 1 이라 발행
14
+ 게이트에 그대로 물린다. stdin 은 `npx hanlint - --path 이름.md` 로 받는다. 규칙 목록은 `npx hanlint rules`,
15
+ 규칙의 기술서는 `npx hanlint explain <규칙>` 이다.
16
+
17
+ ```js
18
+ import { lintFile } from "hanlint";
19
+
20
+ for (const finding of lintFile("글.md")) console.log(finding.line, finding.rule, finding.why);
21
+ ```
22
+
23
+ 파이썬 패키지 (`pip install hanlint`) 와 같은 규칙, 같은 fixture, 같은 출력이다. 지문 지도 (`audit`, `map`),
24
+ 문체 프로파일, 초안 비교 (`diff`), 평가자 겹침 (`coverage`), 형태소 정밀 모드 (kiwi) 는 파이썬 쪽에만 있다. 무엇을 잡고 무엇을 잡지 않는지는
25
+ [저장소의 product 문서](https://github.com/eddmpython/hanlint/blob/main/skills/specs/start/product.md) 에 있다.
26
+
27
+ MIT.
package/bin/hanlint.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../src/cli/main.js";
3
+
4
+ process.exitCode = main(process.argv.slice(2));
@@ -0,0 +1,25 @@
1
+ # 문장 사이에 이유가 이어지는지를 보는 표지 (정규식). 한 문단에 하나도 없고 문장이 셋 이상이면 factListParagraph 가
2
+ # 사실 나열 후보로 본다. 이유, 목적, 대조의 표지만 둔다. 조건 (하면) 과 순차 (해서) 어미는 사실을 잇는 것이 아니라
3
+ # 넣지 않는다. 실측: `정렬하면 순서가 깨집니다` 는 잡혀야 하는 사실 나열이다.
4
+ 그래서
5
+ 그러니
6
+ 그러므로
7
+ 따라서
8
+ 왜냐하면
9
+ 때문
10
+ 므로
11
+ 니까
12
+ 려면
13
+ 려고
14
+ 덕분
15
+ 탓
16
+ 까닭
17
+ 이유
18
+ 결과
19
+ 그러면
20
+ 그렇다면
21
+ 그래야
22
+ 위해
23
+ 도록
24
+ 지만(?=\s|,|$)
25
+ 는데(?=\s|,|$)
@@ -0,0 +1,99 @@
1
+ {
2
+ "entry": [
3
+ {
4
+ "pattern": "핵심은",
5
+ "why": "결론을 포장하는 말이다. 핵심이 무엇인지 그 자리에서 직접 쓴다",
6
+ "source": "글쓰기 스킬"
7
+ },
8
+ {
9
+ "pattern": "결국 중요한 것은",
10
+ "why": "결론을 포장하는 말이다. 무엇이 중요한지 직접 쓴다",
11
+ "source": "글쓰기 스킬"
12
+ },
13
+ {
14
+ "pattern": "무엇보다 중요한 것은",
15
+ "why": "결론을 포장하는 말이다",
16
+ "source": "다른 세션 제안"
17
+ },
18
+ {
19
+ "pattern": "단순(?:히|한)\\s?.{0,12}(?:을|를)\\s?넘어",
20
+ "why": "단순히 A 를 넘어 B 는 AI 가 즐겨 쓰는 대구다. B 만 쓴다",
21
+ "source": "글쓰기 스킬"
22
+ },
23
+ {
24
+ "pattern": "주목할 (?:필요|만)",
25
+ "why": "주목하라고 말하는 대신 주목할 사실을 쓴다",
26
+ "source": "글쓰기 스킬"
27
+ },
28
+ {
29
+ "pattern": "다음과 같이 정리",
30
+ "why": "정리한다고 예고하는 대신 정리한 내용을 바로 쓴다",
31
+ "source": "글쓰기 스킬"
32
+ },
33
+ {
34
+ "pattern": "(?:정리|요약)하자면",
35
+ "why": "앞을 되풀이하는 결론의 신호다. 앞 절을 다시 읊지 않는다",
36
+ "source": "글쓰기 스킬"
37
+ },
38
+ {
39
+ "pattern": "살펴보(?:겠|도록 하겠)습니다",
40
+ "why": "행동 없이 예고만 하는 말이다. 뒤에 실제 행동이 없으면 문장째 지운다",
41
+ "source": "글쓰기 스킬"
42
+ },
43
+ {
44
+ "pattern": "알아보(?:겠|도록 하겠)습니다",
45
+ "why": "행동 없이 예고만 하는 말이다. 뒤에 실제 행동이 없으면 문장째 지운다",
46
+ "source": "글쓰기 스킬"
47
+ },
48
+ {
49
+ "pattern": "이 글에서는",
50
+ "why": "글이 무엇을 할지 말하는 대신 그것을 한다",
51
+ "source": "글쓰기 스킬"
52
+ },
53
+ {
54
+ "pattern": "라고 할 수 있(?:습니다|다)",
55
+ "why": "판단을 흐리는 완곡이다. 그렇다고 쓴다",
56
+ "source": "AI 신호 조사 (gist 패턴4)"
57
+ },
58
+ {
59
+ "pattern": "일부 전문가들은",
60
+ "why": "출처 없는 귀속이다. 누가 말했는지 쓰거나 지운다",
61
+ "source": "Wikipedia Signs of AI writing 2.5"
62
+ },
63
+ {
64
+ "pattern": "아직도 .{0,12}(?:하시나요|하고 계신가요)",
65
+ "why": "겪지 않은 결핍을 지어낸 불안이다",
66
+ "source": "글쓰기 스킬"
67
+ },
68
+ {
69
+ "pattern": "모르면 큰일",
70
+ "why": "지어낸 불안이다",
71
+ "source": "글쓰기 스킬"
72
+ },
73
+ {
74
+ "pattern": "혁신적",
75
+ "why": "광고 문구다. 무엇이 어떻게 달라졌는지 쓴다",
76
+ "source": "다른 세션 제안"
77
+ },
78
+ {
79
+ "pattern": "새로운 패러다임",
80
+ "why": "광고 문구다",
81
+ "source": "다른 세션 제안"
82
+ },
83
+ {
84
+ "pattern": "게임 체인저",
85
+ "why": "광고 문구다",
86
+ "source": "다른 세션 제안"
87
+ },
88
+ {
89
+ "pattern": "매우 중요",
90
+ "why": "중요하다고 말하는 대신 왜 중요한지 쓴다",
91
+ "source": "다른 세션 제안"
92
+ },
93
+ {
94
+ "pattern": "획기적",
95
+ "why": "광고 문구다",
96
+ "source": "다른 세션 제안"
97
+ }
98
+ ]
99
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "entry": [
3
+ {
4
+ "pattern": "(학생|사람|부모|교사|개발자|작가|시민|국민|회원|직원|전문가|자식|친구|동료|팀장|대표|리더|엔지니어|디자이너|연구자|저자|독자|사용자|운영자|관리자|선생님|의사|변호사|아버지|어머니|아들|딸|후배|선배|신입|초보자)(으)?로써",
5
+ "fix": "$1$2로서",
6
+ "why": "지위, 신분, 자격은 로서 다. 로써 는 재료, 수단, 도구다",
7
+ "source": "한글 맞춤법 제57항, 온라인가나다 298340"
8
+ },
9
+ {
10
+ "pattern": "(정답|답|문제|과녁|퀴즈|예상|수수께끼)(을|를) 맞추",
11
+ "fix": "$1$2 맞히",
12
+ "why": "정답을 알아내거나 과녁에 닿게 하는 것은 맞히다 다. 맞추다 는 대어 보거나 나란히 하는 것이다",
13
+ "source": "한글 맞춤법 제57항, 온라인가나다 298340"
14
+ },
15
+ {
16
+ "pattern": "(정답|답|문제|과녁|퀴즈|예상|수수께끼)(을|를) 맞췄",
17
+ "fix": "$1$2 맞혔",
18
+ "why": "정답을 알아내거나 과녁에 닿게 하는 것은 맞히다 다",
19
+ "source": "한글 맞춤법 제57항, 온라인가나다 298340"
20
+ },
21
+ {
22
+ "pattern": "(줄|시간|간격|초점|박자|입|비위|일정|보조|눈높이|답안지)(을|를) 맞히",
23
+ "fix": "$1$2 맞추",
24
+ "why": "나란히 하거나 대어 보는 것은 맞추다 다. 맞히다 는 정답이나 과녁에 쓴다",
25
+ "source": "한글 맞춤법 제57항, 온라인가나다 298340"
26
+ },
27
+ {
28
+ "pattern": "(와|과|랑|하고) 틀리(?=[다고면니지므])",
29
+ "fix": "$1 다르",
30
+ "why": "같지 않다는 뜻은 다르다 다. 틀리다 는 그르다는 뜻이다",
31
+ "source": "표준국어대사전 표제어 다르다, 틀리다"
32
+ },
33
+ {
34
+ "pattern": "(와|과|랑|하고) 틀린",
35
+ "fix": "$1 다른",
36
+ "why": "같지 않다는 뜻은 다르다 다. 틀리다 는 그르다는 뜻이다",
37
+ "source": "표준국어대사전 표제어 다르다, 틀리다"
38
+ },
39
+ {
40
+ "pattern": "(와|과|랑|하고) 틀려(?![가-힣])",
41
+ "fix": "$1 달라",
42
+ "why": "같지 않다는 뜻은 다르다 다. 틀리다 는 그르다는 뜻이다",
43
+ "source": "표준국어대사전 표제어 다르다, 틀리다"
44
+ },
45
+ {
46
+ "pattern": "(와|과|랑|하고) 틀립니다",
47
+ "fix": "$1 다릅니다",
48
+ "why": "같지 않다는 뜻은 다르다 다. 틀리다 는 그르다는 뜻이다",
49
+ "source": "표준국어대사전 표제어 다르다, 틀리다"
50
+ },
51
+ {
52
+ "pattern": "(와|과|랑|하고) 틀렸",
53
+ "fix": "$1 달랐",
54
+ "why": "같지 않다는 뜻은 다르다 다. 틀리다 는 그르다는 뜻이다",
55
+ "source": "표준국어대사전 표제어 다르다, 틀리다"
56
+ },
57
+ {
58
+ "pattern": "(병|감기|상처|몸|컨디션|증상)(이|가) 낳",
59
+ "fix": "$1$2 낫",
60
+ "why": "병이 없어지는 것은 낫다 다. 낳다 는 배 속의 아이나 새끼를 내놓는 것이다",
61
+ "source": "표준국어대사전 표제어 낫다, 낳다, 상담 사례 5890"
62
+ },
63
+ {
64
+ "pattern": "더 낳은",
65
+ "fix": "더 나은",
66
+ "why": "더 좋다는 뜻은 낫다 이고 관형형은 나은 이다",
67
+ "source": "표준국어대사전 표제어 낫다, 상담 사례 5890"
68
+ },
69
+ {
70
+ "pattern": "더 낳(다|아|았)",
71
+ "fix": "더 나$1",
72
+ "why": "더 좋다는 뜻은 낫다 다. 낫고, 낫지, 나아, 나았다 로 활용한다",
73
+ "source": "표준국어대사전 표제어 낫다, 상담 사례 5890"
74
+ }
75
+ ]
76
+ }
@@ -0,0 +1,18 @@
1
+ # 문두 접속부사. 연속 두 문장이 같은 것으로 시작하면 connectorRepeat 가 짚는다.
2
+ 그리고
3
+ 그래서
4
+ 그런데
5
+ 하지만
6
+ 그러나
7
+ 또한
8
+ 그러면
9
+ 그럼
10
+ 따라서
11
+ 그러므로
12
+ 다만
13
+ 즉
14
+ 이에
15
+ 반면
16
+ 한편
17
+ 게다가
18
+ 아울러
@@ -0,0 +1,6 @@
1
+ # `N 가지` 처럼 글이 약속하는 수의 단위. countMismatch 가 같은 단위 안에서 수가 갈리는지 본다.
2
+ # `열` 이나 `줄` 같은 단위는 서로 다른 것을 세므로 넣지 않는다.
3
+ 가지
4
+ 방식
5
+ 방법
6
+ 단계
@@ -0,0 +1,7 @@
1
+ # 사람 평가자의 지적을 유형으로 가르는 표지. `유형<TAB>정규식`. coverage 가 못 집은 지적을 모을 때 쓴다. 위에서부터 먼저 맞는 것이 이긴다.
2
+ 파일과 폴더 파일|폴더|경로|만들어지지|생성|없어서|없다
3
+ 설치와 실행 설치|import|모듈|패키지|실행|오류|에러|Error|멈춘다|돌아가지
4
+ 순서와 구조 순서|먼저|앞에서|뒤에서|절|목차|위치|옮|건너
5
+ 용어와 설명 설명|뜻|처음 나온|용어|무엇인지|모른|정의
6
+ 숫자와 표 숫자|표|열|행|값|측정|잰
7
+ 문장과 표현 문장|주어|서술어|표현|반복|같은 말|어색
@@ -0,0 +1,8 @@
1
+ # 독자가 스크롤을 되돌려야 하는 지시어 (정규식). 회수 표지 (앞서 말한 X) 는 이름을 다시 부르는 정상 용법이라 넣지 않는다.
2
+ # 앞에 한글이 붙으면 낱말의 일부다 (순위의 정본, 부위의 이름). 실측: moduleLayers.md 의 `순위의 정본은` 이 위의 로 잡혔다.
3
+ (?<![가-힣])이것(?:은|이|을|으로|도|만)?(?![가-힣])
4
+ (?<![가-힣])해당 [가-힣]+
5
+ (?<![가-힣])위의 [가-힣]+
6
+ (?<![가-힣])아래의 [가-힣]+
7
+ (?<![가-힣])이러한
8
+ (?<![가-힣])이처럼
@@ -0,0 +1,340 @@
1
+ {
2
+ "entry": [
3
+ {
4
+ "pattern": "(?<![가-힣])금일{조사}",
5
+ "fix": "오늘",
6
+ "why": "쉬운 말 오늘 이 있다",
7
+ "source": "표준국어대사전 (금일 = 오늘)"
8
+ },
9
+ {
10
+ "pattern": "(?<![가-힣])명일{조사}",
11
+ "fix": "내일",
12
+ "why": "쉬운 말 내일 이 있다",
13
+ "source": "표준국어대사전 (명일 = 내일)"
14
+ },
15
+ {
16
+ "pattern": "(?<![가-힣])익월{조사}",
17
+ "fix": "다음 달",
18
+ "why": "쉬운 말 다음 달 이 있다",
19
+ "source": "국립국어원 다듬은 말"
20
+ },
21
+ {
22
+ "pattern": "(?<![가-힣])익년{조사}",
23
+ "fix": "다음 해",
24
+ "why": "쉬운 말 다음 해 가 있다",
25
+ "source": "국립국어원 다듬은 말"
26
+ },
27
+ {
28
+ "pattern": "(?<![가-힣])금번{조사}",
29
+ "fix": "이번",
30
+ "why": "쉬운 말 이번 이 있다",
31
+ "source": "표준국어대사전 (금번 = 이번)"
32
+ },
33
+ {
34
+ "pattern": "(?<![가-힣])금회{조사}",
35
+ "fix": "이번",
36
+ "why": "쉬운 말 이번 이 있다",
37
+ "source": "국립국어원 다듬은 말"
38
+ },
39
+ {
40
+ "pattern": "(?<![가-힣])차후{조사}",
41
+ "fix": "앞으로",
42
+ "why": "쉬운 말 앞으로 가 있다",
43
+ "source": "국립국어원 다듬은 말"
44
+ },
45
+ {
46
+ "pattern": "(?<![가-힣])상기 (?=[가-힣])",
47
+ "fix": "위 ",
48
+ "why": "위에서 말한 것은 위 라고 쓴다",
49
+ "source": "국립국어원 다듬은 말"
50
+ },
51
+ {
52
+ "pattern": "(?<![가-힣])소정의",
53
+ "fix": "정해진",
54
+ "why": "쉬운 말 정해진 이 있다",
55
+ "source": "국립국어원 다듬은 말"
56
+ },
57
+ {
58
+ "pattern": "(?<![가-힣])일체{조사}",
59
+ "fix": "모두",
60
+ "why": "쉬운 말 모두 가 있다",
61
+ "source": "국립국어원 다듬은 말"
62
+ },
63
+ {
64
+ "pattern": "(?<![가-힣])여타{조사}",
65
+ "fix": "다른",
66
+ "why": "쉬운 말 다른 이 있다",
67
+ "source": "국립국어원 다듬은 말"
68
+ },
69
+ {
70
+ "pattern": "(?<![가-힣])제반{조사}",
71
+ "fix": "여러",
72
+ "why": "쉬운 말 여러 가 있다",
73
+ "source": "국립국어원 다듬은 말"
74
+ },
75
+ {
76
+ "pattern": "(?<![가-힣])납득{조사}",
77
+ "fix": "이해",
78
+ "why": "쉬운 말 이해 가 있다",
79
+ "source": "국립국어원 다듬은 말"
80
+ },
81
+ {
82
+ "pattern": "(?<![가-힣])납득(?=하|했|합|한|할|해)",
83
+ "fix": "이해",
84
+ "why": "쉬운 말 이해하다 가 있다",
85
+ "source": "국립국어원 다듬은 말"
86
+ },
87
+ {
88
+ "pattern": "(?<![가-힣])수취인{조사}",
89
+ "fix": "받는 사람",
90
+ "why": "쉬운 말 받는 사람 이 있다",
91
+ "source": "국립국어원 다듬은 말"
92
+ },
93
+ {
94
+ "pattern": "(?<![가-힣])불입{조사}",
95
+ "fix": "납입",
96
+ "why": "일본어투 한자어라 납입 으로 다듬었다",
97
+ "source": "국립국어원 다듬은 말"
98
+ },
99
+ {
100
+ "pattern": "(?<![가-힣])시건장치{조사}",
101
+ "fix": "잠금장치",
102
+ "why": "쉬운 말 잠금장치 가 있다",
103
+ "source": "국립국어원 다듬은 말"
104
+ },
105
+ {
106
+ "pattern": "(?<![가-힣])견본{조사}",
107
+ "fix": "본보기",
108
+ "why": "쉬운 말 본보기 가 있다",
109
+ "source": "국립국어원 다듬은 말"
110
+ },
111
+ {
112
+ "pattern": "(?<![가-힣])요망{조사}",
113
+ "fix": "바람",
114
+ "why": "협조 요망 은 협조 바람 이다",
115
+ "source": "국립국어원 다듬은 말"
116
+ },
117
+ {
118
+ "pattern": "(?<![가-힣])필히(?![가-힣])",
119
+ "fix": "반드시",
120
+ "why": "쉬운 말 반드시 가 있다",
121
+ "source": "국립국어원 다듬은 말"
122
+ },
123
+ {
124
+ "pattern": "(?<![가-힣])별첨{조사}",
125
+ "fix": "따로 붙임",
126
+ "why": "쉬운 말 따로 붙임 이 있다",
127
+ "source": "국립국어원 다듬은 말"
128
+ },
129
+ {
130
+ "pattern": "(?<![가-힣])회신{조사}",
131
+ "fix": "답장",
132
+ "why": "쉬운 말 답장 이 있다",
133
+ "source": "국립국어원 다듬은 말"
134
+ },
135
+ {
136
+ "pattern": "(?<![가-힣])잔여 (?=[가-힣])",
137
+ "fix": "남은 ",
138
+ "why": "쉬운 말 남은 이 있다",
139
+ "source": "국립국어원 다듬은 말"
140
+ },
141
+ {
142
+ "pattern": "(?<![가-힣])고지{조사}",
143
+ "fix": "알림",
144
+ "why": "쉬운 말 알림 이 있다",
145
+ "source": "국립국어원 다듬은 말"
146
+ },
147
+ {
148
+ "pattern": "(?<![가-힣])사료(?=됩|된|되)",
149
+ "fix": "생각",
150
+ "why": "사료됩니다 는 생각됩니다 다",
151
+ "source": "국립국어원 다듬은 말"
152
+ },
153
+ {
154
+ "pattern": "(?<![가-힣])응당(?![가-힣])",
155
+ "fix": "마땅히",
156
+ "why": "쉬운 말 마땅히 가 있다",
157
+ "source": "국립국어원 다듬은 말"
158
+ },
159
+ {
160
+ "pattern": "(?<![가-힣])노하우{조사}",
161
+ "fix": "비법",
162
+ "why": "쉬운 말 비법 이 있다",
163
+ "source": "국립국어원 다듬은 말"
164
+ },
165
+ {
166
+ "pattern": "(?<![가-힣])인프라{조사}",
167
+ "fix": "기반 시설",
168
+ "why": "쉬운 말 기반 시설 이 있다",
169
+ "source": "국립국어원 다듬은 말"
170
+ },
171
+ {
172
+ "pattern": "(?<![가-힣])매뉴얼{조사}",
173
+ "fix": "설명서",
174
+ "why": "쉬운 말 설명서 가 있다",
175
+ "source": "표준국어대사전 (매뉴얼 = 설명서)"
176
+ },
177
+ {
178
+ "pattern": "(?<![가-힣])이슈{조사}",
179
+ "fix": "쟁점",
180
+ "why": "쉬운 말 쟁점 이 있다",
181
+ "source": "국립국어원 다듬은 말"
182
+ },
183
+ {
184
+ "pattern": "(?<![가-힣])프로세스{조사}",
185
+ "fix": "과정",
186
+ "why": "쉬운 말 과정 이 있다",
187
+ "source": "국립국어원 다듬은 말"
188
+ },
189
+ {
190
+ "pattern": "(?<![가-힣])피드백{조사}",
191
+ "fix": "의견",
192
+ "why": "쉬운 말 의견 이 있다",
193
+ "source": "국립국어원 다듬은 말"
194
+ },
195
+ {
196
+ "pattern": "(?<![가-힣])니즈{조사}",
197
+ "fix": "요구",
198
+ "why": "쉬운 말 요구 가 있다",
199
+ "source": "국립국어원 다듬은 말"
200
+ },
201
+ {
202
+ "pattern": "(?<![가-힣])어젠다{조사}",
203
+ "fix": "의제",
204
+ "why": "쉬운 말 의제 가 있다",
205
+ "source": "국립국어원 다듬은 말"
206
+ },
207
+ {
208
+ "pattern": "(?<![가-힣])가이드라인{조사}",
209
+ "fix": "지침",
210
+ "why": "쉬운 말 지침 이 있다",
211
+ "source": "국립국어원 다듬은 말"
212
+ },
213
+ {
214
+ "pattern": "(?<![가-힣])로드맵{조사}",
215
+ "fix": "단계별 계획",
216
+ "why": "쉬운 말 단계별 계획 이 있다",
217
+ "source": "국립국어원 다듬은 말"
218
+ },
219
+ {
220
+ "pattern": "(?<![가-힣])마인드{조사}",
221
+ "fix": "마음가짐",
222
+ "why": "쉬운 말 마음가짐 이 있다",
223
+ "source": "국립국어원 다듬은 말"
224
+ },
225
+ {
226
+ "pattern": "(?<![가-힣])컨펌{조사}",
227
+ "fix": "확인",
228
+ "why": "쉬운 말 확인 이 있다",
229
+ "source": "국립국어원 다듬은 말"
230
+ },
231
+ {
232
+ "pattern": "(?<![가-힣])데드라인{조사}",
233
+ "fix": "마감",
234
+ "why": "쉬운 말 마감 이 있다",
235
+ "source": "국립국어원 다듬은 말"
236
+ },
237
+ {
238
+ "pattern": "(?<![가-힣])리뷰{조사}",
239
+ "fix": "검토",
240
+ "why": "쉬운 말 검토 가 있다",
241
+ "source": "국립국어원 다듬은 말"
242
+ },
243
+ {
244
+ "pattern": "(?<![가-힣])멘토{조사}",
245
+ "fix": "조언자",
246
+ "why": "쉬운 말 조언자 가 있다",
247
+ "source": "국립국어원 다듬은 말"
248
+ },
249
+ {
250
+ "pattern": "(?<![가-힣])인센티브{조사}",
251
+ "fix": "성과급",
252
+ "why": "쉬운 말 성과급 이 있다",
253
+ "source": "국립국어원 다듬은 말"
254
+ },
255
+ {
256
+ "pattern": "(?<![가-힣])모니터링{조사}",
257
+ "fix": "점검",
258
+ "why": "쉬운 말 점검 이 있다",
259
+ "source": "국립국어원 다듬은 말"
260
+ },
261
+ {
262
+ "pattern": "(?<![가-힣])바우처{조사}",
263
+ "fix": "이용권",
264
+ "why": "쉬운 말 이용권 이 있다",
265
+ "source": "국립국어원 다듬은 말"
266
+ },
267
+ {
268
+ "pattern": "(?<![가-힣])팝업{조사}",
269
+ "fix": "알림창",
270
+ "why": "쉬운 말 알림창 이 있다",
271
+ "source": "국립국어원 다듬은 말"
272
+ },
273
+ {
274
+ "pattern": "(?<![가-힣])언택트{조사}",
275
+ "fix": "비대면",
276
+ "why": "쉬운 말 비대면 이 있다",
277
+ "source": "국립국어원 다듬은 말"
278
+ },
279
+ {
280
+ "pattern": "(?<![가-힣])팬데믹{조사}",
281
+ "fix": "감염병 대유행",
282
+ "why": "쉬운 말 감염병 대유행 이 있다",
283
+ "source": "국립국어원 다듬은 말"
284
+ },
285
+ {
286
+ "pattern": "(?<![가-힣])컨소시엄{조사}",
287
+ "fix": "연합체",
288
+ "why": "쉬운 말 연합체 가 있다",
289
+ "source": "국립국어원 다듬은 말"
290
+ },
291
+ {
292
+ "pattern": "(?<![가-힣])마스터플랜{조사}",
293
+ "fix": "종합 계획",
294
+ "why": "쉬운 말 종합 계획 이 있다",
295
+ "source": "국립국어원 다듬은 말"
296
+ },
297
+ {
298
+ "pattern": "(?<![가-힣])킥오프{조사}",
299
+ "fix": "시작 회의",
300
+ "why": "쉬운 말 시작 회의 가 있다",
301
+ "source": "국립국어원 다듬은 말"
302
+ },
303
+ {
304
+ "pattern": "(?<![가-힣])벤치마킹{조사}",
305
+ "fix": "본보기 삼기",
306
+ "why": "쉬운 말 본보기 삼기 가 있다",
307
+ "source": "국립국어원 다듬은 말"
308
+ },
309
+ {
310
+ "pattern": "(?<![가-힣])레퍼런스{조사}",
311
+ "fix": "참고 자료",
312
+ "why": "쉬운 말 참고 자료 가 있다",
313
+ "source": "국립국어원 다듬은 말"
314
+ },
315
+ {
316
+ "pattern": "(?<![가-힣])워크숍{조사}",
317
+ "fix": "연수회",
318
+ "why": "쉬운 말 연수회 가 있다",
319
+ "source": "국립국어원 다듬은 말"
320
+ },
321
+ {
322
+ "pattern": "(?<![가-힣])리스크{조사}",
323
+ "fix": "위험",
324
+ "why": "쉬운 말 위험 이 있다",
325
+ "source": "국립국어원 다듬은 말"
326
+ },
327
+ {
328
+ "pattern": "(?<![가-힣])체크리스트{조사}",
329
+ "fix": "점검표",
330
+ "why": "쉬운 말 점검표 가 있다",
331
+ "source": "국립국어원 다듬은 말"
332
+ },
333
+ {
334
+ "pattern": "(?<![가-힣])필터링{조사}",
335
+ "fix": "거르기",
336
+ "why": "쉬운 말 거르기 가 있다",
337
+ "source": "국립국어원 다듬은 말"
338
+ }
339
+ ]
340
+ }
@@ -0,0 +1,11 @@
1
+ # 수치와 사례 없이 힘만 주는 낱말. audit 의 밀도 지표가 천 어절당 개수로 센다. 규칙으로 짚지는 않는다.
2
+ 다양한
3
+ 효과적
4
+ 중요한
5
+ 중요하
6
+ 핵심적
7
+ 필수적
8
+ 강력한
9
+ 최적
10
+ 혁신
11
+ 탁월
@@ -0,0 +1,9 @@
1
+ # 문장 종결어미의 부류. `부류<TAB>정규식`. 위에서부터 먼저 맞는 것이 이긴다.
2
+ # 정규식은 문장 끝 (마침표와 물음표를 뗀 뒤) 에 대조한다.
3
+ 것이다 (것이다|것입니다|것이었다|것이었습니다)$
4
+ 명령 (세요|십시오|합시다|봅시다|해라|하자|보자|시오|십쇼)$
5
+ 의문 (까|나요|까요|을까|는가|은가|런가|을까요)$
6
+ 죠 (죠|지요)$
7
+ 니다 니다$
8
+ 요 요$
9
+ 다 다$