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.5-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

search_string_overvaagning-0.3.5-cp311-cp311-musllinux_1_1_x86_64.whl (212.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

search_string_overvaagning-0.3.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (218.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

search_string_overvaagning-0.3.5-cp311-cp311-macosx_10_9_x86_64.whl (128.1 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

search_string_overvaagning-0.3.5-cp310-cp310-musllinux_1_1_x86_64.whl (213.5 kB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

search_string_overvaagning-0.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

search_string_overvaagning-0.3.5-cp310-cp310-macosx_10_9_x86_64.whl (129.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 4ee76185a9ba20f8c2442e0879e99ce61c3a289594d2c3aeabc635c2f5374e62
MD5 b2f03c88b5f9f34862edc19ecd88c370
BLAKE2b-256 20803f877d77aba5503d4b94d8056804279667f9a779558c51544a71ec854134

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c240797c8bc1ffe4c70c2c2aa4713abb1823fe62930d432c23b67899fc08bba6
MD5 c02b0869c5e2ca48157b75a5eb6e44ea
BLAKE2b-256 083aaf7b0dd994a9ea9e9728fbf10504c0f3a905c24b8ff58e4c15326f041085

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 823e02bb29a4f50a6b883e4ca9f3689145f3135ea527254f301299f3b6cd935f
MD5 75f711027da69cea1ecdd0bcd4d9d16c
BLAKE2b-256 f1cd18851d33bc57ed20df85cb92561fe3c4000b9d0e6e751fc7cb683145f619

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5f181b5a33b126e4a19b5e2c8e59de0531aac22d4297ff4f4ad04d3e37e17729
MD5 c9d2fcc6f446c0830ae6918a43c56140
BLAKE2b-256 832a15c6f19b3a6b7fea9199eca4a0aa5d3134762ddbfaeb9f5e41512c08e696

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8a572ab795c47095fb42eeda7e8bfe83d3f40b608fd1cf51e14139496f83b4b9
MD5 70b52f3029c7d9129162b066d67eb9fb
BLAKE2b-256 6336cc9240a315346eaf0cdb9e7439504d86da0da4d85ceb26097890f64f1080

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 97321426d64f2848113e6a7ed4bb895ffb9322d87cd3a4aadf8ae67984ec9f91
MD5 252215c0ef8367b173de68cded0e42ad
BLAKE2b-256 f0dec205af4cf0b53bc3a07b6087da0f05a69aa0dd81384dae48a8180ba25ac0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for search_string_overvaagning-0.3.5-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2183849581340392b62d09b0634f8501d44908e68605cf814b4069a68d593b06
MD5 fcf7f00a2c1c5b4a93830d1ed91b9766
BLAKE2b-256 88cb3865ea5c74da74a7052aff309b29045b4d1f64041836d4297ce091808e52

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