Skip to main content

A spaCy pipeline object for negation.

Project description

negspacy: negation for spaCy

Build Status Build Status Built with spaCy pypi Version Code style: black

spaCy pipeline object for negating concepts in text. Based on the NegEx algorithm.

NegEx - A Simple Algorithm for Identifying Negated Findings and Diseasesin Discharge Summaries Chapman, Bridewell, Hanbury, Cooper, Buchanan

Installation and usage

Install the library.

pip install negspacy

Import library and spaCy.

import spacy
from negspacy.negation import Negex

Load spacy language model. Add negspacy pipeline object. Filtering on entity types is optional.

nlp = spacy.load("en_core_web_sm")
negex = Negex(nlp, ent_types=["PERSON","ORG"])
nlp.add_pipe(negex, last=True)

View negations.

doc = nlp("She does not like Steve Jobs but likes Apple products.")

for e in doc.ents:
	print(e.text, e._.negex)
Steve Jobs True
Apple False

Consider pairing with scispacy to find UMLS concepts in text and process negations.

NegEx Patterns

  • psuedo_negations - phrases that are false triggers, ambiguous negations, or double negatives
  • preceding_negations - negation phrases that preceed an entity
  • following_negations - negation phrases that follow an entity
  • termination - phrases that cut a sentence in parts, for purposes of negation detection (.e.g., "but")

Additional Functionality

Use own patterns or view patterns in use

Use own patterns

nlp = spacy.load("en_core_web_sm")
negex = Negex(nlp, termination=["but", "however", "nevertheless", "except"])

View patterns in use

patterns_dict = negex.get_patterns

Negations in noun chunks

Depending on the Named Entity Recognition model you are using, you may have negations "chunked together" with nouns. For example when using scispacy:

nlp = spacy.load("en_core_sci_sm")
doc = nlp("There is no headache.")
for e in doc.ents:
    print(e.text)

# no headache

This would cause the Negex algorithm to miss the preceding negation. To account for this, you can add a chunk_prefix:

nlp = spacy.load("en_core_sci_sm")
negex = Negex(nlp, chunk_prefix = ["no"])
nlp.add_pipe(negex)
doc = nlp("There is no headache.")
for e in doc.ents:
    print(e.text, e._.negex)

# no headache True

Contributing

contributing

Authors

  • Jeno Pizarro

License

license

API Documentation

Docs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

negspacy-0.1.6.tar.gz (6.5 kB view details)

Uploaded Source

File details

Details for the file negspacy-0.1.6.tar.gz.

File metadata

  • Download URL: negspacy-0.1.6.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.6.9

File hashes

Hashes for negspacy-0.1.6.tar.gz
Algorithm Hash digest
SHA256 f7d5834ce677bbc7854f3a52dc40774ed0864d22e5b466b3c8860a131b3e4364
MD5 4f26473201f003a2d6ce855ee748e851
BLAKE2b-256 051cd319bbc73d38fb7f3b65bd7ba179cad644c50dfd8d0ffaa7dcd399bc48b1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page