# Readme
Quid is a tool for quotation detection in two texts, called source and target. If possible, the source text should be
the one that is quoted by the target text. This allows the algorithm to handle common properties of quotations, for
example, ellipses or inaccurate quotations. The following is an example output:
~~~
0 52 This is a long Text and the long test goes on and on
0 45 This is a long Text [...] test goes on and on
~~~
## Demo Website
A [demo website](https://pages.cms.hu-berlin.de/schluesselstellen/quidweb/) is available for testing Quid.
## Installation
~~~
pip install Quid
~~~
## Usage
There are two ways to use the algorithm, in code and from the command line.
### In Code
The algorithm can be found in the package `quid`. To use it create a `Quid` object which can be configured with a number
of arguments. To use all default arguments, the most basic use would like this:
~~~
from quid.core.Quid import Quid
quid = Quid()
matches = quid.compare('file 1 content', 'file 2 content')
~~~
`Compare` returns a list with the following structure: `List[Match]`. `Match` stores two `MatchSpans`. One for the
source text and one for the target text. `MatchSpan` stores the `start` and `end` character positions for the matching
spans in the source and target text.
<details>
<summary>All arguments to configure the Quid object.</summary>
- The minimum number of tokens of a match (default: 5)
- The maximum number of tokens to skip when extending a match backwards (default: 10)
- The maximum number of tokens to skip when extending a match forwards (default: 3)
- The maximum distance in tokens between to matches considered for merging (default: 2)
- The maximum distance in tokens between two matches considered for merging where the target text contains an ellipses between the matches (default: 10)
- Whether to include matched text in the returned data structure (default: True)
- How to handle ambiguous matches. If False, for a match with multiple matched segments in the source text, multiple matches will be returned. Otherwise, only the first match will be returned. (default: False)
- The threshold for the minimal levenshtein similarity between tokens (and the initial n-grams) to be accepted as a match (default: 0.85)
- Whether to split texts which are longer than the threshold (in words) defined with `split_length` for faster processing (default: False)
- The threshold for splitting texts (in number of words) (default: 30000)
- The maximum number of processes for parallel processing (default: 1)
</details>
### Command line
The `quid compare` command provides a command line interface to the algorithm.
To use all default arguments, the most basic command would look like this:
~~~
quid compare file_1_path file_2_path
~~~
By default, the result is returned as a json structure: `List[Match]`. `Match` stores two `MatchSpans`. One for
the source text and one for the target text. `MatchSpan` stores the `start` and `end` character positions for the
matching spans in the source and target text. For example:
~~~
[
{
"source_span": {
"start": 0,
"end": 52,
"text": "This is a long Text and the long test goes on and on"
},
"target_span": {
"start": 0,
"end": 45,
"text": "This is a long Text [...] test goes on and on"
}
}
]
~~~
Alternatively, the result can be printed in a human-readable text format with the command line option
`--output-type text`. This will result in the following output:
~~~
0 52 This is a long Text and the long test goes on and on
0 45 This is a long Text [...] test goes on and on
~~~
In case the matching text is not needed, the option `--no-text` allows to exclude the text from the output.
<details>
<summary>All command line options</summary>
~~~
usage: quid compare [-h] [--text | --no-text] [--output-type {json,text,csv}]
[--csv-sep CSV_SEP]
[--output-folder-path OUTPUT_FOLDER_PATH]
[--min-match-length MIN_MATCH_LENGTH]
[--look-back-limit LOOK_BACK_LIMIT]
[--look-ahead-limit LOOK_AHEAD_LIMIT]
[--max-merge-distance MAX_MERGE_DISTANCE]
[--max-merge-ellipsis-distance MAX_MERGE_ELLIPSIS_DISTANCE]
[--create-dated-subfolder | --no-create-dated-subfolder]
[--max-num-processes MAX_NUM_PROCESSES]
[--keep-ambiguous-matches | --no-keep-ambiguous-matches]
[--min-levenshtein-similarity MIN_LEVENSHTEIN_SIMILARITY]
[--split-long-texts | --no-split-long-texts]
[--split-length SPLIT_LENGTH]
source-file-path target-path
Quid compare allows the user to find quotations in two texts, a source text
and a target text. If known, the source text should be the one that is quoted
by the target text. This allows the algorithm to handle things like ellipsis
in quotations.
positional arguments:
source-file-path Path to the source text file
target-path Path to the target text file or folder
options:
-h, --help show this help message and exit
--text, --no-text Include matched text in the returned data structure
(default: True)
--output-type {json,text,csv}
The output type
--csv-sep CSV_SEP output separator for csv (default: '\t')
--output-folder-path OUTPUT_FOLDER_PATH
The output folder path. If this option is set the
output will be saved to a file created in the
specified folder
--min-match-length MIN_MATCH_LENGTH
The minimum number of tokens of a match (>= 1,
default: 5)
--look-back-limit LOOK_BACK_LIMIT
The maximum number of tokens to skip when extending a
match backwards (>= 0, default: 10)
--look-ahead-limit LOOK_AHEAD_LIMIT
The maximum number of tokens to skip when extending a
match forwards (>= 0, default: 3)
--max-merge-distance MAX_MERGE_DISTANCE
The maximum distance in tokens between two matches
considered for merging (>= 0, default: 2)
--max-merge-ellipsis-distance MAX_MERGE_ELLIPSIS_DISTANCE
The maximum distance in tokens between two matches
considered for merging where the target text contains
an ellipsis between the matches (>= 0, default: 10)
--create-dated-subfolder, --no-create-dated-subfolder
Create a subfolder named with the current date to
store the results (default: False)
--max-num-processes MAX_NUM_PROCESSES
Maximum number of processes to use for parallel
processing
--keep-ambiguous-matches, --no-keep-ambiguous-matches
For a match with multiple matched segments in the
source text, multiple matches will be returned.
(default: False)
--min-levenshtein-similarity MIN_LEVENSHTEIN_SIMILARITY
The threshold for the minimal levenshtein similarity
between tokens (and the initial n-grams) to be
accepted as a match (between 0 and 1, default: 0.85)
--split-long-texts, --no-split-long-texts
Split texts longer than split-length words for faster
processing (default: False)
--split-length SPLIT_LENGTH
If split-long-texts is set to True, texts longer (in
number of words) than this threshold will be split for
faster processing.
~~~
</details>
## Parallel processing
Quid supports using multiple processes when comparing multiple target texts with the source texts. To use multiple
processes the command line option `--max-num-processes` is used. The default is 1.
## Processing "long" texts
Depending on the length of the texts and the hardware used, processing times can get quite long. For texts longer than
a couple of hundreds of thousands characters, it can make sense to use the `--split-long-texts` command line option (or
`split_long_texts` argument) and set `--max-num-processes` (or `max_num_processes` argument) to define the number of
parallel processes to be used. If `--split-long-texts` is used, texts longer than the default of 30000 tokens will be
split. This limit can also be changed using the `--split-length` command line option (or `split_length` argument).
When run from the command line, using `--split-long-texts` automatically shows a progress bar. To show a progress bar
when using Quid in code, the `show_progress` argument can be set to `True`.
*Note*: `--split-long-texts` does not work in combination with comparing multiple target texts (i.e. passing a folder as
`target-path`).
## Passager
The package `passager` contains code to extract key passages from the found matches. The `passage` command produces
several json files.
The resulting data structure is documented in the [data structure readme](DATA_STRUCTURE_README.md).
<details>
<summary>All command line options</summary>
~~~
usage: quid passage [-h]
source-file-path target-folder-path
matches-folder-path output-folder-path
Quid passage allows the user to extract key passages from the found
matches.
positional arguments:
source-file-path Path to the source text file
target-folder-path Path to the target texts folder path
matches-folder-path Path to the folder with the match files
output-folder-path Path to the output folder
~~~
</details>
## Visualization
The package `visualization` contains code to create the content for a web page to visualize the key passages.
For a white label version of the website, see [QuidEx-wh](https://scm.cms.hu-berlin.de/schluesselstellen/quidex-wh).
<details>
<summary>All command line options</summary>
~~~
usage: quid visualize [-h] [--title TITLE] [--author AUTHOR]
[--year YEAR] [--censor]
source-file-path target-folder-path
passages-folder-path output-folder-path
Quid visualize allows the user to create the files needed for a website that
visualizes the Quid algorithm results.
positional arguments:
source-file-path Path to the source text file
target-folder-path Path to the target texts folder path
passages-folder-path
Path to the folder with the key passages files, i.e.
the resulting files from Quid passage
output-folder-path Path to the output folder
optional arguments:
-h, --help show this help message and exit
--title TITLE Title of the work
--author AUTHOR Author of the work
--year YEAR Year of the work
~~~
</details>
## Logging
By default, the log level is set to `WARN`. This can be changed with the `--log-level` command line option.
For example:
~~~
quid --log-level INFO compare …
~~~
## Performance
For in-depth information on the evaluation, see our [publication](https://aclanthology.org/2021.nlp4dh-1.7).
Performance of the current version of Quid is as follows:
| Work | Precision | Recall | F-Score |
|------------------|-----------|--------|---------|
| Die Judenbuche | 0.83 | 0.92 | 0.87 |
| Micheal Kohlhaas | 0.71 | 0.93 | 0.81 |
## History
Quid was formerly known as Lotte and later renamed. Earlier publications use the name Lotte.
## Data
All data, which can be made available, can be found in our [Quid Resource Repository](https://scm.cms.hu-berlin.de/schluesselstellen/quid-resources).
Due to copyright restrictions, it is unfortunately not possible to publish the complete scholarly works.
## Citation
If you use Quid or base your work on our code, please cite our paper:
~~~
@inproceedings{arnold2021lotte,
title = {{L}otte and {A}nnette: {A} {F}ramework for {F}inding and {E}xploring {K}ey {P}assages in {L}iterary {W}orks},
author = {Arnold, Frederik and Jäschke, Robert},
booktitle = {Proceedings of the Workshop on Natural Language Processing for Digital Humanities},
year = {2021},
publisher = {NLP Association of India (NLPAI)},
url = {https://aclanthology.org/2021.nlp4dh-1.7},
pages = {55--63}
}
~~~
## Acknowledgements
The algorithm is inspired by _sim_text_ by Dick Grune [^1]
and _Similarity texter: A text-comparison web tool based on the “sim_text” algorithm_ by Sofia Kalaidopoulou (2016) [^2]
[^1]: https://dickgrune.com/Programs/similarity_tester/ (Stand: 12.04.2021)
[^2]: https://people.f4.htw-berlin.de/~weberwu/simtexter/522789_Sofia-Kalaidopoulou_bachelor-thesis.pdf (Stand: 12.04.2021)
Raw data
{
"_id": null,
"home_page": "https://hu.berlin/quid",
"name": "Quid",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "quotation detection, quotation identification, literal citation extraction, key passages, natural language processing, nlp, text reuse",
"author": "Frederik Arnold",
"author_email": "frederik.arnold@hu-berlin.de",
"download_url": "https://files.pythonhosted.org/packages/93/1d/234ed2c8df2b0838eb2d081cd669f1e171d6beb6901d6fd26edcdd54fb84/quid-2.6.5.tar.gz",
"platform": null,
"description": "# Readme\n\nQuid is a tool for quotation detection in two texts, called source and target. If possible, the source text should be\nthe one that is quoted by the target text. This allows the algorithm to handle common properties of quotations, for\nexample, ellipses or inaccurate quotations. The following is an example output: \n\n~~~\n0\t52\tThis is a long Text and the long test goes on and on\n0\t45\tThis is a long Text [...] test goes on and on\n~~~\n\n## Demo Website\nA [demo website](https://pages.cms.hu-berlin.de/schluesselstellen/quidweb/) is available for testing Quid.\n\n## Installation\n~~~\npip install Quid\n~~~\n\n## Usage\nThere are two ways to use the algorithm, in code and from the command line.\n\n### In Code\n\nThe algorithm can be found in the package `quid`. To use it create a `Quid` object which can be configured with a number\nof arguments. To use all default arguments, the most basic use would like this:\n\n~~~\nfrom quid.core.Quid import Quid\n\nquid = Quid()\nmatches = quid.compare('file 1 content', 'file 2 content')\n~~~\n\n`Compare` returns a list with the following structure: `List[Match]`. `Match` stores two `MatchSpans`. One for the\nsource text and one for the target text. `MatchSpan` stores the `start` and `end` character positions for the matching\nspans in the source and target text.\n\n<details>\n<summary>All arguments to configure the Quid object.</summary>\n\n- The minimum number of tokens of a match (default: 5)\n- The maximum number of tokens to skip when extending a match backwards (default: 10)\n- The maximum number of tokens to skip when extending a match forwards (default: 3)\n- The maximum distance in tokens between to matches considered for merging (default: 2)\n- The maximum distance in tokens between two matches considered for merging where the target text contains an ellipses between the matches (default: 10)\n- Whether to include matched text in the returned data structure (default: True)\n- How to handle ambiguous matches. If False, for a match with multiple matched segments in the source text, multiple matches will be returned. Otherwise, only the first match will be returned. (default: False)\n- The threshold for the minimal levenshtein similarity between tokens (and the initial n-grams) to be accepted as a match (default: 0.85)\n- Whether to split texts which are longer than the threshold (in words) defined with `split_length` for faster processing (default: False)\n- The threshold for splitting texts (in number of words) (default: 30000)\n- The maximum number of processes for parallel processing (default: 1)\n\n</details>\n\n### Command line\nThe `quid compare` command provides a command line interface to the algorithm.\n\nTo use all default arguments, the most basic command would look like this:\n\n~~~\nquid compare file_1_path file_2_path\n~~~\n\nBy default, the result is returned as a json structure: `List[Match]`. `Match` stores two `MatchSpans`. One for\nthe source text and one for the target text. `MatchSpan` stores the `start` and `end` character positions for the\nmatching spans in the source and target text. For example:\n\n~~~\n[\n {\n \"source_span\": {\n \"start\": 0,\n \"end\": 52,\n \"text\": \"This is a long Text and the long test goes on and on\"\n },\n \"target_span\": {\n \"start\": 0,\n \"end\": 45,\n \"text\": \"This is a long Text [...] test goes on and on\"\n }\n }\n]\n~~~\n\nAlternatively, the result can be printed in a human-readable text format with the command line option\n`--output-type text`. This will result in the following output:\n\n~~~\n0\t52\tThis is a long Text and the long test goes on and on\n0\t45\tThis is a long Text [...] test goes on and on \n~~~\n\nIn case the matching text is not needed, the option `--no-text` allows to exclude the text from the output.\n\n<details>\n<summary>All command line options</summary>\n\n~~~\nusage: quid compare [-h] [--text | --no-text] [--output-type {json,text,csv}]\n [--csv-sep CSV_SEP]\n [--output-folder-path OUTPUT_FOLDER_PATH]\n [--min-match-length MIN_MATCH_LENGTH]\n [--look-back-limit LOOK_BACK_LIMIT]\n [--look-ahead-limit LOOK_AHEAD_LIMIT]\n [--max-merge-distance MAX_MERGE_DISTANCE]\n [--max-merge-ellipsis-distance MAX_MERGE_ELLIPSIS_DISTANCE]\n [--create-dated-subfolder | --no-create-dated-subfolder]\n [--max-num-processes MAX_NUM_PROCESSES]\n [--keep-ambiguous-matches | --no-keep-ambiguous-matches]\n [--min-levenshtein-similarity MIN_LEVENSHTEIN_SIMILARITY]\n [--split-long-texts | --no-split-long-texts]\n [--split-length SPLIT_LENGTH]\n source-file-path target-path\n\nQuid compare allows the user to find quotations in two texts, a source text\nand a target text. If known, the source text should be the one that is quoted\nby the target text. This allows the algorithm to handle things like ellipsis\nin quotations.\n\npositional arguments:\n source-file-path Path to the source text file\n target-path Path to the target text file or folder\n\noptions:\n -h, --help show this help message and exit\n --text, --no-text Include matched text in the returned data structure\n (default: True)\n --output-type {json,text,csv}\n The output type\n --csv-sep CSV_SEP output separator for csv (default: '\\t')\n --output-folder-path OUTPUT_FOLDER_PATH\n The output folder path. If this option is set the\n output will be saved to a file created in the\n specified folder\n --min-match-length MIN_MATCH_LENGTH\n The minimum number of tokens of a match (>= 1,\n default: 5)\n --look-back-limit LOOK_BACK_LIMIT\n The maximum number of tokens to skip when extending a\n match backwards (>= 0, default: 10)\n --look-ahead-limit LOOK_AHEAD_LIMIT\n The maximum number of tokens to skip when extending a\n match forwards (>= 0, default: 3)\n --max-merge-distance MAX_MERGE_DISTANCE\n The maximum distance in tokens between two matches\n considered for merging (>= 0, default: 2)\n --max-merge-ellipsis-distance MAX_MERGE_ELLIPSIS_DISTANCE\n The maximum distance in tokens between two matches\n considered for merging where the target text contains\n an ellipsis between the matches (>= 0, default: 10)\n --create-dated-subfolder, --no-create-dated-subfolder\n Create a subfolder named with the current date to\n store the results (default: False)\n --max-num-processes MAX_NUM_PROCESSES\n Maximum number of processes to use for parallel\n processing\n --keep-ambiguous-matches, --no-keep-ambiguous-matches\n For a match with multiple matched segments in the\n source text, multiple matches will be returned.\n (default: False)\n --min-levenshtein-similarity MIN_LEVENSHTEIN_SIMILARITY\n The threshold for the minimal levenshtein similarity\n between tokens (and the initial n-grams) to be\n accepted as a match (between 0 and 1, default: 0.85)\n --split-long-texts, --no-split-long-texts\n Split texts longer than split-length words for faster\n processing (default: False)\n --split-length SPLIT_LENGTH\n If split-long-texts is set to True, texts longer (in\n number of words) than this threshold will be split for\n faster processing.\n~~~\n\n</details>\n\n## Parallel processing\nQuid supports using multiple processes when comparing multiple target texts with the source texts. To use multiple\nprocesses the command line option `--max-num-processes` is used. The default is 1.\n\n## Processing \"long\" texts\nDepending on the length of the texts and the hardware used, processing times can get quite long. For texts longer than\na couple of hundreds of thousands characters, it can make sense to use the `--split-long-texts` command line option (or\n`split_long_texts` argument) and set `--max-num-processes` (or `max_num_processes` argument) to define the number of\nparallel processes to be used. If `--split-long-texts` is used, texts longer than the default of 30000 tokens will be\nsplit. This limit can also be changed using the `--split-length` command line option (or `split_length` argument).\nWhen run from the command line, using `--split-long-texts` automatically shows a progress bar. To show a progress bar\nwhen using Quid in code, the `show_progress` argument can be set to `True`.\n\n*Note*: `--split-long-texts` does not work in combination with comparing multiple target texts (i.e. passing a folder as\n`target-path`).\n\n## Passager\nThe package `passager` contains code to extract key passages from the found matches. The `passage` command produces\nseveral json files.\nThe resulting data structure is documented in the [data structure readme](DATA_STRUCTURE_README.md).\n\n<details>\n<summary>All command line options</summary>\n\n~~~\nusage: quid passage [-h]\n source-file-path target-folder-path\n matches-folder-path output-folder-path\n\nQuid passage allows the user to extract key passages from the found\nmatches.\n\npositional arguments:\n source-file-path Path to the source text file\n target-folder-path Path to the target texts folder path\n matches-folder-path Path to the folder with the match files\n output-folder-path Path to the output folder\n~~~\n\n</details>\n\n## Visualization\nThe package `visualization` contains code to create the content for a web page to visualize the key passages.\nFor a white label version of the website, see [QuidEx-wh](https://scm.cms.hu-berlin.de/schluesselstellen/quidex-wh).\n\n<details>\n<summary>All command line options</summary>\n\n~~~\nusage: quid visualize [-h] [--title TITLE] [--author AUTHOR]\n [--year YEAR] [--censor]\n source-file-path target-folder-path\n passages-folder-path output-folder-path\n\nQuid visualize allows the user to create the files needed for a website that\nvisualizes the Quid algorithm results.\n\npositional arguments:\n source-file-path Path to the source text file\n target-folder-path Path to the target texts folder path\n passages-folder-path\n Path to the folder with the key passages files, i.e.\n the resulting files from Quid passage\n output-folder-path Path to the output folder\n\noptional arguments:\n -h, --help show this help message and exit\n --title TITLE Title of the work\n --author AUTHOR Author of the work\n --year YEAR Year of the work\n~~~\n\n</details>\n\n## Logging\nBy default, the log level is set to `WARN`. This can be changed with the `--log-level` command line option.\nFor example:\n\n~~~\nquid --log-level INFO compare \u2026\n~~~\n\n## Performance\nFor in-depth information on the evaluation, see our [publication](https://aclanthology.org/2021.nlp4dh-1.7).\nPerformance of the current version of Quid is as follows:\n\n| Work | Precision | Recall | F-Score |\n|------------------|-----------|--------|---------|\n| Die Judenbuche | 0.83 | 0.92 | 0.87 |\n| Micheal Kohlhaas | 0.71 | 0.93 | 0.81 |\n\n## History\nQuid was formerly known as Lotte and later renamed. Earlier publications use the name Lotte.\n\n## Data\nAll data, which can be made available, can be found in our [Quid Resource Repository](https://scm.cms.hu-berlin.de/schluesselstellen/quid-resources).\nDue to copyright restrictions, it is unfortunately not possible to publish the complete scholarly works.\n\n## Citation\nIf you use Quid or base your work on our code, please cite our paper:\n\n~~~\n@inproceedings{arnold2021lotte,\n title = {{L}otte and {A}nnette: {A} {F}ramework for {F}inding and {E}xploring {K}ey {P}assages in {L}iterary {W}orks},\n author = {Arnold, Frederik and J\u00e4schke, Robert},\n booktitle = {Proceedings of the Workshop on Natural Language Processing for Digital Humanities},\n year = {2021},\n publisher = {NLP Association of India (NLPAI)},\n url = {https://aclanthology.org/2021.nlp4dh-1.7},\n pages = {55--63}\n}\n~~~\n\n## Acknowledgements\nThe algorithm is inspired by _sim_text_ by Dick Grune [^1]\nand _Similarity texter: A text-comparison web tool based on the \u201csim_text\u201d algorithm_ by Sofia Kalaidopoulou (2016) [^2]\n\n[^1]: https://dickgrune.com/Programs/similarity_tester/ (Stand: 12.04.2021)\n\n[^2]: https://people.f4.htw-berlin.de/~weberwu/simtexter/522789_Sofia-Kalaidopoulou_bachelor-thesis.pdf (Stand: 12.04.2021)\n",
"bugtrack_url": null,
"license": null,
"summary": "Quid is a tool for quotation detection in texts and can deal with common properties of quotations, for example, ellipses or inaccurate quotations.",
"version": "2.6.5",
"project_urls": {
"Homepage": "https://hu.berlin/quid",
"Source": "https://hu.berlin/quid"
},
"split_keywords": [
"quotation detection",
" quotation identification",
" literal citation extraction",
" key passages",
" natural language processing",
" nlp",
" text reuse"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "056920d63272316c5e64a4af64e8f41479ab4f434734c4effa422c94f5007947",
"md5": "8eb99c272b5c2dd2f575f2bb98f6ef72",
"sha256": "fb896a3360b4d9ac3989bdc04a692613cb3626fd5a11762559a6bc143f10bd80"
},
"downloads": -1,
"filename": "Quid-2.6.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8eb99c272b5c2dd2f575f2bb98f6ef72",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 41462,
"upload_time": "2024-09-16T11:56:46",
"upload_time_iso_8601": "2024-09-16T11:56:46.449351Z",
"url": "https://files.pythonhosted.org/packages/05/69/20d63272316c5e64a4af64e8f41479ab4f434734c4effa422c94f5007947/Quid-2.6.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "931d234ed2c8df2b0838eb2d081cd669f1e171d6beb6901d6fd26edcdd54fb84",
"md5": "53254d34b497103c855479b00f91014c",
"sha256": "76fca859b3899f82167091e95e542ccec789aabaa66ac719be9a8a54aa2eec30"
},
"downloads": -1,
"filename": "quid-2.6.5.tar.gz",
"has_sig": false,
"md5_digest": "53254d34b497103c855479b00f91014c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 32124,
"upload_time": "2024-09-16T11:56:47",
"upload_time_iso_8601": "2024-09-16T11:56:47.525429Z",
"url": "https://files.pythonhosted.org/packages/93/1d/234ed2c8df2b0838eb2d081cd669f1e171d6beb6901d6fd26edcdd54fb84/quid-2.6.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-16 11:56:47",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "quid"
}