diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-05 11:50:55 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 11:50:55 +0000 |
| commit | 0a3abacf1e5a7accbe16545b16e7ef2c4187ce21 (patch) | |
| tree | 19b450373a3aa4d56c8f2a61144c1659f406a743 /python-negspacy.spec | |
| parent | b6f43a8247de0c5c97e0a8ff3c40ece061186f83 (diff) | |
automatic import of python-negspacyopeneuler20.03
Diffstat (limited to 'python-negspacy.spec')
| -rw-r--r-- | python-negspacy.spec | 609 |
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 + +[](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [](https://spacy.io) [](https://pypi.org/project/negspacy/) [](https://zenodo.org/badge/latestdoi/201071164) [](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 + +[](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [](https://spacy.io) [](https://pypi.org/project/negspacy/) [](https://zenodo.org/badge/latestdoi/201071164) [](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 + +[](https://dev.azure.com/jenopizzaro/negspacy/_build/latest?definitionId=2&branchName=master) [](https://spacy.io) [](https://pypi.org/project/negspacy/) [](https://zenodo.org/badge/latestdoi/201071164) [](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 |
