Skip to main content

SearchString is a custom implementation for searching strings for overvaagning.app.

Project description

Search String

GitHub Workflow Status (branch) PyPI - Version PyPI - Python Version

Installation

You can install search-string from PyPI:

$ pip install search-string-overvaagning

The package is supported on Python 3.10+.

About

This package implements the search string object that is used across overvaagning.app for different types of surveillance.

It is used for searching a text. For something to be deemed a match, the text must match the first_str and if the second_str is not empty, the text must also match the second_str. If the not_str is not empty, the text must not match the not_str. A logical AND is used between the three conditions. The three strings can each be a collection of strings separated by semicolons wherein a match is deemed by logical OR. You can use '~' to make a word boundary. Finally, you can use !global at the end of a string to signal that that part should check globally.

Quick examples:

>>> ss = SearchString('example;hello', 'text', 'elephant', data=None)
>>> ss.match('This is an example text')
True
>>> ss.match('This text says hello')
True
>>> ss.match('This is just an example')
False

Usage

Creating Search Strings

Start by importing the SearchString class:

>>> from search_string import SearchString

Construct a new search string by supplying the first_str, second_str, not_str and any data that can be useful to refer back to later, such as an ID:

>>> ss = SearchString('first', '', '', data=2)

Optionally, you can also supply a third_str that works in the same was as first_str and not_str but has to be supplied as a keyword argument:

>>> ss = SearchString('first', '', '', data=2, third_str='third')

Matching text

If you just need to find out whether a given search string matches a text, you can use the method .match on a SearchString instance.

Often, what you want to do, is to match a collection of search strings across a list of text, e.g. sentences. You can do that the following way:

>>> from search_string import SearchString
>>> search_strings = [
...    SearchString('kan', '', 'ritzau', data=1),
...    SearchString('kan', '', 'ritzau!global', data=2)
... ]
>>> sentences = [
...    'Du kan skrive din tekst her.',
...    'Den kan bestå af flere sætninger.',
...    'Dig og Ritzau kan bestemme hvordan det skal være.',
...    'Nogle kan være lange, andre kan være korte.'
... ]
>>> res = SearchString.find_all(sentences, search_strings)
>>> res
[SearchString(kan, -, ritzau, data=1)]

For each of the matched search strings (in the above example, only one), you can extract the data and the matched text as follows:

>>> res[0].data
1
>>> res[0].matched_text
'Du kan skrive din tekst her. Den kan bestå af flere sætninger. (...) Nogle kan være lange, andre kan være korte.'
>>> res[0].matched_text_highligthed
'Du <b>kan</b> skrive din tekst her. Den <b>kan</b> bestå af flere sætninger. (...) Nogle <b>kan</b> være lange, andre <b>kan</b> være korte.'

Matching when you have many search strings

If you have a problem where you repeatedly will be matching new texts against the same collection of search strings, it is highly advised to use the SearchStringCollection which behind the scenes uses a trie for efficient search when many search strings are present. There is some initial cost in building the trie. Thus, it is recommended that you initialize the collection once and then continue to use it.

The most important method on SearchStringCollection is find_all, which takes a sentence (str) or list of sentences (list[str]) and returns the matched search strings, very similar to the familiar SearchString.find_all.

>>> from search_string import SearchString, SearchStringCollection
>>> search_strings = [
...    SearchString('kan', '', 'ritzau', data=1),
...    SearchString('kan', '', 'ritzau!global', data=2)
... ]
>>> ss_collection = SearchStringCollection(search_strings)
>>> res = ss_collection.find_all()
>>> res
[SearchString(kan, -, ritzau, data=1)]

Importantly, SearchStringCollection relies on the data variable being set on the collection of search strings. If it is set to None or multiple search strings have the same value, the behavior is undefined.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

search_string_overvaagning-0.3.7-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

search_string_overvaagning-0.3.7-cp311-cp311-musllinux_1_1_x86_64.whl (214.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

search_string_overvaagning-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (222.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

search_string_overvaagning-0.3.7-cp311-cp311-macosx_10_9_x86_64.whl (129.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

search_string_overvaagning-0.3.7-cp310-cp310-musllinux_1_1_x86_64.whl (215.6 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

search_string_overvaagning-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (222.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

search_string_overvaagning-0.3.7-cp310-cp310-macosx_10_9_x86_64.whl (130.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file search_string_overvaagning-0.3.7-py3-none-any.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 66c72cbda254af445c4052ec29d60d35f06f312d425e37574993bbf4605e7d78
MD5 0d8de00b186efc0a45d86e2f4dfefebf
BLAKE2b-256 a371757c962798681d0743cac098e12161df242d30a5047f75b12a3b78e10d94

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 dcf73bcb7e133995dff7291b75db42864bbc2ea84f6c0fdeef34b765fa7dcdeb
MD5 0a4441eb756ccc5dcda3294dff8beeef
BLAKE2b-256 fdfb06b6a3aeb40b4ee94d8cb9262a1c9db068fae9ccf0538f47d670907b3655

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 416c66c0a44939578a0595b4c9d8ff00a90ca9c8c10031d10fc5f3a07c9e37f1
MD5 620ec347df70c01bda1b9fdbd7e16680
BLAKE2b-256 ca46201221b1616ee1abea92c9dcad4d6fabb324c4fbae1cbf6b77cc5bb8c056

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 785d9721c804455217950e012bfe09df9857c8c79e07374ecc3c10e65a41add8
MD5 90c436a08c6f8dd9c2dbe798c80e7f30
BLAKE2b-256 aeb28a326f6fa74b7b973498315f7d6541a14d2ac6cd41566ed3e33c17f3ae7c

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2d4dffe85458923a3607e3a41ca493411cd8c430a60010c0a212a182a1741e73
MD5 b4eaecc0dc9fb8c4cd0ccfc811738f54
BLAKE2b-256 0447780e3250a569f7860bf16aad0f7794bf075bc3ba3bb49d017713f55316ed

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21aa995bb8a618e60fdc9fac69d220d511abfa5ca19398d7efeb17f2409b0340
MD5 c884472956fd1b8b777bf9acc75989a5
BLAKE2b-256 a1f3dc65d4272919f5bea07297aa86b15f1271e4d84ed49f1165c5fee98e795f

See more details on using hashes here.

File details

Details for the file search_string_overvaagning-0.3.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 da197c785e4138c42f7f52c587f015574d0385b16e5e35f7486836d19a3db111
MD5 5806d8bd7554dedb82088330294aaa37
BLAKE2b-256 548516f63653c29257db87b935eb24c0f4296af2245ddd83c0c7fca8381f4f10

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