Weasel words·수동태·중복 단어를 잡는 셸 스크립트 3개
(matt.might.net)- 기술 글쓰기에서 반복되는 약점은 사람이 매번 지적하기보다 자동화된 검사로 먼저 드러낼 수 있으며, 이 글은 LaTeX 논문 빌드에 붙일 셸 스크립트 3개를 소개함
- 목표는 수동태나 특정 표현을 금지하는 것이 아니라, 표시된 문장을 보며 더 명확하고 정확한 표현을 선택하게 만드는 데 있음
various,quite,surprisingly,very,extremely같은 weasel words는 정밀성을 흐리므로 정규식으로 탐지해 검토 지점을 줄여줌- 수동태 검사는 be동사 뒤의
-ed형태나 불규칙 분사를 찾고, 중복 단어 검사는 인접한 같은 단어를 대소문자 무시 방식으로 잡아냄 make proof로 세 검사를 묶으면 논문 저장소 안에서 반복 실행할 수 있고, 작은 오류가 쌓여 교정 부족으로 읽히는 일을 줄일 수 있음
반복되는 글쓰기 약점을 자동화로 줄이기
- Ph.D. 학생 지도에서 특히 어려운 부분은 글쓰기 교육이며, 반복해서 나타나는 문제는 도구로 먼저 걸러낼 수 있음
- 스크립트가 겨냥하는 세 가지 문제는 다음과 같음
- 수동태 남용
- weasel words
- lexical illusion, 즉 눈으로 놓치기 쉬운 중복 단어
- 이 스크립트들은 LaTeX 문서의 빌드 시스템에 통합해 사용함
- 글쓰기 규칙에는 예외가 있으므로, 목적은 특정 문법 구조를 금지하는 것이 아님
- 문장이 강조되면 “더 명확하고 정밀한 표현이 있는가”를 스스로 확인하게 됨
- 프로그래머라면 자신의 반복 약점을 알고, 그 약점을 줄이는 데 자동화를 활용할 수 있음
기술 글쓰기에 참고할 만한 책
- The Elements of Style는 완벽하지는 않지만 스타일 참고서로 여전히 유용함
- 언어학 전문가들의 비판을 감안해 읽어야 함
- 과학·공학·수학 글쓰기에서는 스타일 부재가 공격적으로 드러나는 경우가 있음
- Style: The Basics of Clarity and Grace는 Zachary Tatlock이 추천한 뒤 Strunk and White보다 나은 참고서로 평가됨
- 한 권만 고른다면 이 책을 고를 만함
- The Chicago Manual of Style는 스타일 논쟁을 끝내는 기준으로 쓰임
- A Manual for Writers of Research Papers, Theses, and Dissertations는 기술 글쓰기를 위한 Chicago 매뉴얼에 해당함
정밀성과 명확성이 새어나가는 지점
- Olin Shivers는 기술 글쓰기를 정밀성·명확성·마케팅 사이의 균형으로 가르쳤음
- 논문 제출 과정을 거치며, 정밀성과 명확성이 기계적으로 식별 가능한 방식으로 약해지는 지점이 드러남
- weasel words
- 수동태 남용
- 과학적 아이디어의 나쁜 마케팅까지 잡아내는 셸 스크립트는 만들기 어려움
Weasel words 탐지
- Weasel words는 좋아 보이지만 정보를 거의 전달하지 않는 단어나 구로, 문장의 정밀성을 흐림
- 학생 글쓰기에서 자주 보이는 weasel words는 세 종류로 나뉨
-
Salt and pepper words
- 새 대학원생은 문장에 양념처럼 기술적으로 보이는 단어를 뿌리지만, 실제 정보는 전달하지 못하는 경우가 있음
- 대표 표현은
various,a number of,fairly,quite임 - 이런 단어를 제거하면 문장이 더 강해짐
It is quite difficult to find untainted samples.→It is difficult to find untainted samples.We used various methods to isolate four samples.→We isolated four samples.
-
Beholder words
- Beholder words는 의미가 독자에 따라 달라지는 단어임
- 예시는
interestingly,surprisingly,remarkably,clearly임 - 피어 리뷰어는 판단을 대신 내려주는 표현을 좋아하지 않음
False positives were surprisingly low.보다To our surprise, false positives were low (3%).처럼 수치와 관찰 주체를 드러내는 편이 나음
-
Lazy words와 부사
- Lazy words는 정량적 특성을 제시하지 않기 위해 쓰이는 단어로, 과학을 단단하지 않고 미완성처럼 보이게 함
- 가장 나쁜 예는
very와extremely이며, 기술 글쓰기에서는 용납되기 어려움 - 다른 예시는
several,exceedingly,many,most,few,vast임 - 기술 글쓰기에서 부사는 weasel words처럼 보이는 경향이 있음
- 새 대학원생의 기술 글쓰기에서는 모든 부사를 제거해도 순효과가 양수일 가능성이 큼
We offer a completely different formulation of CFA.보다We offer a different formulation of CFA.가 나음
-
Weasel words 스크립트
- Bash 스크립트는 기본 weasel words 목록을 정규식으로 정의하고, 입력 파일에서
egrep -i -n --color로 위치를 표시함 - 기본 목록이 맞지 않으면 대체 목록 파일을 사용할 수 있음
$HOME/etc/words/weasels$WORDSDIR/weaselswords/weasels
- 인자가 없으면
usage: <script> <file> ...형태의 사용법을 출력함
- Bash 스크립트는 기본 weasel words 목록을 정규식으로 정의하고, 입력 파일에서
수동태를 의식적으로 다루기
- 기술 글쓰기에서 수동태가 항상 나쁜 것은 아님
- 다만 편집해 본 기술 글쓰기의 절반 이상은 수동태 제거만으로 개선될 수 있었음
- 학생들은 수동태를 잘 쓰기보다 남용하는 경우가 더 많음
- 문제가 되는 수동태는 관련 있거나 설명적인 정보를 숨길 때임
Termination is guaranteed on any input.은 관련 정보를 숨김Termination is guaranteed on any input by a finite state-space.는 관련 정보를 넣지만 강조점이 어긋남A finite state-space guarantees termination on any input.은 관련 정보를 포함하고 더 선명함
- 주어가 정말 중요하지 않을 때는 수동태가 더 나을 수 있음
4 mL HCl were added to the solution.- 다만
We added 4 mL HCl to the solution.도 심각한 문제로 보지는 않음
-
수동태 판단 질문
- 스크립트가 수동태를 표시하면 두 가지를 확인함
- 행위자가 관련 있는데 불명확한가
- 능동태로 바꾸면 글이 더 잘 읽히는가
- 두 질문 모두 “예”이면 능동태로 바꿈
- 첫 질문만 “예”이면 행위자를 명시함
- 스크립트가 수동태를 표시하면 두 가지를 확인함
-
수동태 스크립트
- Bash 스크립트는 불규칙 과거분사 목록을 길게 정의함
am|are|were|being|is|been|was|be뒤에 공백과\w+ed또는 불규칙 분사가 오는 패턴을 찾음egrep -n -i --color로 파일명과 줄 번호를 포함해 표시함
중복 단어와 lexical illusion
- 줄바꿈이 있으면
the the같은 중복 단어를 눈으로 놓치기 쉬움 - 줄바꿈만 바꿔도 같은 중복이 더 분명하게 보임
- 단어 중복은 전자 문서 작성 과정에서 생기는 현상이며, 잘라내기와 붙여넣기 사고로 보임
- 특히
the에서 자주 발생함 - 중복 단어 하나만으로 논문이 거절되지는 않지만, 철자 오류와 중복 단어 같은 작은 실수가 쌓이면 교정 부족이 드러남
- 리뷰어는 부족한 교정을 자신의 시간과 주의에 대한 존중 부족으로 해석할 수 있음
-
중복 단어 스크립트
- Perl 스크립트는 인접한 중복 단어를 찾음
- 파일을 줄 단위로 읽고, 비단어 문자 기준으로 분리함
- 공백은 건너뛰고, 문장부호를 만나면 마지막 단어 상태를 초기화함
- 현재 단어와 직전 단어를 소문자로 비교해 같으면
파일명:줄번호 단어형식으로 출력함 - 종료 코드는 찾은 중복 개수임
Makefile에 통합하기
- 각 논문 저장소의
bin/디렉터리에 스크립트 로컬 복사본을 둠 - Makefile에
make proof규칙을 추가함 make proof는*.tex파일을 대상으로 세 검사를 순서대로 실행함sh bin/weasel *.texsh bin/passive *.texperl bin/dups *.tex
논문 마케팅과 피어 리뷰
- 대학원생은 처음에 전체 진실만 쓰면 출판될 것이라고 생각하기 쉬움
- 하지만 참인 것은 많고, 상위 피어 리뷰 venue에는 기술적으로 올바른 논문도 충분히 많음
- 피어 리뷰는 어떤 참된 것이 알 가치가 있는지를 결정하는 역할에 가까워졌음
- 이 관점에서 리뷰어는 과학 공동체의 가장 제한된 자원인 집단적 주의력의 수호자임
- 논문을 마케팅하려면 아이디어가 그 자원에 접근할 자격이 있음을 설득력 있게 보여야 함
관련 도구와 확장 아이디어
- Benjamin Beckwith는 이 스크립트에서 영감을 받아 Emacs용 "writegood" 모드를 만들었음
- John Regehr는
Note that,Notice that같은 불필요한 구를 잡는 단순 스크립트를 제안함 - 다른 사람들은 기술 글쓰기에서 미래 시제 사용을 잡는 스크립트를 제안함
댓글과 토론
Hacker News 의견들
-
논문을 쓰던 때 글쓰기 개선에 도움이 된 자료는 Paul R. Halmos의 How to Write Mathematics와 Donald E. Knuth 등의 Mathematical Writing이었음
명확하고 정확한 소통의 감각을 잡으려면 Halmos부터 읽곤 했고, “Bad/Better/OK” 제안은 Knuth 등의 강의 노트에서 본 논의를 떠올리게 함
세 번째 단계로는 제안된 것 같은 린터가 빠진 부분을 잡는 데 유용할 수 있음
정의가 조금이라도 들어가는 주제로 글을 쓰는 사람에게는 이런 자료들이 필수라고 봄- 그 추천에 더해 M. Alley의 The Craft of Scientific Writing도 좋음
-
이 글이 마음에 들고 효과적인 박사과정 논문 작성 과정을 더 알고 싶다면 [1]을 보면 좋음
사실 소통 능력을 개선하고 싶은 사람이라면 누구나 볼 만하고, 이 영상에 접근하려고 돈을 냈어도 아깝지 않았을 정도임
[1] https://youtu.be/vtIzMaLkCaM- “박사과정을 시작할 때 알아야 할 모든 것”을 모은 저장소가 있으면 좋겠음
유명한 phd grind 같은 자료도 포함해서
- “박사과정을 시작할 때 알아야 할 모든 것”을 모은 저장소가 있으면 좋겠음
-
예시 중 상당수에는 동의하기 어려움
예를 들어 “It is quite difficult to find untainted samples”를 “It is difficult to find untainted samples”로 바꾸면 quite difficult와 그냥 difficult는 꽤 다르게 읽힘
문장이 나아진 게 아니라 의미가 바뀐 것임
또 “various methods”를 썼다는 사실은 단일 방법이 아니었다는 정보인데, 두 번째 문장에서는 그 정보가 빠짐- “quite”가 전하는 의미는 독자나 문맥에 따라 크게 달라질 수 있음
말로 할 때는 억양에 따라 많이 바뀌고, 엄밀히는 “약간 어렵다”에 가깝지만 많은 곳에서는 “거의 불가능하다”처럼 쓰이기도 함
단어를 제거하는 것이 틀렸다고 보진 않지만, 더 구체적인 비교 표현으로 바꾸는 편이 낫다고 봄 - 이런 식이라서 결국 3쪽이면 같은 내용을 말할 수 있는 30쪽짜리 설계 문서를 읽게 됨
특히 기술 문서에서 장식적인 글쓰기를 왜 그렇게 싫어하는지 이해하려고 해보면 좋겠음
논문이나 설계를 많이 읽으면 그런 문체가 삶을 괴롭게 만듦 - 다른 방법을 썼다는 점을 말하고 싶다면 실제로 무엇을 했는지 쓰면 됨
“We isolated four samples using the following methods…”처럼 쓰는 편이 명확함 - 예시 대부분이 보기에는 형편없었음
논문이 단순한 내용을 말할 때조차 읽기 어려운 이유 중 하나가 바로 이런 점임
아무도 좋아하지 않는 딱딱한 형식적 문체에 집착하면서, 미묘하지만 중요한 맥락 단서를 빼버림
- “quite”가 전하는 의미는 독자나 문맥에 따라 크게 달라질 수 있음
-
이런 도구를 더 찾는다면 vale.sh를 확인해볼 만함
모호한 단어 피하기를 포함해 여러 종류의 문체 지침을 추가할 수 있음
PR 시점에 웹사이트에서 vale을 돌리기 위해 쓰는 GitHub Action은 여기 있음: https://github.com/FusionAuth/fusionauth-site/blob/main/.git...
설정은 여기 있음: https://github.com/FusionAuth/fusionauth-site/tree/main/conf...
문체를 강제하는 데 도움이 됐지만, 아마 기능을 최대한 활용하고 있지는 않음- Vale.sh가 꽤 좋아 보임
지금 책 3판과 웹사이트 글 여러 편을 편집 중이라 유용하게 쓸 수 있겠음
- Vale.sh가 꽤 좋아 보임
-
Claude에게 그 Bash 스크립트들을 웹 UI로 옮기게 해서, 코드를 바로 붙여 넣고 결과를 볼 수 있게 만들었음: https://tools.simonwillison.net/writing-style
Claude 대화 기록은 여기 있음: https://gist.github.com/simonw/e9902ed1cbda30f90db8d0d22caa0...- 제대로 동작하지 않는 것 같음
두 번째 패턴 매칭쯤이 이상함
예를 들어 “It is quite difficult to find untainted samples. We used various methods to isolate four samples.”를 넣으면 “quite”는 “is quite difficult to find untainted samples.”에서 찾고, “various”는 빈 문자열에서 찾음
그래도 이런 빠른 HTML/JS 도구는 마음에 듦 - 왜 Claude에게 더 취약하고 제한적인 Bash 스크립트를 쓰게 하지 말고, 그냥 Claude 자체로 글을 검토하게 하지 않는지 궁금함
Claude에게 같은 기능을 하거나 더 잘하는 프롬프트를 스스로 작성하게 할 수도 있음
Bash와 Perl은 이런 작업에는 덕트테이프와 껌 같은 도구라 형편없고, Claude가 가장 잘하는 일이 바로 이쪽임
단순히 문제를 표시하는 대신 대안을 저울질하고 수정안을 제안할 수 있으며, 거짓 양성·거짓 음성·파싱 오류를 만드는 이상한 정규식 불일치도 없음
- 제대로 동작하지 않는 것 같음
-
초기 Unix에는 비슷한 일을 하는 diction과 style 명령이 있었음
GNU에서 받을 수 있고 Homebrew에도 들어 있음
https://www.gnu.org/software/diction/
기억으로는 그리 훌륭하진 않았고, 이번 도구 묶음도 아마 비슷한 정도로 잘할 듯함 -
내 분야에서는 글의 품질이 중요도 최하위였고, 심지어 강의평가보다도 낮았음
명확하고 간결한 문장을 중시하긴 하지만, 대학원생이라면 특히 적대적인 질문 앞에서의 발표 능력, 그리고 슬프게도 아첨 능력을 기르는 편이 더 도움이 될 것 같음
네, 쓰라린 경험이 있음 :p- 발표 능력보다도 상담사를 찾는 게 더 중요할 수 있음
사람들이 감당 못할 정도로 몰리지만, 그 상당 부분은 스스로 만든 것임
실제 이해관계는 머릿속에서 키워놓은 것만큼 높지 않고, 사람들은 당신이 통과하길 바람 - 그걸 어떻게 알 수 있는지 모르겠음
분야에 따라 다르겠지만, 심사자가 글의 품질을 잘 언급하지 않는다고 해서 채택에 영향을 주지 않는다는 뜻은 아님
사람을 짜증나게 하면, 리뷰에 쓸 만큼 본질적이지 않다고 느껴지는 방식일수록 오히려 평소라면 넘어갔을 부분에도 더 비판적이 되기 쉬움
이게 반증하기 어려워 만족스럽지 않다는 점은 인정하고, 선택적으로 나쁜 글쓰기가 구멍을 덮는 데 쓰일 수도 있다는 점도 인정함
- 발표 능력보다도 상담사를 찾는 게 더 중요할 수 있음
-
“논문을 마케팅하려면, 저자는 자기 아이디어가 그 자원에 접근할 자격이 있다는 설득력 있는 근거를 제시해야 한다”는 말은 곧 학술지가 가장 중요한 아이디어가 아니라 가장 잘 팔린 논문으로 채워진다는 뜻임
저자가 말하듯 발견하기 어려운 오탈자 같은 피상적인 요소도 심사자가 찾아낼 수 있기 때문에 결정 요인이 되곤 함
객관성이 있는 척을 멈추고, 편집자의 취향과 견해를 반영하는 학술지를 받아들여야 함
아니면 arxiv 같은 표준 장소에 모든 것을 올리면 됨
PDF를 업로드하는 데는 희소 자원이 없음- 실제 결정을 내리는 건 편집자가 아니라 심사자에 가까움
심사자가 좋은 점수나 무난한 점수를 주면 그대로 출판되고, 논문을 혹평하면 편집자가 자세를 고쳐 앉고 저자들이 심사자의 불만을 충분히 반영했는지 판단해야 함
그래도 기준을 요구하는 쪽은 여전히 편집자가 아니라 심사자임 - 이참에 인용 시스템도 개선해서 참고문헌이 하이퍼링크가 되고, 코드 산출물에도 접근할 수 있으면 좋겠음
- 실제 결정을 내리는 건 편집자가 아니라 심사자에 가까움
-
알 수 없는 이유로 emacs를 쓰지 않는 사람들에게 유용함
실행한 뒤 다시 편집하는 흐름은 번거로워서 좋은 작업 흐름으로 만들기 어려울 수도 있음
저자는 emacs “writegood”에 공을 돌리지만, 개인적으로 가장 좋아하는 문체 단속 플러그인은 “artbollocks-mode”임 -
관련 글:
Shell scripts to improve your writing - https://news.ycombinator.com/item?id=13295530 - 2017년 1월, 댓글 55개
Shell scripts to improve your writing, or "My advisor rewrote himself in bash." - https://news.ycombinator.com/item?id=1529166 - 2010년 7월, 댓글 31개