summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-04-11 20:34:21 +0000
committerCoprDistGit <infra@openeuler.org>2023-04-11 20:34:21 +0000
commitc1c6a82b02736d4954577749d5746e0fcccedf18 (patch)
treeafa61fa37728c6dd8a570a249a563414639b5487
parent664500730d44c3c4896be2336f912ae80897f676 (diff)
automatic import of python-sqlite-fts4
-rw-r--r--.gitignore1
-rw-r--r--python-sqlite-fts4.spec523
-rw-r--r--sources1
3 files changed, 525 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..9ebd283 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/sqlite-fts4-1.0.3.tar.gz
diff --git a/python-sqlite-fts4.spec b/python-sqlite-fts4.spec
new file mode 100644
index 0000000..246bad1
--- /dev/null
+++ b/python-sqlite-fts4.spec
@@ -0,0 +1,523 @@
+%global _empty_manifest_terminate_build 0
+Name: python-sqlite-fts4
+Version: 1.0.3
+Release: 1
+Summary: Python functions for working with SQLite FTS4 search
+License: Apache License, Version 2.0
+URL: https://github.com/simonw/sqlite-fts4
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c2/6d/9dad6c3b433ab8912ace969c66abd595f8e0a2ccccdb73602b1291dbda29/sqlite-fts4-1.0.3.tar.gz
+BuildArch: noarch
+
+Requires: python3-pytest
+
+%description
+# sqlite-fts4
+
+[![PyPI](https://img.shields.io/pypi/v/sqlite-fts4.svg)](https://pypi.org/project/sqlite-fts4/)
+[![Changelog](https://img.shields.io/github/v/release/simonw/sqlite-fts4?include_prereleases&label=changelog)](https://github.com/simonw/sqlite-fts4/releases)
+[![Tests](https://github.com/simonw/sqlite-fts4/workflows/Test/badge.svg)](https://github.com/simonw/sqlite-fts4/actions?query=workflow%3ATest)
+[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/simonw/sqlite-fts4/blob/main/LICENSE)
+
+Custom SQLite functions written in Python for ranking documents indexed using the FTS4 extension.
+
+Read [Exploring search relevance algorithms with SQLite](https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/) for further details on this project.
+
+## Demo
+
+You can try out these SQL functions [using this interactive demo](https://datasette-sqlite-fts4.datasette.io/24ways-fts4?sql=select%0D%0A++++json_object%28%0D%0A++++++++"label"%2C+articles.title%2C+"href"%2C+articles.url%0D%0A++++%29+as+article%2C%0D%0A++++articles.author%2C%0D%0A++++rank_score%28matchinfo%28articles_fts%2C+"pcx"%29%29+as+score%2C%0D%0A++++rank_bm25%28matchinfo%28articles_fts%2C+"pcnalx"%29%29+as+bm25%2C%0D%0A++++json_object%28%0D%0A++++++++"pre"%2C+annotate_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%2C+"pcxnalyb"%29%0D%0A++++%29+as+annotated_matchinfo%2C%0D%0A++++matchinfo%28articles_fts%2C+"pcxnalyb"%29+as+matchinfo%2C%0D%0A++++decode_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%29+as+decoded_matchinfo%0D%0Afrom%0D%0A++++articles_fts+join+articles+on+articles.rowid+%3D+articles_fts.rowid%0D%0Awhere%0D%0A++++articles_fts+match+%3Asearch%0D%0Aorder+by+bm25&search=jquery+maps).
+
+## Installation
+
+ pip install sqlite-fts4
+
+## Usage
+
+This module implements several custom SQLite3 functions. You can register them against an existing SQLite connection like so:
+
+```python
+import sqlite3
+from sqlite_fts4 import register_functions
+
+conn = sqlite3.connect(":memory:")
+register_functions(conn)
+```
+
+If you only want a subset of the functions registered you can do so like this:
+
+```python
+from sqlite_fts4 import rank_score
+
+conn = sqlite3.connect(":memory:")
+conn.create_function("rank_score", 1, rank_score)
+```
+
+if you want to use these functions with [Datasette](https://github.com/simonw/datasette) you can enable them by installing the [datasette-sqlite-fts4](https://github.com/simonw/datasette-sqlite-fts4) plugin:
+
+ pip install datasette-sqlite-fts4
+
+## rank_score()
+
+This is an extremely simple ranking function, based on [an example](https://www.sqlite.org/fts3.html#appendix_a) in the SQLite documentation. It generates a score for each document using the sum of the score for each column. The score for each column is calculated as the number of search matches in that column divided by the number of search matches for every column in the index - a classic [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) calculation.
+
+You can use it in a query like this:
+
+```sql
+select *, rank_score(matchinfo(docs, "pcx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcx"` matchinfo format string here, or you will get incorrect results.
+
+## rank_bm25()
+
+An implementation of the [Okapi BM25](https://en.wikipedia.org/wiki/Okapi_BM25) scoring algorithm. Use it in a query like this:
+
+```sql
+select *, rank_bm25(matchinfo(docs, "pcnalx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcnalx"` matchinfo format string here, or you will get incorrect results. If you see any `math domain` errors in your logs it may be because you did not use exactly the right format string here.
+
+## decode_matchinfo()
+
+SQLite's [built-in matchinfo() function](https://www.sqlite.org/fts3.html#matchinfo) returns results as a binary string. This binary represents a list of 32 bit unsigned integers, but reading the binary results is not particularly human-friendly.
+
+The `decode_matchinfo()` function decodes the binary string and converts it into a JSON list of integers.
+
+Usage:
+
+```sql
+select *, decode_matchinfo(matchinfo(docs, "pcx"))
+from docs where docs match "dog"
+```
+
+Example output:
+
+ hello dog, [1, 1, 1, 1, 1]
+
+## annotate_matchinfo()
+
+This function decodes the matchinfo document into a verbose JSON structure that describes exactly what each of the returned integers actually means.
+
+Full documentation for the different format string options can be found here: https://www.sqlite.org/fts3.html#matchinfo
+
+You need to call this function with the same format string as was passed to `matchinfo()` - for example:
+
+```sql
+select annotate_matchinfo(matchinfo(docs, "pcxnal"), "pcxnal")
+from docs where docs match "dog"
+```
+
+The returned JSON will include a key for each letter in the format string. For example:
+
+```json
+{
+ "p": {
+ "value": 1,
+ "title": "Number of matchable phrases in the query"
+ },
+ "c": {
+ "value": 1,
+ "title": "Number of user defined columns in the FTS table"
+ },
+ "x": {
+ "value": [
+ {
+ "column_index": 0,
+ "phrase_index": 0,
+ "hits_this_column_this_row": 1,
+ "hits_this_column_all_rows": 2,
+ "docs_with_hits": 2
+ }
+ ],
+ "title": "Details for each phrase/column combination"
+ },
+ "n": {
+ "value": 3,
+ "title": "Number of rows in the FTS4 table"
+ },
+ "a": {
+ "title":"Average number of tokens in the text values stored in each column",
+ "value": [
+ {
+ "column_index": 0,
+ "average_num_tokens": 2
+ }
+ ]
+ },
+ "l": {
+ "title": "Length of value stored in current row of the FTS4 table in tokens for each column",
+ "value": [
+ {
+ "column_index": 0,
+ "length_of_value": 2
+ }
+ ]
+ }
+}
+```
+
+
+
+
+%package -n python3-sqlite-fts4
+Summary: Python functions for working with SQLite FTS4 search
+Provides: python-sqlite-fts4
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-sqlite-fts4
+# sqlite-fts4
+
+[![PyPI](https://img.shields.io/pypi/v/sqlite-fts4.svg)](https://pypi.org/project/sqlite-fts4/)
+[![Changelog](https://img.shields.io/github/v/release/simonw/sqlite-fts4?include_prereleases&label=changelog)](https://github.com/simonw/sqlite-fts4/releases)
+[![Tests](https://github.com/simonw/sqlite-fts4/workflows/Test/badge.svg)](https://github.com/simonw/sqlite-fts4/actions?query=workflow%3ATest)
+[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/simonw/sqlite-fts4/blob/main/LICENSE)
+
+Custom SQLite functions written in Python for ranking documents indexed using the FTS4 extension.
+
+Read [Exploring search relevance algorithms with SQLite](https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/) for further details on this project.
+
+## Demo
+
+You can try out these SQL functions [using this interactive demo](https://datasette-sqlite-fts4.datasette.io/24ways-fts4?sql=select%0D%0A++++json_object%28%0D%0A++++++++"label"%2C+articles.title%2C+"href"%2C+articles.url%0D%0A++++%29+as+article%2C%0D%0A++++articles.author%2C%0D%0A++++rank_score%28matchinfo%28articles_fts%2C+"pcx"%29%29+as+score%2C%0D%0A++++rank_bm25%28matchinfo%28articles_fts%2C+"pcnalx"%29%29+as+bm25%2C%0D%0A++++json_object%28%0D%0A++++++++"pre"%2C+annotate_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%2C+"pcxnalyb"%29%0D%0A++++%29+as+annotated_matchinfo%2C%0D%0A++++matchinfo%28articles_fts%2C+"pcxnalyb"%29+as+matchinfo%2C%0D%0A++++decode_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%29+as+decoded_matchinfo%0D%0Afrom%0D%0A++++articles_fts+join+articles+on+articles.rowid+%3D+articles_fts.rowid%0D%0Awhere%0D%0A++++articles_fts+match+%3Asearch%0D%0Aorder+by+bm25&search=jquery+maps).
+
+## Installation
+
+ pip install sqlite-fts4
+
+## Usage
+
+This module implements several custom SQLite3 functions. You can register them against an existing SQLite connection like so:
+
+```python
+import sqlite3
+from sqlite_fts4 import register_functions
+
+conn = sqlite3.connect(":memory:")
+register_functions(conn)
+```
+
+If you only want a subset of the functions registered you can do so like this:
+
+```python
+from sqlite_fts4 import rank_score
+
+conn = sqlite3.connect(":memory:")
+conn.create_function("rank_score", 1, rank_score)
+```
+
+if you want to use these functions with [Datasette](https://github.com/simonw/datasette) you can enable them by installing the [datasette-sqlite-fts4](https://github.com/simonw/datasette-sqlite-fts4) plugin:
+
+ pip install datasette-sqlite-fts4
+
+## rank_score()
+
+This is an extremely simple ranking function, based on [an example](https://www.sqlite.org/fts3.html#appendix_a) in the SQLite documentation. It generates a score for each document using the sum of the score for each column. The score for each column is calculated as the number of search matches in that column divided by the number of search matches for every column in the index - a classic [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) calculation.
+
+You can use it in a query like this:
+
+```sql
+select *, rank_score(matchinfo(docs, "pcx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcx"` matchinfo format string here, or you will get incorrect results.
+
+## rank_bm25()
+
+An implementation of the [Okapi BM25](https://en.wikipedia.org/wiki/Okapi_BM25) scoring algorithm. Use it in a query like this:
+
+```sql
+select *, rank_bm25(matchinfo(docs, "pcnalx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcnalx"` matchinfo format string here, or you will get incorrect results. If you see any `math domain` errors in your logs it may be because you did not use exactly the right format string here.
+
+## decode_matchinfo()
+
+SQLite's [built-in matchinfo() function](https://www.sqlite.org/fts3.html#matchinfo) returns results as a binary string. This binary represents a list of 32 bit unsigned integers, but reading the binary results is not particularly human-friendly.
+
+The `decode_matchinfo()` function decodes the binary string and converts it into a JSON list of integers.
+
+Usage:
+
+```sql
+select *, decode_matchinfo(matchinfo(docs, "pcx"))
+from docs where docs match "dog"
+```
+
+Example output:
+
+ hello dog, [1, 1, 1, 1, 1]
+
+## annotate_matchinfo()
+
+This function decodes the matchinfo document into a verbose JSON structure that describes exactly what each of the returned integers actually means.
+
+Full documentation for the different format string options can be found here: https://www.sqlite.org/fts3.html#matchinfo
+
+You need to call this function with the same format string as was passed to `matchinfo()` - for example:
+
+```sql
+select annotate_matchinfo(matchinfo(docs, "pcxnal"), "pcxnal")
+from docs where docs match "dog"
+```
+
+The returned JSON will include a key for each letter in the format string. For example:
+
+```json
+{
+ "p": {
+ "value": 1,
+ "title": "Number of matchable phrases in the query"
+ },
+ "c": {
+ "value": 1,
+ "title": "Number of user defined columns in the FTS table"
+ },
+ "x": {
+ "value": [
+ {
+ "column_index": 0,
+ "phrase_index": 0,
+ "hits_this_column_this_row": 1,
+ "hits_this_column_all_rows": 2,
+ "docs_with_hits": 2
+ }
+ ],
+ "title": "Details for each phrase/column combination"
+ },
+ "n": {
+ "value": 3,
+ "title": "Number of rows in the FTS4 table"
+ },
+ "a": {
+ "title":"Average number of tokens in the text values stored in each column",
+ "value": [
+ {
+ "column_index": 0,
+ "average_num_tokens": 2
+ }
+ ]
+ },
+ "l": {
+ "title": "Length of value stored in current row of the FTS4 table in tokens for each column",
+ "value": [
+ {
+ "column_index": 0,
+ "length_of_value": 2
+ }
+ ]
+ }
+}
+```
+
+
+
+
+%package help
+Summary: Development documents and examples for sqlite-fts4
+Provides: python3-sqlite-fts4-doc
+%description help
+# sqlite-fts4
+
+[![PyPI](https://img.shields.io/pypi/v/sqlite-fts4.svg)](https://pypi.org/project/sqlite-fts4/)
+[![Changelog](https://img.shields.io/github/v/release/simonw/sqlite-fts4?include_prereleases&label=changelog)](https://github.com/simonw/sqlite-fts4/releases)
+[![Tests](https://github.com/simonw/sqlite-fts4/workflows/Test/badge.svg)](https://github.com/simonw/sqlite-fts4/actions?query=workflow%3ATest)
+[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/simonw/sqlite-fts4/blob/main/LICENSE)
+
+Custom SQLite functions written in Python for ranking documents indexed using the FTS4 extension.
+
+Read [Exploring search relevance algorithms with SQLite](https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/) for further details on this project.
+
+## Demo
+
+You can try out these SQL functions [using this interactive demo](https://datasette-sqlite-fts4.datasette.io/24ways-fts4?sql=select%0D%0A++++json_object%28%0D%0A++++++++"label"%2C+articles.title%2C+"href"%2C+articles.url%0D%0A++++%29+as+article%2C%0D%0A++++articles.author%2C%0D%0A++++rank_score%28matchinfo%28articles_fts%2C+"pcx"%29%29+as+score%2C%0D%0A++++rank_bm25%28matchinfo%28articles_fts%2C+"pcnalx"%29%29+as+bm25%2C%0D%0A++++json_object%28%0D%0A++++++++"pre"%2C+annotate_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%2C+"pcxnalyb"%29%0D%0A++++%29+as+annotated_matchinfo%2C%0D%0A++++matchinfo%28articles_fts%2C+"pcxnalyb"%29+as+matchinfo%2C%0D%0A++++decode_matchinfo%28matchinfo%28articles_fts%2C+"pcxnalyb"%29%29+as+decoded_matchinfo%0D%0Afrom%0D%0A++++articles_fts+join+articles+on+articles.rowid+%3D+articles_fts.rowid%0D%0Awhere%0D%0A++++articles_fts+match+%3Asearch%0D%0Aorder+by+bm25&search=jquery+maps).
+
+## Installation
+
+ pip install sqlite-fts4
+
+## Usage
+
+This module implements several custom SQLite3 functions. You can register them against an existing SQLite connection like so:
+
+```python
+import sqlite3
+from sqlite_fts4 import register_functions
+
+conn = sqlite3.connect(":memory:")
+register_functions(conn)
+```
+
+If you only want a subset of the functions registered you can do so like this:
+
+```python
+from sqlite_fts4 import rank_score
+
+conn = sqlite3.connect(":memory:")
+conn.create_function("rank_score", 1, rank_score)
+```
+
+if you want to use these functions with [Datasette](https://github.com/simonw/datasette) you can enable them by installing the [datasette-sqlite-fts4](https://github.com/simonw/datasette-sqlite-fts4) plugin:
+
+ pip install datasette-sqlite-fts4
+
+## rank_score()
+
+This is an extremely simple ranking function, based on [an example](https://www.sqlite.org/fts3.html#appendix_a) in the SQLite documentation. It generates a score for each document using the sum of the score for each column. The score for each column is calculated as the number of search matches in that column divided by the number of search matches for every column in the index - a classic [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) calculation.
+
+You can use it in a query like this:
+
+```sql
+select *, rank_score(matchinfo(docs, "pcx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcx"` matchinfo format string here, or you will get incorrect results.
+
+## rank_bm25()
+
+An implementation of the [Okapi BM25](https://en.wikipedia.org/wiki/Okapi_BM25) scoring algorithm. Use it in a query like this:
+
+```sql
+select *, rank_bm25(matchinfo(docs, "pcnalx")) as score
+from docs where docs match "dog"
+order by score desc
+```
+
+You *must* use the `"pcnalx"` matchinfo format string here, or you will get incorrect results. If you see any `math domain` errors in your logs it may be because you did not use exactly the right format string here.
+
+## decode_matchinfo()
+
+SQLite's [built-in matchinfo() function](https://www.sqlite.org/fts3.html#matchinfo) returns results as a binary string. This binary represents a list of 32 bit unsigned integers, but reading the binary results is not particularly human-friendly.
+
+The `decode_matchinfo()` function decodes the binary string and converts it into a JSON list of integers.
+
+Usage:
+
+```sql
+select *, decode_matchinfo(matchinfo(docs, "pcx"))
+from docs where docs match "dog"
+```
+
+Example output:
+
+ hello dog, [1, 1, 1, 1, 1]
+
+## annotate_matchinfo()
+
+This function decodes the matchinfo document into a verbose JSON structure that describes exactly what each of the returned integers actually means.
+
+Full documentation for the different format string options can be found here: https://www.sqlite.org/fts3.html#matchinfo
+
+You need to call this function with the same format string as was passed to `matchinfo()` - for example:
+
+```sql
+select annotate_matchinfo(matchinfo(docs, "pcxnal"), "pcxnal")
+from docs where docs match "dog"
+```
+
+The returned JSON will include a key for each letter in the format string. For example:
+
+```json
+{
+ "p": {
+ "value": 1,
+ "title": "Number of matchable phrases in the query"
+ },
+ "c": {
+ "value": 1,
+ "title": "Number of user defined columns in the FTS table"
+ },
+ "x": {
+ "value": [
+ {
+ "column_index": 0,
+ "phrase_index": 0,
+ "hits_this_column_this_row": 1,
+ "hits_this_column_all_rows": 2,
+ "docs_with_hits": 2
+ }
+ ],
+ "title": "Details for each phrase/column combination"
+ },
+ "n": {
+ "value": 3,
+ "title": "Number of rows in the FTS4 table"
+ },
+ "a": {
+ "title":"Average number of tokens in the text values stored in each column",
+ "value": [
+ {
+ "column_index": 0,
+ "average_num_tokens": 2
+ }
+ ]
+ },
+ "l": {
+ "title": "Length of value stored in current row of the FTS4 table in tokens for each column",
+ "value": [
+ {
+ "column_index": 0,
+ "length_of_value": 2
+ }
+ ]
+ }
+}
+```
+
+
+
+
+%prep
+%autosetup -n sqlite-fts4-1.0.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-sqlite-fts4 -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.0.3-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..8659dcd
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+03b27f20173c3a2ccd15ccbec8e56566 sqlite-fts4-1.0.3.tar.gz