//- 💫 DOCS > USAGE > CUSTOMIZING THE PIPELINE

include ../../_includes/_mixins

p
    |  spaCy provides several linguistic annotation functions by default. Each
    |  function takes a Doc object, and modifies it in-place. The default
    |  pipeline is #[code [nlp.tagger, nlp.entity, nlp.parser]]. spaCy 1.0
    |  introduced the ability to customise this pipeline with arbitrary
    |  functions.

+code.
    def arbitrary_fixup_rules(doc):
        for token in doc:
            if token.text == u'bill' and token.tag_ == u'NNP':
                token.tag_ = u'NN'

    def custom_pipeline(nlp):
        return (nlp.tagger, arbitrary_fixup_rules, nlp.parser, nlp.entity)

    nlp = spacy.load('en', create_pipeline=custom_pipeline)

p
    |  The easiest way to customise the pipeline is to pass a
    |  #[code create_pipeline] callback to the #[code spacy.load()] function.

p
    |  The callback you pass to #[code create_pipeline] should take a single
    |  argument, and return a sequence of callables. Each callable in the
    |  sequence should accept a #[code Doc] object and modify it in place.

p
    |  Instead of passing a callback, you can also write to the
    |  #[code .pipeline] attribute directly.

+code.
    nlp = spacy.load('en')
    nlp.pipeline = [nlp.tagger]