A library for calculating a variety of features from text using spaCy
Project description
TextDescriptives
A Python library for calculating a large variety of statistics from text(s) using spaCy v.3 pipeline components and extensions. TextDescriptives can be used to calculate several descriptive statistics, readability metrics, and metrics related to dependency distance. The components are implemented using getters, which means they will only be calculated when accessed.
🔧 Installation
pip install textdescriptives
📰 News
- TextDescriptives has been completely re-implemented using spaCy v.3.0. The stanza implementation can be found in the
stanza_version
branch and will no longer be maintained.
👩💻 Usage
Import the library and add the component to your pipeline using the string name of the "textdescriptives" component factory:
import spacy
import textdescriptives as td
nlp = spacy.load("en_core_web_sm")
nlp.add_pipe("textdescriptives")
doc = nlp("The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. Much that once was is lost, for none now live who remember it.")
# access some of the values
doc._.readability
doc._.token_length
TextDescriptives includes a convenience function for extracting metrics to a Pandas DataFrame
td.extract_df(doc)
text | token_length_mean | token_length_median | token_length_std | sentence_length_mean | sentence_length_median | sentence_length_std | syllables_per_token_mean | syllables_per_token_median | syllables_per_token_std | n_tokens | n_unique_tokens | proportion_unique_tokens | n_characters | n_sentences | flesch_reading_ease | flesch_kincaid_grade | smog | gunning_fog | automated_readability_index | coleman_liau_index | lix | rix | dependency_distance_mean | dependency_distance_std | prop_adjacent_dependency_relation_mean | prop_adjacent_dependency_relation_std | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. Much that once was is lost, for none now live who remember it. | 3.28571 | 3 | 1.54127 | 7 | 6 | 3.09839 | 1.08571 | 1 | 0.368117 | 35 | 23 | 0.657143 | 121 | 5 | 107.879 | -0.0485714 | 5.68392 | 3.94286 | -2.45429 | -0.708571 | 12.7143 | 0.4 | 1.69524 | 0.422282 | 0.44381 | 0.0863679 |
Set which group(s) of metrics you want to extract using the metrics
parameter (one or more of readability
, dependency_distance
, descriptive_stats
, defaults to all
)
If extract_df
is called on an object created using nlp.pipe
it will format the output with 1 row for each document and a column for each metric.
docs = nlp.pipe(['The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. Much that once was is lost, for none now live who remember it.',
'He felt that his whole life was some kind of dream and he sometimes wondered whose it was and whether they were enjoying it.'])
td.extract_df(docs, metrics="dependency_distance")
text | dependency_distance_mean | dependency_distance_std | prop_adjacent_dependency_relation_mean | prop_adjacent_dependency_relation_std | |
---|---|---|---|---|---|
0 | The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. Much that once was is lost, for none now live who remember it. | 1.69524 | 0.422282 | 0.44381 | 0.0863679 |
1 | He felt that his whole life was some kind of dream and he sometimes wondered whose it was and whether they were enjoying it. | 2.56 | 0 | 0.44 | 0 |
The text
column can by exluded by setting include_text
to False
.
Using specific components
The specific components (descriptive_stats
, readability
, and dependency_distance
) can be loaded individually. This can be helpful if you're only interested in e.g. readability metrics or descriptive statistics and don't want to run the dependency parser.
nlp = spacy.blank("da")
nlp.add_pipe("descriptive_stats")
docs = nlp.pipe(['Da jeg var atten, tog jeg patent på ild. Det skulle senere vise sig at blive en meget indbringende forretning',
"Spis skovsneglen, Mulle. Du vil jo gerne være med i hulen, ikk'?"])
# extract_df is clever enough to only extract metrics that are in the Doc
td.extract_df(docs, include_text = False)
token_length_mean | token_length_median | token_length_std | sentence_length_mean | sentence_length_median | sentence_length_std | syllables_per_token_mean | syllables_per_token_median | syllables_per_token_std | n_tokens | n_unique_tokens | proportion_unique_tokens | n_characters | n_sentences | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4.4 | 3 | 2.59615 | 10 | 10 | 1 | 1.65 | 1 | 0.852936 | 20 | 19 | 0.95 | 90 | 2 |
1 | 4 | 3.5 | 2.44949 | 6 | 6 | 3 | 1.58333 | 1 | 0.862007 | 12 | 12 | 1 | 53 | 2 |
Available attributes
The table below shows the metrics included in TextDescriptives and their attribues on spaCy's Doc
, Span
, and Token
objects. For more information, see the docs.
Attribute | Component | Description |
---|---|---|
Doc._.token_length |
descriptive_stats |
Dict containing mean, median, and std of token length. |
Doc._.sentence_length |
descriptive_stats |
Dict containing mean, median, and std of sentence length. |
Doc._.syllables |
descriptive_stats |
Dict containing mean, median, and std of number of syllables per token. |
Doc._.counts |
descriptive_stats |
Dict containing the number of tokens, number of unique tokens, proportion unique tokens, and number of characters in the Doc. |
Doc._.readability |
readability |
Dict containing Flesch Reading Ease, Flesch-Kincaid Grade, SMOG, Gunning-Fog, Automated Readability Index, Coleman-Liau Index, LIX, and RIX readability metrics for the Doc. |
Doc._.dependency_distance |
dependency_distance |
Dict containing the mean and standard deviation of the dependency distance and proportion adjacent dependency relations in the Doc. |
Span._.token_length |
descriptive_stats |
Dict containing mean, median, and std of token length in the span. |
Span._.counts |
descriptive_stats |
Dict containing the number of tokens, number of unique tokens, proportion unique tokens, and number of characters in the span. |
Span._.dependency_distance |
dependency_distance |
Dict containing the mean dependency distance and proportion adjacent dependency relations in the Doc. |
Token._.dependency_distance |
dependency_distance |
Dict containing the dependency distance and whether the head word is adjacent for a Token. |
Authors
Developed by Lasse Hansen (@HLasse) at the Center for Humanities Computing Aarhus
Collaborators:
- Ludvig Renbo Olsen (@ludvigolsen, ludvigolsen.dk)
- Kenneth Enevoldsen (@KennethEnevoldsen)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file textdescriptives-0.2.0.tar.gz
.
File metadata
- Download URL: textdescriptives-0.2.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ec39b537002b7ac73c908fbeecb0df6c4769f1cacdccb41c152fdf883a435bec |
|
MD5 | 88833283276c707b4a517c859ffb8c86 |
|
BLAKE2b-256 | cb9f1c14073e12a97af338bafd78e50a1b16232acf5764e1602414dae7c71fac |
File details
Details for the file textdescriptives-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: textdescriptives-0.2.0-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78897df98c842b1f8c981da9052c076f47a19237337a1d647ed69598f59d2cfe |
|
MD5 | 72985c7237f2df721a78406c70a568c1 |
|
BLAKE2b-256 | c94ca32b009fd8e22c0639a3fe76c5325f1800bf75ab3249559d84382426f951 |