Skip to main content

Build Status PyPI version License: MIT

DiscoverPagination

A python package for discovering numbered page delineation in documents.

Repository

https://github.com/wharton/DiscoverPagination

Background

In the Research and Analytics Department we are asked for several different types of text processing assignments. These usually take the form of "please extract the X section from Y document type 10k times" Some of these have a Table of Contents, but it is difficult to use the ToC because we do not know which pages are which.

This package is designed to discover where pages are marked, and then reference those page numbers to get sections of text. Much of the work we do involves SEC filings, which are in a type of XML format. This is optimized for that type of document, but should do well in other cases.

Requirements

  • Python 3.6
  • fuzzywuzzy: Fuzzy matching
  • python-Levenshtein: Speeds up fuzzy matching library

Quickstart

Install

$ pip install DiscoverPagination

Usage

$ python
>> from discoverpagination import *
>> with open('./example_texts/0001193125-08-010038.txt') as inputfile:
...       doc = PaginatedDocument(inputfile, clean_xml=True)
>> pages = doc[20:22]
>> print(pages)
[' <P><FONT>19 </FONT></P>\n', '\n', '\n', '<p>\n', '<HR>\n', '\n', ' <P><FONT>The ...

Methods

The way the pages are discovered takes several steps and relies on a few assumptions.

Assumptions

  1. Pages are marked
  2. Page markings are in sequential order
  3. Page markings use numeric characters
  4. Pages are numbered at the end of page
  5. Page numbers do not occur mixed with text. (There is an attempt to handle this case.)

Steps

  1. Document is read from file
  2. (OPTIONAL) XML documents are cleaned of tag attributes.
  3. Document is scanned for page markers line by line, starting with "1". (Configurable)
  4. As each number is found, the line index and text is stored in a Dict keyed to page number.
  5. The page is incremented after each number is found until no more document lines remain.
  6. The document is rescanned in reverse order to find page markers.
  7. Page markers that are the same or nearby to each other are kept.
  8. A common "best_match" format is determined by ranking each type of line.
  9. The missing page numbers are scanned for with this "best_match" in the areas they should be. E.g. A missing page 5 is searched for between pages 4 and 6 with the best pattern.
  10. If there are still missing pages it uses fuzzy matching to guess based on placement and pattern.
  11. The document is returned and can be referenced by slicing. doc[10:12] gets lines for pages 10 to 12.

Tests

python setup.py test

Reference

fuzzywuzzy
python-Levenshtein
SEC EDGAR

Contributors

Douglas H. King

License

MIT

Metadata

Release files for DiscoverPagination 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for DiscoverPagination 0.1.4
File Size Uploaded
DiscoverPagination-0.1.4.tar.gz 11.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for DiscoverPagination 0.1.4
File Interpreter ABI Platform
DiscoverPagination-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 24.9 kB

Release files / DiscoverPagination-0.1.4.tar.gz

Download URL DiscoverPagination-0.1.4.tar.gz
Size 11.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3228467e9d68ffb7a3b273362e1c2527bf6ce0d64cb5a805eefe19adb228a5e8
BLAKE2b-256 checksum
How to use checksums
53f1aacb5f7623a8fba1a5d74000fed2f55f990d93ed609bbe57141219d6f86d
Upload date
Uploaded using Trusted Publishing?
What is 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.32.2 CPython/3.6.3

Release files / DiscoverPagination-0.1.4-py3-none-any.whl

Download URL DiscoverPagination-0.1.4-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f3d9fe2efdc5f195629aea11f27e19ba9dba46165403e26436c31ee809a2c9de
BLAKE2b-256 checksum
How to use checksums
e54a8c324ce81e37153102c46f3b1702e798b00a23a65be96351eded624e21a5
Upload date
Uploaded using Trusted Publishing?
What is 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.32.2 CPython/3.6.3

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page