Skip to main content

Metrical scansion for Spanish verses

Project description

LibEscansión

A metrical scansion library for Spanish License: LGPL Version: 1.1.0 Python versions: 3.11

libEscansión

A Python library for for metrical scansion of mixed Spanish verses

libEscansión is a state-of-the-art Python library for analysing Spanish mixed verses. It parses the verse to find syllabic nuclei, rhythmic pattern, assonance, and consonance, as well as to provide a phonological transcription of the syllables. It scores 98.64% accuracy against the manually annotated corpus [ADSO 100] with the option adso=True, which forces considering interjections as non-stressed to meet ADSO's annotation criteria. This tops the until-now state-of-the-art. Nevertheless, vanilla scansion – i.e., stressing interjections – still outperforms the state-of-the art, achieving 97.01% accuracy. Furthermore, after evaluating the corpus' manual scansion and spelling, we found that the disagreement was in most cases due to an improper spelling or even to non-standard human analysis (unstressed interjections, adverbd in -mente lacking secondary stress, etc.). With a corrected corpus, the agreement reaches 99.13 %, being the resting 0.87% non-erroneus disagreements.

This library is part of the research project Sound and Meaning in Spanish Golden Age Literature. It was created as a means to generate a corpus of parsed metres, which is publicicily accessible here

Installation

pip install libEscansion

Requeriments

Following libraries are required:

  • stanza >= 1.7 with Spanish language models
  • fonemas >= 2.0.18
  • silabeador >= 1.1.11.post6

Usage example

The library provides the class VerseMetre. It accepts an obligatory string for the verse and an optional list of integers with possibles syllable-counts. If a second argment is not provided, it performs a regular scansion, i.e., with all natural dialoephas.

>>> import libEscansion
>>> verse = verse = libscansion.VerseMetre('Cerrar podrá mis ojos la postrera ', [11,8,7])
>>> verse.count 
11
>>> verse.syllables
['θe', 'rAɾ', 'po', 'dɾA', 'mis', 'O', 'xos', 'la', 'pos', 'tɾE', 'ɾa']
>>> verse.nuclei  
'eAoAiOoaoEa'
>>> verse.rhyme
'eɾa'
>>> verse.asson
'ea'
>>> verse.rhythm  
'-+-+-+---+-'

The directory 'utils' contains a file that can be used to test the library against ADSO 100 (or any other corpus of sonnets whasoever as long as they are encoded as XML-TEI with their metres are annotated). In the same directory containing the XML files, type:

./adso100test.py *xml

Release History

1.1.0 (02/09/2024)

  • Optimisation and documentation with AI

1.0.0 (24/07/2023)

  • First public version

1.0.0pre5 (5/07/2023)

  • Solved bug with fewer syllables than expected

1.0.0pre4 (20/06/2023)

  • Rules diphthong vs perception for triphthong

1.0.0pre2 (17/04/2023)

  • Solved diaereses identification issue

1.0.0pre1

  • Initial arrangement of the directory tree, metadata, &c. to make the mess more presentable in public

How to cite libEscansión

Authors of scientific papers including results generated using libEscansión are encouraged to cite the following paper.

@article{SanzLazaroF_DHQ2024183, 
    author    = {Sanz-Lázaro, Fernando},
    title     = {libEscansión: A Recursive Precedence Approach to Metrical Scansion},
    volume    = {18},
    number    = {3},
    date  = {2024},
    journal   = {Digital Humanities Quarterly},
    url = {[https://doi.org/10.5944/rhd.vol.8.2023.37830](https://digitalhumanities.org/dhq/vol/18/3/000739/000739.html)}
}

Meta

Copyright 2023 Fernando Sanz-Lázaro – @FerdlSanzfsanzl@gmail.com

Distributed under the LGPL 2.1 license. See LICENSE for more information.

https://github.com/fsanzl/libEscansion

Contributing

  1. Fork it (https://github.com/fsanzl/libEscansion/fork)
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -am 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Create a new Pull Request

Copyright

Copyright (C) 2023 Fernando Sanz-Lázaro <fsanzl@gmail.com>

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library. If not, see <https://www.gnu.org/licenses/>.

References

ADSO 100: Navarro-Colorado, Borja; Ribes Lafoz, María, and Sánchez, Noelia (2015) "Metrical annotation of a large corpus of Spanish sonnets: representation, scansion and evaluation" 10th edition of the Language Resources and Evaluation Conference 2016 Portorož, Slovenia. (PDF)

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

libescansion-1.1.0.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

libEscansion-1.1.0-py3-none-any.whl (22.4 kB view details)

Uploaded Python 3

File details

Details for the file libescansion-1.1.0.tar.gz.

File metadata

  • Download URL: libescansion-1.1.0.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for libescansion-1.1.0.tar.gz
Algorithm Hash digest
SHA256 c3d35defffb7709725e308f76616e96c6b93c9c50ff444d4562b4631162f9904
MD5 de45c6df5f8691ce992310c518468606
BLAKE2b-256 822c635bf12981e0adde6e9eab2766dff52912c23773a719c1d27e04b415cb85

See more details on using hashes here.

File details

Details for the file libEscansion-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: libEscansion-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for libEscansion-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5c290763804d1a4eff7ec91468f33415a4abf4d633c3cb88de58ceed071b1756
MD5 00de13927ac4daf85ec800d272b43aa6
BLAKE2b-256 ff86baa02f75e81a928c06fb39c13fec507b795529e28f349a8b699c6bd99bca

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