A parser for fuzzy dates
Project description
Python Parser for Abbreviated Dates
Key Features • How To Use • How it works • Common use cases • Operations • Roadmap
Have you ever tried to understand a date like 11-09, št? Is the št an abbreviation of a month or a weekday? Which of those numbers represent the month or the day? This library leverages on Good Ol' Fashioned AI to parse abbreviated, ambiguous, and incomplete dates in multiple languages.
Key Features
- Language auto-detection
- Easily expandable into new languages (30 languages are currently supported)
- Support for multiple date formats
- Support for abbreviated weekdays
- Support for abbreviated months
- Support for ambiguous month/day numbers
How To Use
The most straightforward way to parse dates is to use the datetime.date() function, that wraps around most of the functionality of the module. This example shows a basic usage of the library to parse the date: "11-09, št":
from datetime import datetime
from fuzzy_parser.engine import Engine
start = datetime(2021, 4, 27).date()
(semantic, _) = Engine(start).when('11-09, št')
for single_date in semantic:
print(single_date.strftime("%Y-%m-%d"))
The output will show the expected
2021-09-11
How it works
The abbreviation "št" could stand for:
- Šeštadienis which means in Saturday in Lithuanian
- Štvrtok which means in Thursday in Slovak
Lithuanian is spoken in Lithuania and in Latvia. Slovak is spoken in Slovakia but also by a minority in the Czech Republic. These countries use different date representations: Czech Republic, Latvia and Slovakia have the day written first because of the "little" date endianness format used as the standard in the country. Lithuania, on the other hand, uses the "big" date endianness format which means that the month is written first. The system factor in all these facts and is able to come with the right answers:
In the case of interpreting the abbreviation as a Saturday:
- 9 of November 2024
- 11 of September 2027
In the case of interpreting the abbreviation as a Thursday:
- 11 of September 2025
For further details have a look at the underlying implementation. In addition, the unit tests might give an impression on how to use this library.
Common use cases
Consuming data from different sources:
- Scraping: extract dates from different places with several formats and languages
- IoT: consuming data coming from different sources with different date formats
- Tooling: consuming dates from different logs / sources
- Format transformations: when transforming dates coming from different files (PDF, CSV, etc.) to other formats (database, etc).
Operations
We are leveraging GNU Make to automate frequent actions. Please use the following command will show the available recipes to use for operating the local development environment:
make help
Click to see the available recipes
Command | Description |
---|---|
help | Print this help |
synchronize | Switch to the main branch, fetch changes & delete merged branches |
test | Run the test suite |
run-time | Install the packages packs required for the development environment |
install | Install the latest library release |
uninstall | Uninstall the latest library release |
release | Release recipe to be use from Github Actions |
bump | Increase the version number |
build | Build and check distribution packages |
publish | Publish the diagrams |
workflow | Creates the Diagrams |
remove-all | Remove packages and packs |
clean | Remove debris |
The following command stores pypi.org token to "Upload packages" in the local key store to be used by the publish option:
secret-tool store --label='https://pypi.org/manage/account/token/' user ${USER} domain pypi.org
Compatibility
Tested with SWI-Prolog version 8.2.4 on Ubuntu 20.04
License
Distributed under the MIT License. See LICENSE
file for more information.
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
Hashes for fuzzy_parser-0.2.56-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4df5e0d4f24ce02ace0bd7ccc0974b42e7ddca0787e76cb7a34904f39ef2c788 |
|
MD5 | 96ff009dab684929154e016a405d6d6e |
|
BLAKE2b-256 | 2365814a95e35fdd6ecb722c7fa4cf4152cf4896cb5efc5a185d82584f26e4bf |