mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
0.1.5 Soundex
This commit is contained in:
parent
1e6689d826
commit
b4c59098b0
@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
|
||||
## [0.1.5] - 2023-11-21
|
||||
- update readme.md
|
||||
|
||||
|
||||
## [0.1.4] - 2023-02-02
|
||||
- update readme.md
|
||||
- update GitHub actions
|
||||
@ -13,7 +17,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
- allow **SOUNDEX_MAX_LENGTH** be defined from command line.
|
||||
- move code to .cpp
|
||||
|
||||
|
||||
## [0.1.3] - 2022-11-24
|
||||
- Add RP2040 support to build-CI.
|
||||
- Add CHANGELOG.md
|
||||
|
@ -2,8 +2,11 @@
|
||||
[![Arduino CI](https://github.com/RobTillaart/Soundex/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
|
||||
[![Arduino-lint](https://github.com/RobTillaart/Soundex/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/Soundex/actions/workflows/arduino-lint.yml)
|
||||
[![JSON check](https://github.com/RobTillaart/Soundex/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/Soundex/actions/workflows/jsoncheck.yml)
|
||||
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/Soundex.svg)](https://github.com/RobTillaart/Soundex/issues)
|
||||
|
||||
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/Soundex/blob/master/LICENSE)
|
||||
[![GitHub release](https://img.shields.io/github/release/RobTillaart/Soundex.svg?maxAge=3600)](https://github.com/RobTillaart/Soundex/releases)
|
||||
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/Soundex.svg)](https://registry.platformio.org/libraries/robtillaart/Soundex)
|
||||
|
||||
|
||||
# Soundex
|
||||
@ -24,14 +27,16 @@ followed by 3 digits replacing the consonants.
|
||||
|
||||
The base Soundex has 26 x 7 x 7 x 7 = 8918 possible outcomes,
|
||||
this could be easily encoded in an uint16_t.
|
||||
This insight triggered the experimental functions.
|
||||
This insight triggered the experimental functions **soundex16()** and **soundex32()**.
|
||||
These experimental functions can be used e.g. to optimize word-searching
|
||||
as less bytes need to be compared / stored.
|
||||
|
||||
|
||||
#### 0.1.2 Experimental
|
||||
|
||||
The library has two experimental functions, **soundex16()** and **soundex32()**.
|
||||
These functions pack a Soundex length 5 hash in a uint16_t and a length 10 in a uint32_t.
|
||||
These compress soundex() results.
|
||||
They effectively compress the **soundex()** results.
|
||||
|
||||
Advantages (16 bit version):
|
||||
- better hash as it adds 1 extra character
|
||||
@ -56,11 +61,14 @@ The hash codes of these new SoundexNN() are a continuous numeric range.
|
||||
Note that soundex16() and soundex32() compresses info much better than
|
||||
the standard soundex().
|
||||
|
||||
A soundex64() is possible and uses 8 bytes.
|
||||
It would allow to compress very long soundex() results (up to 22 chars) in 8 bytes.
|
||||
|
||||
A **soundex64()** is technically possible and would use 8 bytes (not implemented).
|
||||
It would allow to compress very long **soundex()** results (up to 22 chars) in 8 bytes.
|
||||
Application might be chemical formulas.
|
||||
It could use the **printHelper** library to print the uint64_t as HEX.
|
||||
|
||||
|
||||
#### Links
|
||||
#### Related
|
||||
|
||||
- https://en.wikipedia.org/wiki/Soundex
|
||||
- https://en.wikipedia.org/wiki/Metaphone (not implemented)
|
||||
@ -94,7 +102,7 @@ Note: preferably printed in HEX.
|
||||
|
||||
Not tested on other platforms.
|
||||
|
||||
First numbers of **.soundex("Trichloroethylene")** measured with
|
||||
First numbers of **soundex("Trichloroethylene")** measured with
|
||||
a test sketch shows the following timing per word.
|
||||
|
||||
| Checksum | digits | UNO 16 MHz | ESP32 240 MHz | notes |
|
||||
@ -109,14 +117,13 @@ a test sketch shows the following timing per word.
|
||||
See examples.
|
||||
|
||||
|
||||
## Future ideas
|
||||
## Future
|
||||
|
||||
#### Must
|
||||
|
||||
- improve documentation
|
||||
- add examples
|
||||
|
||||
|
||||
#### Should
|
||||
|
||||
- more testing
|
||||
@ -125,11 +132,11 @@ See examples.
|
||||
- string lengths
|
||||
- performance
|
||||
|
||||
|
||||
#### Could
|
||||
|
||||
- use spare bits of soundex16/32 as parity / checksum.
|
||||
|
||||
- add String interface e.g.
|
||||
- **String soundex(String str)**
|
||||
|
||||
#### Wont
|
||||
|
||||
@ -143,3 +150,12 @@ See examples.
|
||||
- Beider-Morse Soundex
|
||||
- Metaphone
|
||||
|
||||
|
||||
## Support
|
||||
|
||||
If you appreciate my libraries, you can support the development and maintenance.
|
||||
Improve the quality of the libraries by providing issues and Pull Requests, or
|
||||
donate through PayPal or GitHub sponsors.
|
||||
|
||||
Thank you,
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: Soundex.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.4
|
||||
// VERSION: 0.1.5
|
||||
// DATE: 2022-02-05
|
||||
// PURPOSE: Arduino Library for calculating Soundex hash
|
||||
// URL: https://github.com/RobTillaart/Soundex
|
||||
@ -53,13 +53,15 @@ char * Soundex::soundex(const char * str)
|
||||
// handle first character
|
||||
i = 0;
|
||||
_buffer[i++] = toupper(*p);
|
||||
uint8_t last = sdx[_buffer[0] - 'A']; // remember last code
|
||||
// remember last code
|
||||
uint8_t last = sdx[_buffer[0] - 'A'];
|
||||
p++;
|
||||
|
||||
// process the remainder of the string
|
||||
while ((*p != 0) && (i < _length))
|
||||
{
|
||||
if (isalpha(*p)) // skip non ASCII
|
||||
// skip non ASCII
|
||||
if (isalpha(*p))
|
||||
{
|
||||
uint8_t current = sdx[toupper(*p) - 'A'];
|
||||
// new code?
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// FILE: Soundex.h
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.4
|
||||
// VERSION: 0.1.5
|
||||
// DATE: 2022-02-05
|
||||
// PURPOSE: Arduino Library for calculating Soundex hash
|
||||
// URL: https://github.com/RobTillaart/Soundex
|
||||
@ -11,7 +11,7 @@
|
||||
#include "Arduino.h"
|
||||
|
||||
|
||||
#define SOUNDEX_LIB_VERSION (F("0.1.4"))
|
||||
#define SOUNDEX_LIB_VERSION (F("0.1.5"))
|
||||
|
||||
|
||||
#define SOUNDEX_MIN_LENGTH 4
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Soundex",
|
||||
"keywords": "Soundex,hash,Soundex16,Soundex32",
|
||||
"description": "Arduino Library for soundex.",
|
||||
"description": "Arduino Library for soundex.\nExperimental Soundex16, Soundex32.",
|
||||
"authors":
|
||||
[
|
||||
{
|
||||
@ -15,9 +15,9 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/RobTillaart/Soundex.git"
|
||||
},
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"license": "MIT",
|
||||
"frameworks": "arduino",
|
||||
"frameworks": "*",
|
||||
"platforms": "*",
|
||||
"headers": "Soundex.h"
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
name=Soundex
|
||||
version=0.1.4
|
||||
version=0.1.5
|
||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
sentence="Arduino Library for calculating Soundex hash.
|
||||
paragraph=Experimental Soundex16, Soundex32
|
||||
paragraph=Experimental Soundex16, Soundex32.
|
||||
category=Signal Input/Output
|
||||
url=https://github.com/RobTillaart/Soundex
|
||||
architectures=*
|
||||
|
Loading…
Reference in New Issue
Block a user