Skip to main content

beta

Project description

Open In Colab Binder

    ___    __                          __         
   /   |  / /___  _________  _________/ /__  _____
  / /| | / / __ `/ ___/ __ \/ ___/ __  / _ \/ ___/
 / ___ |/ / /_/ / /__/ /_/ / /  / /_/ /  __/ /    
/_/  |_/_/\__,_/\___/\____/_/   \__,_/\___/_/     

	ALACORDER beta 74

Getting Started with Alacorder

GitHub | PyPI | Report an issue

Alacorder processes case detail PDFs into data tables suitable for research purposes. Alacorder also generates compressed text archives from the source PDFs to speed future data collection from the same set of cases.

Installation

Alacorder can run on most devices. If your device can run Python 3.7 or later, it can run Alacorder.

  • To install on Windows and Mac, open Command Prompt (Terminal) and enter pip install alacorder or pip3 install alacorder.
  • On Mac, open the Terminal and enter pip install alacorder or pip3 install alacorder.
  • Install Anaconda Distribution to install Alacorder if the above methods do not work, or if you would like to open an interactive browser notebook equipped with Alacorder on your desktop.
    • After installation, create a virtual environment, open a terminal, and then repeat these instructions. If your copy of Alacorder is corrupted, use pip uninstall alacorder or pip3 uninstall alacorder and then reinstall it. There may be a newer version available.

Alacorder should automatically download and install missing dependencies upon setup, but you can also install them yourself with pip: pandas, numpy, PyPDF2, openpyxl, xlrd, xlwt, xarray, numexpr, bottleneck, and click. Recommended dependencies: xlsxwriter, jupyter, tabulate, matplotlib.

pip install alacorder

Using the guided interface

Once you have a Python environment up and running, you can launch the guided interface in two ways:

  1. Utilize the alacorder command line tool in Python: Use the command line tool python -m alacorder, or python3 -m alacorder. If the guided version is launched instead of the command line tool, update your installation with pip install --upgrade alacorder.

  2. Conduct custom searches with alac: Use the import statement import alacorder as alac to use the Alacorder APIs to collect custom data from case detail PDFs. See how you can make alacorder work for you in the code snippets below.

Alacorder can be used without writing any code, and exports to common formats like Excel (.xls, .xlsx), Stata (.dta), CSV (.csv), and JSON (.json).

  • Alacorder compresses case text into pickle archives (.pkl.xz) to save storage and processing time. If you need to unpack a pickle archive without importing alac, use a .xz compression tool, then read the pickle into Python with the pandas method pd.read_pickle().
import alacorder as alac

Special Queries with alac

For more advanced queries, the alacorder libraries can extract fields and tables from case records with just a few lines of code.

  • Call alac.config(input_path, table_path = '', archive_path = '') and assign it to a variable to hold your configuration object. This tells the imported methods where and how to input and output. If table_path and archive_path are left blank, alac.parse…() methods will print to console and return the DataFrame object.

  • Call alac.write.Archive(config) to export a full text archive. It's recommended that you create a full text archive (.pkl.xz) file before making tables from your data. Full text archives can be scanned faster than PDF directories and require less storage. Full text archives can be imported to Alacorder the same way as PDF directories.

  • Call alac.parse.Tables(config) to export detailed case information tables. If export type is .xls or .xlsx, the cases, fees, and charges tables will be exported.

  • Call alac.parse.Charges(config) to export charges table only.

  • Call alac.parse.Fees(config) to export fees table only.

  • Call alac.parse.CaseInfo(config) to export cases table only.

import warnings
warnings.filterwarnings('ignore')

import alacorder as alac

pdf_directory = "/Users/crimson/Desktop/Tutwiler/"
archive = "/Users/crimson/Desktop/Tutwiler.pkl.xz"
tables = "/Users/crimson/Desktop/Tutwiler.xlsx"

# make full text archive from PDF directory 
c = alac.config(pdf_directory, archive_path=archive)
alac.write.Archive(c)

print("Full text archive complete. Now processing case information into tables at " + tables)

# then scan full text archive for spreadsheet
d = alac.config(archive, table_path=tables)
alac.parse.Tables(d)

Custom Parsing with alac.parse.map()

If you need to conduct a custom search of case records, Alacorder has the tools you need to extract custom fields from case PDFs without any fuss. Try out alac.parse.map() to search thousands of cases in seconds.

import alacorder as alac
import re

archive = "/Users/crimson/Desktop/Tutwiler.pkl.xz"
tables = "/Users/crimson/Desktop/Tutwiler.xlsx"

def findName(text):
    name = ""
    if bool(re.search(r'(?a)(VS\.|V\.{1})(.+)(Case)*', text, re.MULTILINE)) == True:
        name = re.search(r'(?a)(VS\.|V\.{1})(.+)(Case)*', text, re.MULTILINE).group(2).replace("Case Number:","").
	strip()
    else:
        if bool(re.search(r'(?:DOB)(.+)(?:Name)', text, re.MULTILINE)) == True:
            name = re.search(r'(?:DOB)(.+)(?:Name)', text, re.MULTILINE).group(1).replace(":","").replace("Case Number:","").strip()
    return name

c = alac.config(archive, table_path=tables)

alac.parse.map(c, findName)
Method Description
get.PDFText(path) -> text Returns full text of case
get.CaseInfo(text) -> [case_number, name, alias, date_of_birth, race, sex, address, phone] Returns basic case details
get.FeeSheet(text, cnum = '') -> [total_amtdue, total_balance, total_d999, feecodes_w_bal, all_fee_codes, table_string, feesheet: pd.DataFrame] Returns fee sheet and summary as str and pd.DataFrame
get.Charges(text, cnum = '') -> [convictions_string, disposition_charges, filing_charges, cerv_eligible_convictions, pardon_to_vote_convictions, permanently_disqualifying_convictions, conviction_count, charge_count, cerv_charge_count, pardontovote_charge_count, permanent_dq_charge_count, cerv_convictions_count, pardontovote_convictions_count, charge_codes, conviction_codes, all_charges_string, charges: pd.DataFrame] Returns charges table and summary as str, int, and pd.DataFrame
get.CaseNumber(text) -> case_number Returns case number
get.Name(text) -> name Returns name
get.FeeTotals(text) -> [total_row, tdue, tpaid, tbal, tdue] Return totals without parsing fee sheet

Working with case data in Python

Out of the box, Alacorder exports to .xlsx, .xls, .csv, .json, and .dta. But you can use alac, pandas, and other python libraries to create your own data collection workflows and design custom exports.

The snippet below prints the fee sheets from a directory of case PDFs as it reads them.

import alacorder as alac

c = alac.config("/Users/crimson/Desktop/Tutwiler/","/Users/crimson/Desktop/Tutwiler.xls")

for path in c['contents']:
    text = alac.get.PDFText(path)
    cnum = alac.get.CaseNumber(text)
    charges_outputs = alac.get.Charges(text, cnum)
    if len(charges_outputs[0]) > 1:
        print(charges_outputs[0])

Extending Alacorder with pandas and other tools

Alacorder runs on pandas, a python library you can use to perform calculations, process text data, and make tables and charts. pandas can read from and write to all major data storage formats. It can connect to a wide variety of services to provide for easy export. When Alacorder table data is exported to .pkl.xz, it is stored as a pd.DataFrame and can be imported into other python modules and scripts with pd.read_pickle() like below:

import pandas as pd
contents = pd.read_pickle("/path/to/pkl")

If you would like to visualize data without exporting to Excel or another format, create a jupyter notebook and import a data visualization library like matplotlib to get started. The resources below can help you get started. jupyter is a Python kernel you can use to create interactive notebooks for data analysis and other purposes. It can be installed using pip install jupyter or pip3 install jupyter and launched using jupyter notebook. Your device may already be equipped to view .ipynb notebooks.

Resources


© 2023 Sam Robson

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

alacorder-74.2.3.tar.gz (24.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

alacorder-74.2.3-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file alacorder-74.2.3.tar.gz.

File metadata

  • Download URL: alacorder-74.2.3.tar.gz
  • Upload date:
  • Size: 24.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for alacorder-74.2.3.tar.gz
Algorithm Hash digest
SHA256 e577bff00bc87a877f3bbba5a18400e447b8d95b95a2d9f186554288534f142e
MD5 66019abf47c49a25be4f3b209d308b03
BLAKE2b-256 5995f3678a5ef03a032bf15fb9c81e32db5105ca6ec5a50f2de436937a20f56f

See more details on using hashes here.

File details

Details for the file alacorder-74.2.3-py3-none-any.whl.

File metadata

  • Download URL: alacorder-74.2.3-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for alacorder-74.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 74ec2960e3e751d2af503ec2e366de9e4682c10d0197540f2ee9020b571a6065
MD5 7898302b9e80e616054a8bf4cf90fa0c
BLAKE2b-256 1648c7c764a769ca1255044e6a5b59bd32b2770e05bbfba5c919547ad6422d85

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page