hankcs/HanLP · critical · FileNotFoundError

Chinese Treebank 9.0 is a copyright dataset owned by LDC…

Error message

Chinese Treebank 9.0 is a copyright dataset owned by LDC which we cannot re-distribute. Please apply for a licence from LDC (https://catalog.ldc.upenn.edu/LDC2016T13) then download it to {path_from_url(_CTB9_HOME)}

What it means

At import time, hanlp.datasets.parsing.ctb9 tries to fetch the CTB9 dataset home and, on HTTPError (the data is not hosted), raises FileNotFoundError explaining that CTB 9.0 is LDC-licensed and cannot be redistributed. The message tells you to obtain an LDC licence and manually place the corpus at the shown local path.

Solutions

  1. Apply for an LDC licence (LDC2016T13) and download CTB9
  2. Copy/extract the corpus to the path shown in the message (path_from_url(_CTB9_HOME) — typically your HANLP data dir) and re-run
  3. Alternatively use an open Chinese treebank/dataset supported by HanLP if licensing CTB is not an option

Example fix

# shell: after obtaining CTB9 from LDC
mkdir -p ~/hanlp/ctb9
cp -r /path/to/ctb9/* ~/hanlp/ctb9/
# then re-run your script
Defensive patterns

Strategy: validation

Validate before calling

from hanlp.utils.io_util import path_from_url
from os.path import exists
ctb_home = path_from_url('http://nlp.ee.polyu.edu.hk/releases/ctb9/')  # or reuse _CTB9_HOME
if not exists(ctb_home):
    raise SystemExit(f'CTB9 corpus missing at {ctb_home}. Obtain LDC2016T13 and place it there.')

Try / catch

try:
    import hanlp.datasets.parsing.ctb9  # noqa
except FileNotFoundError as e:
    print(e)  # show licence/placement instructions
    sys.exit(1)

Prevention

When it happens

Trigger: import hanlp.datasets.parsing.ctb9 (or a pipeline that pulls it in) without the CTB9 corpus already at the expected local path; the download attempt gets an HTTP error instead of data.

Common situations: Fresh machines/environments; assuming HanLP auto-downloads all datasets like it does for open ones; new users unaware CTB is paid LDC data.

Related errors


AI-assisted analysis of hankcs/HanLP@ddb1299bdd (2026-08-27). Data as JSON: /api/errors/c23b9799b47383f5. Report an issue: GitHub.

Appendix: source

Thrown at hanlp/datasets/parsing/ctb9.py:49

CTB9_BRACKET_LINE_NOEC_TRAIN = _CTB9_HOME + 'tasks/par/train.noempty.txt'
'''Training set for ctb9 constituency parsing without empty categories.'''
CTB9_BRACKET_LINE_NOEC_DEV = _CTB9_HOME + 'tasks/par/dev.noempty.txt'
'''Dev set for ctb9 constituency parsing without empty categories.'''
CTB9_BRACKET_LINE_NOEC_TEST = _CTB9_HOME + 'tasks/par/test.noempty.txt'
'''Test set for ctb9 constituency parsing without empty categories.'''

CTB9_SD330_TRAIN = _CTB9_HOME + 'tasks/dep/train.conllx'
'''Training set for ctb9 in Stanford Dependencies 3.3.0 standard.'''
CTB9_SD330_DEV = _CTB9_HOME + 'tasks/dep/dev.conllx'
'''Dev set for ctb9 in Stanford Dependencies 3.3.0 standard.'''
CTB9_SD330_TEST = _CTB9_HOME + 'tasks/dep/test.conllx'
'''Test set for ctb9 in Stanford Dependencies 3.3.0 standard.'''

try:
    get_resource(_CTB9_HOME)
except HTTPError:
    raise FileNotFoundError(
        'Chinese Treebank 9.0 is a copyright dataset owned by LDC which we cannot re-distribute. '
        f'Please apply for a licence from LDC (https://catalog.ldc.upenn.edu/LDC2016T13) '
        f'then download it to {path_from_url(_CTB9_HOME)}'
    )

make_ctb(_CTB9_HOME)

View on GitHub (pinned to ddb1299bdd)