sqlitefts-python
sqlitefts-python provides binding for tokenizer of SQLite Full-Text search(FTS3/4) and FTS5. it allows you to write tokenizers in Python.
SQLite has Full-Text search feature FTS3/FTS4 and FTS5 along with some predefined tokenizers for FTS3/4, and also predefined tokenizers for FTS5. It is easy to use and has enough functionality. Python has a built-in SQLite module, so that it is easy to use and deploy. You don’t need anything else to full-text search.
But… the predefined tokenizers are not enough for some languages including Japanese. Also it is not easy to write own tokenizers. This module provides ability to write tokenizers using Python with CFFI, so that you don’t need C compiler to write your tokenizer.
It also has ranking functions based on peewee, utility function to add FTS5 auxiliary functions, and an FTS5 aux function implementation.
NOTE: all connections using this modules should be explicitly closed. due to GC behavior, it can be crashed if a connection is left open when a program terminated.
Sample tokenizer
There are differences between FTS3/4 and FTS5, so 2 different base classes are defined.
a tokenizer for FTS3/4 can be used with FTS5 by using FTS3TokenizerAdaptor.
a tokenizer for FTS5 can be used with FTS3/4 if ‘flags’ is not used.
FTS3/4:
import sqlitefts as fts
class SimpleTokenizer(fts.Tokenizer):
_p = re.compile(r'\w+', re.UNICODE)
def tokenize(self, text):
for m in self._p.finditer(text):
s, e = m.span()
t = text[s:e]
l = len(t.encode('utf-8'))
p = len(text[:s].encode('utf-8'))
yield t, p, p + l
tk = sqlitefts.make_tokenizer_module(SimpleTokenizer())
fts.register_tokenizer(conn, 'simple_tokenizer', tk)
FTS5:
from sqlitefts import fts5
class SimpleTokenizer(fts5.FTS5Tokenizer):
_p = re.compile(r'\w+', re.UNICODE)
def tokenize(self, text, flags=None):
for m in self._p.finditer(text):
s, e = m.span()
t = text[s:e]
l = len(t.encode('utf-8'))
p = len(text[:s].encode('utf-8'))
yield t, p, p + l
tk = fts5.make_fts5_tokenizer(SimpleTokenizer())
fts5.register_tokenizer(conn, 'simple_tokenizer', tk)
Requirements
Python 2.7, Python 3.9+, and PyPy2.7, PyPy3.10+ (older versions may work, but not tested)
sqlite3 has to be dynamically linked. see GH-37
FTS3/4 and/or FTS5 enabled SQLite3 or APSW (OS/Python bundled SQLite3 shared library may not work, building sqlite3 from source or pre-compiled binary may be required)
SQLite 3.11.x have to be compiled with -DSQLITE_ENABLE_FTS3_TOKENIZER to enable 2-arg fts3_tokenizer
SQLite older/newer than 3.11.x do not have extra requirements
- Note for APSW users:
FTS3 should work as same as builtin sqlite3 - sqlite3(_sqlite3) is used to access SQLite internals
sqlitefts.fts5 does not support APSW Amalgamation build. see GH-14
Licence
This software is released under the MIT License, see LICENSE.
Thanks
Metadata
Release files for sqlitefts 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sqlitefts-1.0.1.tar.gz | 16.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sqlitefts-1.0.1-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 30.6 kB
Release files / sqlitefts-1.0.1.tar.gz
| Download URL | sqlitefts-1.0.1.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
056a513ba11bec060ab38a7b30186a2940653bfca83bdd291b212639815c7f3c
|
|
BLAKE2b-256 checksum How to use checksums |
cb3116dddfbbbb79017202a025d3e0c18dbbdeef9c91b3ea350ddcb56afff408
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.3
|
Release files / sqlitefts-1.0.1-py2.py3-none-any.whl
| Download URL | sqlitefts-1.0.1-py2.py3-none-any.whl |
|---|---|
| Size | 14.1 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
4c31add996627753e6da604c18f5720189ac5404c3fbcdb22ffbdc7838f35a14
|
|
BLAKE2b-256 checksum How to use checksums |
0faa3033d5464b309373ce63645f423c940c6dc026cfc38ae18e81836714d196
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.3
|
Security for sqlitefts 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.