Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Polish English academic papers for SSCI journal submission. This skill checks grammar, improves readability, and enhances academic tone. Use when the user asks to polish, proofread, edit, or improve their English academic paper, manuscript, or article — especially when targeting SSCI, SCI, or other international journals. Also use when the user asks to "润色", "修改语法", "提升学术性", "polish my paper", or mentions their paper needs language improvement for journal submission. Always trigger on any reques
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 232% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 236% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 254% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 54% | 0% |
> 作者: 刘松岐(辽宁大学)| copaper.ai 团队培训班学员
Polish English academic manuscripts for submission to SSCI/SCI journals. This skill integrates principles from three authoritative writing guides:
When asked to polish a paper, follow this three-pass approach:
Fix objective errors first:
Refer to references/grammar.md for the complete grammar rule checklist.
Improve clarity and fluency:
Refer to references/style.md for the complete style rule checklist.
Enhance academic rigor:
Refer to references/academic.md for the complete academic standards checklist.
When polishing, show results in this structure:
Briefly list what was fixed at each pass level.
Present the full polished text. If only sections were edited, clearly mark which sections.
List specific changes with before/after comparisons for major revisions. Use this format:
"before" → "after"These rules from the three books should be applied in every polishing session unless the user specifies otherwise:
Beyond the standard grammar rules, always verify:
.) must begin with a capital letter, excluding abbreviations (e.g., i.e., e.g., etc., et al.). This applies to all prose paragraphs.pythonimport re for i, p in enumerate(doc.paragraphs): for s in re.split(r'(?<=[.!?])\s+', p.text.strip()): if len(s.split()) > 40: print(f"P{i} ({len(s.split())}w): {s[:120]}...")
Only flag sentences in prose paragraphs (skip table cells, figure captions, and variable definition lists). Split at natural break points: before coordinating conjunctions (and, but, or), relative pronouns (which, that), or between major clause boundaries.
CRITICAL: Use python-docx, not hand-rolled XML surgery. The unpack→lxml→repack approach has a known bug where apply_tc corrupts text that spans multiple <w:t> elements, creating duplicate paragraph fragments. python-docx handles all OOXML internally and cannot introduce this class of bug.
Use python-docx to extract ALL text (body + table cells):
pythonfrom docx import Document doc = Document("input.docx") all_paras = list(doc.paragraphs) for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: all_paras.append(para) for p in all_paras: print(p.text)
Go through ALL paragraphs systematically against the grammar.md, style.md, and academic.md checklists. Document every issue found, then compile the final change list. Only include changes that are definite errors or clear improvements — do not over-polish.
CRITICAL: Before clearing any paragraph, capture its original formatting from the first run. Apply this formatting to all new runs so the output matches the original document.
pythonfrom docx.shared import Pt, RGBColor, Emu from docx.oxml.ns import qn RED = RGBColor(0xFF, 0x00, 0x00) def get_para_format(para): """Capture font name, size, and bold/italic from the paragraph's first run.""" if para.runs: first = para.runs[0] return { 'name': first.font.name, 'size': first.font.size, 'bold': first.font.bold, 'italic': first.font.italic, } # Fallback: use paragraph style defaults style = para.style return { 'name': style.font.name if style.font.name else 'Times New Roman', 'size': style.font.size if style.font.size else Pt(12), 'bold': style.font.bold if style.font.bold else False, 'italic': style.font.italic if style.font.italic else False, } def apply_format(run, fmt): """Apply captured formatting to a run.""" if fmt['name']: run.font.name = fmt['name'] if fmt['size']: run.font.size = fmt['size'] run.font.bold = fmt['bold'] run.font.italic = fmt['italic'] for old, new in CHANGES: for para in all_paras: idx = para.text.find(old) if idx == -1: continue fmt = get_para_format(para) before = para.text[:idx] after = para.text[idx + len(old):] # para.clear() preserves paragraph-level formatting # (alignment, spacing, indentation) but removes all runs para.clear() if before: r = para.add_run(before) apply_format(r, fmt) r = para.add_run(new) apply_format(r, fmt) r.font.color.rgb = RED if after: r = para.add_run(after) apply_format(r, fmt) break
Why this preserves formatting:
para.clear() keeps paragraph-level properties (<w:pPr>): alignment, line spacing, indentation, widow control.get_para_format() reads the original font name, size, bold, and italic from the paragraph's first run before clearing.python# Check for duplicate paragraphs seen = {} for i, p in enumerate(all_paras): txt = p.text.strip() if len(txt) > 150 and txt in seen: print(f"WARNING: P{seen[txt]} == P{i}") else: seen[txt] = i # Check key phrases haven't multiplied import re for phrase in ["access to and understanding", "new-type agricultural"]: count = sum(1 for p in all_paras if phrase in p.text) # Count should not exceed expected occurrences doc.save("output.docx")
pythondoc.save("output.docx")
apply_tc function that inserts <w:del> and <w:ins> corrupts text spanning multiple <w:t> elements. This bug has been confirmed across multiple test runs.para.clear(), causing table cell contents to shift en masse (confirmed: 700+ paragraphs affected). Iterate doc.paragraphs only; accept that changes in table cells will be missed.<w:p> elements frequently creates sentence fragments.len(orig.paragraphs) == len(polished.paragraphs) and that prose body paragraphs have no duplicates (>150 chars).Other measured skills in the registry, with their headline benchmark lift.