Fix translationese in Korean sentences with AI
A bare "fix the translationese" request rewrites fine Korean sentences too. Scope the prompt, add examples, then check pattern counts and a word diff.
Ask Claude to "fix the translationese" in six Korean paragraphs and every pattern disappears. So does the difference between 이용률 증가 ("a rise in the usage rate") and 이용자가 늘어 ("more users"), which the model swapped in most runs. This page shows a prompt that leaves that sentence alone and a check that proves it did.
[1] The test document is a made-up office newsletter, in Korean because the task is Korean. It contains ten translationese patterns: ~을 통해 (by means of), ~에 대해 (about), ~되어지다 (double passive), ~할 필요가 있다 (there is a need to), ~에 의해 (passive agent), ~로 인해 (due to), ~를 가지고 있다 (have), ~에 있어서 (in terms of), ~게 되다 (come to be), ~고 하는 것 (the thing said to be). One sentence is a deliberate decoy: in paragraph 2, 통해 means a physical route, not a means, so it is not translationese.
1. 이번 달 소식지에서는 신규 주차 시스템에 대해 안내드립니다. 시스템은 차량 번호 인식을 통해 출입이 관리되어집니다. 등록되지 않은 차량은 정문 차단기 앞에서 멈추게 됩니다. 2. 지난 주말 정전으로 인해 서버실 점검이 하루 미루어졌습니다. 점검 일정에 있어서 변경이 생기면 각 팀 담당자에게 바로 알려야 할 필요가 있습니다. 점검반은 비상 계단을 통해 서버실로 이동했습니다. 3. 총무팀은 올해 비품 구매 예산을 가지고 있으며, 구매 요청은 매주 금요일까지 접수하는 것이 필요합니다. 요청서 양식은 사내 게시판에 공유되어 있습니다. 4. 신입 사원 교육 자료는 인사팀에 의해 새로 만들어졌습니다. 교육은 선배 사원과의 면담을 통해 진행되며, 일정에 대해서는 다음 주 월요일에 공지될 예정입니다. 5. 휴게실 정수기 필터는 분기마다 교체되어지고 있습니다. 필터 교체일에는 물맛이 일시적으로 달라질 수 있다고 하는 것이 업체의 설명입니다. 문의 사항은 총무팀 내선으로 연락 주시기 바랍니다. 6. 사내 도서관은 이용률 증가로 인해 운영 시간이 연장됩니다. 대출 기한에 대해 궁금한 점은 도서관 게시판을 통해 질문해 주세요. 반납이 늦어질 경우에 있어서는 연체 안내 메일이 발송되게 됩니다.[2] Start with the short prompt, Fix the translationese in these Korean newsletter paragraphs. plus the paragraphs, run as claude -p --model claude-sonnet-5-5 --max-turns 1 --tools "" --setting-sources "" --strict-mcp-config < prompt.naive.txt. Judge the result two ways: a regex count of the patterns, and a word-level diff of each sentence against the original, aligned by sentence order. For reviewing AI edits with word diffs in general, see Review AI edits with a word-level diff.
#!/usr/bin/env python3"""usage: check.py doc.txt out.txt - count translationese patterns, word-diff changed sentences"""import re, sys, difflibP = r"[을를] 통해|에 대해|되어지|되어진|것이 필요|할 필요가 있|에 의해|로 인해|가지고 있|에 있어서|게 됩|고 하는 것"doc = open(sys.argv[1], encoding="utf-8").read()out = "\n".join(l.replace("**", "") for l in open(sys.argv[2], encoding="utf-8") if re.match(r"(\*\*)?\d\.", l))print("TOTAL ", len(re.findall(P, doc)), "->", len(re.findall(P, out)))split = lambda t: re.split(r"(?<=\.)\s+", " ".join(t.split()))for i, (a, b) in enumerate(zip(split(doc), split(out)), 1): hit = re.search(P, a) if a == b: if hit: print(f"S{i:02d} KEPT with pattern: {a[:30]}") continue d = [t[0] + t[2:] for t in difflib.ndiff(a.split(), b.split()) if t[0] in "-+"] print(f"S{i:02d} {'CHANGED' if hit else 'CHANGED-NO-PATTERN'}: {' '.join(d)}")$ python3 -I check.py doc.ko.txt out.naive.en.2.txt | grep -E 'TOTAL|S06|S08|S20'TOTAL 19 -> 0S06 CHANGED: -인해 -미루어졌습니다. +미뤄졌습니다.S08 CHANGED: +비상계단으로 -비상 -계단을 -통해 -서버실로 +서버실에S20 CHANGED: +이용자가 +늘어 -이용률 -증가로 -인해 -시간이 +시간을 -연장됩니다. +연장합니다.Patterns went from 19 to 0. But S20 changed "usage rate rose" (이용률 증가) into "users increased" (이용자가 늘어), which is a different claim. That change appeared in 3 of the 4 short-prompt runs (Korean and English prompts together). The decoy S08 was rewritten in all 4, and S06 미루어졌습니다, which is not translationese, became 미뤄졌습니다 in all 4. Every run ended with a "main edits" summary after the paragraphs, and all four added an honorific (궁금하시면) in S21 that the original did not have. (This run bolded the paragraph numbers, which is why the checker strips **.)
[3] Now scope the prompt. Say what to do rather than listing prohibitions, and give three corrected pairs inside <example> tags. Anthropic's prompting guide recommends examples that resemble the real task, wrapped in tags, so that format and tone follow them. The three pairs here use sentences that are not in the document.
The <document> below holds paragraphs from a Korean company newsletter. Rewrite the translationese in them so they read as natural Korean. Scope:- Change only sentences that contain a translationese pattern. Leave every other sentence exactly as written, character for character.- Keep meaning, numbers, dates and proper nouns. Keep the paragraph numbers.- When 통해 describes a physical route rather than a means or method, it is not translationese. Leave it. Output format:- Write all paragraphs in numbered order, revised.- After the paragraphs, add one line per changed sentence in English: "original -> revised (pattern type)".- Write nothing else. Here are three corrected examples. Match their tone and degree of change. <example>원문: 회의 결과는 메일을 통해 공유됩니다.수정: 회의 결과는 메일로 공유합니다.</example><example>원문: 보안 정책에 대해 설명드리겠습니다.수정: 보안 정책을 설명드리겠습니다.</example><example>원문: 문은 열쇠를 통해서만 열려질 수 있습니다.수정: 문은 열쇠로만 열립니다.</example> <document>{the 6 paragraphs}</document>[4] Run it twice and run the same check.
$ python3 -I check.py doc.ko.txt out.en.1.txt | grep -E 'TOTAL|KEPT|S20'TOTAL 19 -> 2S04 KEPT with pattern: 등록되지 않은 차량은 정문 차단기 앞에서 멈추게 됩니다S08 KEPT with pattern: 점검반은 비상 계단을 통해 서버실로 이동했습니다.S20 CHANGED: -인해Nineteen hits became two. S08 is the decoy, kept on purpose. S04 멈추게 됩니다 is a miss. S20 now drops only 인해 and keeps 이용률 증가, and 미루어졌습니다 is untouched. The second run (out.en.2.txt) gave the same 19 -> 2; the two Korean-prompt runs gave 19 -> 2 and 19 -> 1. When the count is not what you expect, the KEPT lines show which sentences to send back.
[5] Still read the CHANGED lines. Across the four scoped runs, three weak spots showed up:
- S04
멈추게 됩니다was left in three of four runs. None of the three example pairs shows a게 되다pattern. - S10 and S17: the model goes past "translationese only" in places, turning
총무팀은into총무팀에는(2 of 4 runs) and rewriting~다고 하는 것이 업체의 설명입니다as업체에 따르면 …or업체는 … 설명합니다, which changes the sentence frame. - S21: one run (the first English-prompt run) added an honorific (
궁금하시면) that the original did not have; the other three wrote궁금하면. That is the kind of thing that varies.
[6] A person reads the diff before anything is applied. The check shows where words changed, not whether the meaning did. Do not apply the output as is to contracts, figures, dates, or anything where one syllable changes the result.