summaryrefslogtreecommitdiff
path: root/python-negspacy.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-negspacy.spec')
-rw-r--r--python-negspacy.spec609
1 files changed, 609 insertions, 0 deletions
diff --git a/python-negspacy.spec b/python-negspacy.spec
new file mode 100644
index 0000000..fb2d82e
--- /dev/null
+++ b/python-negspacy.spec
@@ -0,0 +1,609 @@
+%global _empty_manifest_terminate_build 0
+Name: python-negspacy
+Version: 1.0.3
+Release: 1
+Summary: A spaCy pipeline object for negation.
+License: MIT
+URL: https://github.com/jenojp/negspacy
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/ed/e2/6adadc26af328268522da923aef42dfb3ae88e49122e54c34062f13505b3/negspacy-1.0.3.tar.gz
+BuildArch: noarch
+
+
+%description
+<p align="center"><img width="40%" src="docs/icon.png" /></p>
+
+
+# negspacy: negation for spaCy
+
+[![Build Status](https://dev.azure.com/jenopizzaro/negspacy/_apis/build/status/jenojp.negspacy?branchName=master)](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [![Built with spaCy](https://img.shields.io/badge/made%20with%20❤%20and-spaCy-09a3d5.svg)](https://spacy.io) [![pypi Version](https://img.shields.io/pypi/v/negspacy.svg?style=flat-square)](https://pypi.org/project/negspacy/) [![DOI](https://zenodo.org/badge/201071164.svg)](https://zenodo.org/badge/latestdoi/201071164) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/ambv/black)
+
+spaCy pipeline object for negating concepts in text. Based on the NegEx algorithm.
+
+***NegEx - A Simple Algorithm for Identifying Negated Findings and Diseases in Discharge Summaries
+Chapman, Bridewell, Hanbury, Cooper, Buchanan***
+[https://doi.org/10.1006/jbin.2001.1029](https://doi.org/10.1006/jbin.2001.1029)
+
+## What's new
+Version 1.0 is a major version update providing support for spaCy 3.0's new interface for adding pipeline components. As a result, it is not backwards compatible with previous versions of negspacy.
+
+If your project uses spaCy 2.3.5 or earlier, you will need to use version 0.1.9. See [archived readme](https://github.com/jenojp/negspacy/blob/v0.1.9_spacy_2.3.5/README.md).
+
+## Installation and usage
+Install the library.
+```bash
+pip install negspacy
+```
+
+Import library and spaCy.
+```python
+import spacy
+from negspacy.negation import Negex
+```
+
+Load spacy language model. Add negspacy pipeline object. Filtering on entity types is optional.
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe("negex", config={"ent_types":["PERSON","ORG"]})
+
+```
+
+View negations.
+```python
+doc = nlp("She does not like Steve Jobs but likes Apple products.")
+
+for e in doc.ents:
+ print(e.text, e._.negex)
+```
+
+```console
+Steve Jobs True
+Apple False
+```
+
+Consider pairing with [scispacy](https://allenai.github.io/scispacy/) to find UMLS concepts in text and process negations.
+
+## NegEx Patterns
+
+* **pseudo_negations** - phrases that are false triggers, ambiguous negations, or double negatives
+* **preceding_negations** - negation phrases that precede 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")
+
+### Termsets
+
+Designate termset to use, `en_clinical` is used by default.
+
+* `en` = phrases for general english language text
+* `en_clinical` **DEFAULT** = adds phrases specific to clinical domain to general english
+* `en_clinical_sensitive` = adds additional phrases to help rule out historical and possibly irrelevant entities
+
+To set:
+```python
+from negspacy.negation import Negex
+from negspacy.termsets import termset
+
+ts = termset("en")
+
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":ts.get_patterns()
+ }
+)
+
+```
+
+## Additional Functionality
+
+### Change patterns or view patterns in use
+
+Replace all patterns with your own set
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":{
+ "pseudo_negations": ["might not"],
+ "preceding_negations": ["not"],
+ "following_negations":["declined"],
+ "termination": ["but","however"]
+ }
+ }
+ )
+```
+
+Add and remove individual patterns on the fly from built-in termsets
+```python
+from negspacy.termsets import termset
+ts = termset("en")
+ts.add_patterns({
+ "pseudo_negations": ["my favorite pattern"],
+ "termination": ["these are", "great patterns", "but"],
+ "preceding_negations": ["wow a negation"],
+ "following_negations": ["extra negation"],
+ })
+#OR
+ts.remove_patterns(
+ {
+ "termination": ["these are", "great patterns"],
+ "pseudo_negations": ["my favorite pattern"],
+ "preceding_negations": ["denied", "wow a negation"],
+ "following_negations": ["unlikely", "extra negation"],
+ }
+ )
+```
+
+View patterns in use
+```python
+from negspacy.termsets import termset
+ts = termset("en_clinical")
+print(ts.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:
+```python
+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```:
+
+```python
+nlp = spacy.load("en_core_sci_sm")
+ts = termset("en_clinical")
+nlp.add_pipe(
+ "negex",
+ config={
+ "chunk_prefix": ["no"],
+ },
+ last=True,
+)
+doc = nlp("There is no headache.")
+for e in doc.ents:
+ print(e.text, e._.negex)
+
+# no headache True
+```
+
+
+## Contributing
+[contributing](https://github.com/jenojp/negspacy/blob/master/CONTRIBUTING.md)
+
+## Authors
+* Jeno Pizarro
+
+## License
+[license](https://github.com/jenojp/negspacy/blob/master/LICENSE)
+
+## Other libraries
+
+This library is featured in the [spaCy Universe](https://spacy.io/universe). Check it out for other useful libraries and inspiration.
+
+If you're looking for a spaCy pipeline object to extract values that correspond to a named entity (e.g., birth dates, account numbers, or laboratory results) take a look at [extractacy](https://github.com/jenojp/extractacy).
+
+<p align="left"><img width="40%" src="https://github.com/jenojp/extractacy/blob/master/docs/icon.png?raw=true" /></p>
+
+%package -n python3-negspacy
+Summary: A spaCy pipeline object for negation.
+Provides: python-negspacy
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-negspacy
+<p align="center"><img width="40%" src="docs/icon.png" /></p>
+
+
+# negspacy: negation for spaCy
+
+[![Build Status](https://dev.azure.com/jenopizzaro/negspacy/_apis/build/status/jenojp.negspacy?branchName=master)](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [![Built with spaCy](https://img.shields.io/badge/made%20with%20❤%20and-spaCy-09a3d5.svg)](https://spacy.io) [![pypi Version](https://img.shields.io/pypi/v/negspacy.svg?style=flat-square)](https://pypi.org/project/negspacy/) [![DOI](https://zenodo.org/badge/201071164.svg)](https://zenodo.org/badge/latestdoi/201071164) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/ambv/black)
+
+spaCy pipeline object for negating concepts in text. Based on the NegEx algorithm.
+
+***NegEx - A Simple Algorithm for Identifying Negated Findings and Diseases in Discharge Summaries
+Chapman, Bridewell, Hanbury, Cooper, Buchanan***
+[https://doi.org/10.1006/jbin.2001.1029](https://doi.org/10.1006/jbin.2001.1029)
+
+## What's new
+Version 1.0 is a major version update providing support for spaCy 3.0's new interface for adding pipeline components. As a result, it is not backwards compatible with previous versions of negspacy.
+
+If your project uses spaCy 2.3.5 or earlier, you will need to use version 0.1.9. See [archived readme](https://github.com/jenojp/negspacy/blob/v0.1.9_spacy_2.3.5/README.md).
+
+## Installation and usage
+Install the library.
+```bash
+pip install negspacy
+```
+
+Import library and spaCy.
+```python
+import spacy
+from negspacy.negation import Negex
+```
+
+Load spacy language model. Add negspacy pipeline object. Filtering on entity types is optional.
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe("negex", config={"ent_types":["PERSON","ORG"]})
+
+```
+
+View negations.
+```python
+doc = nlp("She does not like Steve Jobs but likes Apple products.")
+
+for e in doc.ents:
+ print(e.text, e._.negex)
+```
+
+```console
+Steve Jobs True
+Apple False
+```
+
+Consider pairing with [scispacy](https://allenai.github.io/scispacy/) to find UMLS concepts in text and process negations.
+
+## NegEx Patterns
+
+* **pseudo_negations** - phrases that are false triggers, ambiguous negations, or double negatives
+* **preceding_negations** - negation phrases that precede 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")
+
+### Termsets
+
+Designate termset to use, `en_clinical` is used by default.
+
+* `en` = phrases for general english language text
+* `en_clinical` **DEFAULT** = adds phrases specific to clinical domain to general english
+* `en_clinical_sensitive` = adds additional phrases to help rule out historical and possibly irrelevant entities
+
+To set:
+```python
+from negspacy.negation import Negex
+from negspacy.termsets import termset
+
+ts = termset("en")
+
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":ts.get_patterns()
+ }
+)
+
+```
+
+## Additional Functionality
+
+### Change patterns or view patterns in use
+
+Replace all patterns with your own set
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":{
+ "pseudo_negations": ["might not"],
+ "preceding_negations": ["not"],
+ "following_negations":["declined"],
+ "termination": ["but","however"]
+ }
+ }
+ )
+```
+
+Add and remove individual patterns on the fly from built-in termsets
+```python
+from negspacy.termsets import termset
+ts = termset("en")
+ts.add_patterns({
+ "pseudo_negations": ["my favorite pattern"],
+ "termination": ["these are", "great patterns", "but"],
+ "preceding_negations": ["wow a negation"],
+ "following_negations": ["extra negation"],
+ })
+#OR
+ts.remove_patterns(
+ {
+ "termination": ["these are", "great patterns"],
+ "pseudo_negations": ["my favorite pattern"],
+ "preceding_negations": ["denied", "wow a negation"],
+ "following_negations": ["unlikely", "extra negation"],
+ }
+ )
+```
+
+View patterns in use
+```python
+from negspacy.termsets import termset
+ts = termset("en_clinical")
+print(ts.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:
+```python
+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```:
+
+```python
+nlp = spacy.load("en_core_sci_sm")
+ts = termset("en_clinical")
+nlp.add_pipe(
+ "negex",
+ config={
+ "chunk_prefix": ["no"],
+ },
+ last=True,
+)
+doc = nlp("There is no headache.")
+for e in doc.ents:
+ print(e.text, e._.negex)
+
+# no headache True
+```
+
+
+## Contributing
+[contributing](https://github.com/jenojp/negspacy/blob/master/CONTRIBUTING.md)
+
+## Authors
+* Jeno Pizarro
+
+## License
+[license](https://github.com/jenojp/negspacy/blob/master/LICENSE)
+
+## Other libraries
+
+This library is featured in the [spaCy Universe](https://spacy.io/universe). Check it out for other useful libraries and inspiration.
+
+If you're looking for a spaCy pipeline object to extract values that correspond to a named entity (e.g., birth dates, account numbers, or laboratory results) take a look at [extractacy](https://github.com/jenojp/extractacy).
+
+<p align="left"><img width="40%" src="https://github.com/jenojp/extractacy/blob/master/docs/icon.png?raw=true" /></p>
+
+%package help
+Summary: Development documents and examples for negspacy
+Provides: python3-negspacy-doc
+%description help
+<p align="center"><img width="40%" src="docs/icon.png" /></p>
+
+
+# negspacy: negation for spaCy
+
+[![Build Status](https://dev.azure.com/jenopizzaro/negspacy/_apis/build/status/jenojp.negspacy?branchName=master)](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [![Built with spaCy](https://img.shields.io/badge/made%20with%20❤%20and-spaCy-09a3d5.svg)](https://spacy.io) [![pypi Version](https://img.shields.io/pypi/v/negspacy.svg?style=flat-square)](https://pypi.org/project/negspacy/) [![DOI](https://zenodo.org/badge/201071164.svg)](https://zenodo.org/badge/latestdoi/201071164) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/ambv/black)
+
+spaCy pipeline object for negating concepts in text. Based on the NegEx algorithm.
+
+***NegEx - A Simple Algorithm for Identifying Negated Findings and Diseases in Discharge Summaries
+Chapman, Bridewell, Hanbury, Cooper, Buchanan***
+[https://doi.org/10.1006/jbin.2001.1029](https://doi.org/10.1006/jbin.2001.1029)
+
+## What's new
+Version 1.0 is a major version update providing support for spaCy 3.0's new interface for adding pipeline components. As a result, it is not backwards compatible with previous versions of negspacy.
+
+If your project uses spaCy 2.3.5 or earlier, you will need to use version 0.1.9. See [archived readme](https://github.com/jenojp/negspacy/blob/v0.1.9_spacy_2.3.5/README.md).
+
+## Installation and usage
+Install the library.
+```bash
+pip install negspacy
+```
+
+Import library and spaCy.
+```python
+import spacy
+from negspacy.negation import Negex
+```
+
+Load spacy language model. Add negspacy pipeline object. Filtering on entity types is optional.
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe("negex", config={"ent_types":["PERSON","ORG"]})
+
+```
+
+View negations.
+```python
+doc = nlp("She does not like Steve Jobs but likes Apple products.")
+
+for e in doc.ents:
+ print(e.text, e._.negex)
+```
+
+```console
+Steve Jobs True
+Apple False
+```
+
+Consider pairing with [scispacy](https://allenai.github.io/scispacy/) to find UMLS concepts in text and process negations.
+
+## NegEx Patterns
+
+* **pseudo_negations** - phrases that are false triggers, ambiguous negations, or double negatives
+* **preceding_negations** - negation phrases that precede 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")
+
+### Termsets
+
+Designate termset to use, `en_clinical` is used by default.
+
+* `en` = phrases for general english language text
+* `en_clinical` **DEFAULT** = adds phrases specific to clinical domain to general english
+* `en_clinical_sensitive` = adds additional phrases to help rule out historical and possibly irrelevant entities
+
+To set:
+```python
+from negspacy.negation import Negex
+from negspacy.termsets import termset
+
+ts = termset("en")
+
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":ts.get_patterns()
+ }
+)
+
+```
+
+## Additional Functionality
+
+### Change patterns or view patterns in use
+
+Replace all patterns with your own set
+```python
+nlp = spacy.load("en_core_web_sm")
+nlp.add_pipe(
+ "negex",
+ config={
+ "neg_termset":{
+ "pseudo_negations": ["might not"],
+ "preceding_negations": ["not"],
+ "following_negations":["declined"],
+ "termination": ["but","however"]
+ }
+ }
+ )
+```
+
+Add and remove individual patterns on the fly from built-in termsets
+```python
+from negspacy.termsets import termset
+ts = termset("en")
+ts.add_patterns({
+ "pseudo_negations": ["my favorite pattern"],
+ "termination": ["these are", "great patterns", "but"],
+ "preceding_negations": ["wow a negation"],
+ "following_negations": ["extra negation"],
+ })
+#OR
+ts.remove_patterns(
+ {
+ "termination": ["these are", "great patterns"],
+ "pseudo_negations": ["my favorite pattern"],
+ "preceding_negations": ["denied", "wow a negation"],
+ "following_negations": ["unlikely", "extra negation"],
+ }
+ )
+```
+
+View patterns in use
+```python
+from negspacy.termsets import termset
+ts = termset("en_clinical")
+print(ts.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:
+```python
+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```:
+
+```python
+nlp = spacy.load("en_core_sci_sm")
+ts = termset("en_clinical")
+nlp.add_pipe(
+ "negex",
+ config={
+ "chunk_prefix": ["no"],
+ },
+ last=True,
+)
+doc = nlp("There is no headache.")
+for e in doc.ents:
+ print(e.text, e._.negex)
+
+# no headache True
+```
+
+
+## Contributing
+[contributing](https://github.com/jenojp/negspacy/blob/master/CONTRIBUTING.md)
+
+## Authors
+* Jeno Pizarro
+
+## License
+[license](https://github.com/jenojp/negspacy/blob/master/LICENSE)
+
+## Other libraries
+
+This library is featured in the [spaCy Universe](https://spacy.io/universe). Check it out for other useful libraries and inspiration.
+
+If you're looking for a spaCy pipeline object to extract values that correspond to a named entity (e.g., birth dates, account numbers, or laboratory results) take a look at [extractacy](https://github.com/jenojp/extractacy).
+
+<p align="left"><img width="40%" src="https://github.com/jenojp/extractacy/blob/master/docs/icon.png?raw=true" /></p>
+
+%prep
+%autosetup -n negspacy-1.0.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-negspacy -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.0.3-1
+- Package Spec generated