{"id":19664808,"url":"https://github.com/anyks/asc","last_synced_at":"2025-04-28T22:30:57.449Z","repository":{"id":57410698,"uuid":"293944195","full_name":"anyks/asc","owner":"anyks","description":"ANYKS Spell-Checker","archived":false,"fork":false,"pushed_at":"2023-01-03T00:30:24.000Z","size":878,"stargazers_count":19,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-05T11:23:21.168Z","etag":null,"topics":["alm","anyks-spell-checker","asc","idf","language-model","lm","python3","spell-checker","spellchecker","tf-idf"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anyks.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.MIT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":null,"custom":"https://www.paypal.me/anyks"}},"created_at":"2020-09-08T22:47:02.000Z","updated_at":"2025-03-18T15:55:35.000Z","dependencies_parsed_at":"2023-02-01T04:31:17.392Z","dependency_job_id":null,"html_url":"https://github.com/anyks/asc","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyks%2Fasc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyks%2Fasc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyks%2Fasc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anyks%2Fasc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anyks","download_url":"https://codeload.github.com/anyks/asc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251397576,"owners_count":21583034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alm","anyks-spell-checker","asc","idf","language-model","lm","python3","spell-checker","spellchecker","tf-idf"],"created_at":"2024-11-11T16:19:06.433Z","updated_at":"2025-04-28T22:30:56.150Z","avatar_url":"https://github.com/anyks.png","language":"C++","funding_links":["https://www.paypal.me/anyks"],"categories":[],"sub_categories":[],"readme":"[![ANYKS Smart language model](https://raw.githubusercontent.com/anyks/asc/master/site/img/banner.jpg)](https://anyks.com)\n\n# ANYKS Spell-checker (ASC) C++11\n\n- [Project description](https://github.com/anyks/asc#project-description)\n- [List of features](https://github.com/anyks/asc#list-of-features)\n- [Dependencies](https://github.com/anyks/asc#dependencies)\n- [Building the project](https://github.com/anyks/asc#building-the-project)\n    - [Python version ASC](https://github.com/anyks/asc#python-version-asc)\n    - [Cloning the project](https://github.com/anyks/asc#cloning-the-project)\n    - [Linux and FreeBSD](https://github.com/anyks/asc#linux-and-freebsd)\n    - [MacOS X](https://github.com/anyks/asc#macos-x)\n- [Ready-to-use dictionaries](https://github.com/anyks/asc#ready-to-use-dictionaries)\n- [Testing](https://github.com/anyks/asc#testing)\n    - [Files used for testing](https://github.com/anyks/asc#files-used-for-testing)\n- [File formats](https://github.com/anyks/asc#file-formats)\n    - [ARPA](https://github.com/anyks/asc#arpa)\n    - [Vocab](https://github.com/anyks/asc#vocab)\n        - [Description](https://github.com/anyks/asc#description)\n    - [File containing similar letters encountered in different dictionaries](https://github.com/anyks/asc#file-containing-similar-letters-encountered-in-different-dictionaries)\n    - [File containing a list of abbreviations](https://github.com/anyks/asc#file-containing-a-list-of-abbreviations)\n    - [File containing a list of domain zones](https://github.com/anyks/asc#file-containing-a-list-of-domain-zones)\n    - [Python word preprocessing script template](https://github.com/anyks/asc#python-word-preprocessing-script-template)\n    - [Python custom word token definition script template](https://github.com/anyks/asc#python-custom-word-token-definition-script-template)\n    - [Python stemming script example](https://github.com/anyks/asc#python-stemming-script-example)\n    - [Environment variables](https://github.com/anyks/asc#environment-variables)\n- [Examples](https://github.com/anyks/asc#examples)\n    - [Information about the binary dictionary](https://github.com/anyks/asc#information-about-the-binary-dictionary)\n    - [Training process](https://github.com/anyks/asc#training-process)\n    - [Error correction](https://github.com/anyks/asc#error-correction)\n- [License](https://github.com/anyks/asc#license)\n- [Contact info](https://github.com/anyks/asc#contact-info)\n\n## Project description\n\nThere are a lot of typo and text error correction systems out there. Each one of those systems has its pros and cons, and each system has the right to live and will find its own user base. I would like to present my own version of the typo correction system with its own unique features.\n\n## List of features\n\n- Correction of mistakes in words with a **Levenshtein distance** of up to 4;\n- Correction of different types of typos in words: insertion, deletion, substitution, rearrangement of character;\n- **Ё**-fication of a word given the context (letter 'ё' is commonly replaced by letter 'е' in russian typed text);\n- Context-based word capitalization for proper names and titles;\n- Context-based splitting for words that are missing the separating space character;\n- Text analysis without correcting the original text;\n- Searching the text for errors, typos, incorrect context.\n\n## Dependencies\n\n- [Zlib](http://www.zlib.net)\n- [Bloom](http://www.partow.net/programming/bloomfilter/index.html)\n- [OpenSSL](https://www.openssl.org)\n- [hnswlib](https://github.com/nmslib/hnswlib)\n- [HandyPack](https://github.com/bakwc/HandyPack)\n- [GperfTools](https://github.com/gperftools/gperftools)\n- [Python3](https://www.python.org/download/releases/3.0)\n- [NLohmann::json](https://github.com/nlohmann/json)\n- [BigInteger](http://mattmccutchen.net/bigint)\n- [ALM](https://github.com/anyks/alm)\n\n## Building the project\n\n### Python version ASC\n```bash\n$ python3 -m pip install pybind11\n$ python3 -m pip install anyks-sc\n```\n\n[Documentation pip](https://pypi.org/project/anyks-sc)\n\n### Cloning the project\n\n```bash\n$ git clone --recursive https://github.com/anyks/asc.git\n```\n\n### Build third party\n```bash\n$ ./build_third_party.sh\n```\n\n### Linux/MacOS X and FreeBSD\n\n```bash\n$ mkdir ./build\n$ cd ./build\n\n$ cmake ..\n$ make\n```\n\n## Ready-to-use dictionaries\n\n| Dictionary name                                                        | Size (GB)   | RAM (GB)                | N-gram order   | Language |\n|------------------------------------------------------------------------|-------------|-------------------------|----------------|----------|\n| [wittenbell-3-big.asc](https://cloud.mail.ru/public/2b9E/sz9b8YGJ1)    | 1.97        | 15.6                    | 3              | RU       |\n| [wittenbell-3-middle.asc](https://cloud.mail.ru/public/5zo5/2F6uav8fz) | 1.24        | 9.7                     | 3              | RU       |\n| [mkneserney-3-middle.asc](https://cloud.mail.ru/public/3SBP/35WJFKFyd) | 1.33        | 9.7                     | 3              | RU       |\n| [wittenbell-3-single.asc](https://cloud.mail.ru/public/21jt/YEW493XQa) | 0.772       | 5.14                    | 3              | RU       |\n| [wittenbell-5-single.asc](https://cloud.mail.ru/public/5Adc/5x5Ea1eA6) | 1.37        | 10.7                    | 5              | RU       |\n| [wittenbell-5-big.asc](https://cloud.mail.ru/public/ukpb/NTVQgZ9pR)    | 9.76        | 22.1                    | 5              | RU       |\n| [wittenbell-3-single.asc](https://cloud.mail.ru/public/6frp/x6PoNDpay) | 2.33        | 6.15                    | 3              | EN       |\n\n## Testing\n\nTo test the system, we used data from the [2016 \"spelling correction\" competition organized by Dialog21](http://www.dialog-21.ru/evaluation/2016/spelling_correction).\u003cbr\u003e\nThe trained binary dictionary that was used for testing: [wittenbell-3-middle.asc](https://cloud.mail.ru/public/5zo5/2F6uav8fz)\n\n| Mode                              | Precision | Recall | FMeasure |\n|-----------------------------------|-----------|--------|----------|\n| **Typo correction**               | 76.97     | 62.71  | 69.11    |\n| **Error correction**              | 73.72     | 60.53  | 66.48    |\n\nI think it is unnecessary to add any other data. Anyone can repeat the test if they wish (all files used for testing are attached below).\n\n### Files used for testing\n\n- [test.txt](https://cloud.mail.ru/public/3rzx/2HwqDU9j5) - Text used for testing;\n- [correct.txt](https://cloud.mail.ru/public/3dAN/J4EzV4U3W) - File with correct text;\n- [evaluate.py](https://cloud.mail.ru/public/ZTRf/4sUS1Sc2p) - Python3 script for correction result evaluation.\n\n---\n\n## File formats\n\n### ARPA\n```\n\\data\\\nngram 1=52\nngram 2=68\nngram 3=15\n\n\\1-grams:\n-1.807052\t1-й\t-0.30103\n-1.807052\t2\t-0.30103\n-1.807052\t3~4\t-0.30103\n-2.332414\tкак\t-0.394770\n-3.185530\tпосле\t-0.311249\n-3.055896\tтого\t-0.441649\n-1.150508\t\u003c/s\u003e\n-99\t\u003cs\u003e\t-0.3309932\n-2.112406\t\u003cunk\u003e\n-1.807052\tT358\t-0.30103\n-1.807052\tVII\t-0.30103\n-1.503878\tГрека\t-0.39794\n-1.807052\tГреку\t-0.30103\n-1.62953\tЕхал\t-0.30103\n...\n\n\\2-grams:\n-0.29431\t1-й передал\n-0.29431\t2 ложки\n-0.29431\t3~4 дня\n-0.8407791\t\u003cs\u003e Ехал\n-1.328447\tпосле того\t-0.477121\n...\n\n\\3-grams:\n-0.09521468\tрак на руке\n-0.166590\tпосле того как\n...\n\n\\end\\\n```\n\n| N-gramm               | Occurance in the corpus      | Occurrence in documents    |\n|-----------------------|------------------------------|----------------------------|\n| только в одном        | 2                            | 1                          |\n\n### Vocab\n```\n\\data\\\nad=1\ncw=23832\nunq=9390\n\n\\words:\n33\tа\t244 | 1 | 0.010238 | 0.000000 | -3.581616\n34\tб\t11 | 1 | 0.000462 | 0.000000 | -6.680889\n35\tв\t762 | 1 | 0.031974 | 0.000000 | -2.442838\n40\tж\t12 | 1 | 0.000504 | 0.000000 | -6.593878\n330344\tбыл\t47 | 1 | 0.001972 | 0.000000 | -5.228637\n335190\tвам\t17 | 1 | 0.000713 | 0.000000 | -6.245571\n335192\tдам\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n335202\tнам\t22 | 1 | 0.000923 | 0.000000 | -5.987742\n335206\tсам\t7 | 1 | 0.000294 | 0.000000 | -7.132874\n335207\tтам\t29 | 1 | 0.001217 | 0.000000 | -5.711489\n2282019644\tпохожесть\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n2282345502\tновый\t10 | 1 | 0.000420 | 0.000000 | -6.776199\n2282416889\tбелый\t2 | 1 | 0.000084 | 0.000000 | -8.385637\n3009239976\tгражданский\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3009763109\tбанкиры\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3013240091\tгеныч\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3014009989\tпреступлениях\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3015727462\tтысяч\t2 | 1 | 0.000084 | 0.000000 | -8.385637\n3025113549\tпозаботьтесь\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3049820849\tкомментарием\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3061388599\tкомпьютерная\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3063804798\tшаблонов\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3071212736\tзавидной\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3074971025\tхолодной\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3075044360\tвыходной\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3123271427\tделаешь\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3123322362\tчитаешь\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n3126399411\tготовится\t1 | 1 | 0.000042 | 0.000000 | -9.078785\n...\n```\n\n| Word ID               | Word      | Occurance in the corpus    | Occurance in documents     | tf       | tf-idf   | wltf      |\n|-----------------------|-----------|----------------------------|----------------------------|----------|----------|-----------|\n| 2282345502            | новый     | 10                         | 1                          | 0.000420 | 0.000000 | -6.776199 |\n\n#### Description:\n\n- **ad** - The total number of documents in the training corpus;\n- **cw** - The total number of words in the training corpus;\n- **oc** - Occurance in the corpus;\n- **dc** - Occurance in documents;\n- **tf** - (term frequency) — the ratio of the number of occurrences of a certain word to the total number of words in the document. Thus, the importance of a word within a separate document is estimated, calculated as: [tf = oc / cw];\n- **idf** - (inverse document frequency) — the inversion of the frequency with which a word occurs in the collection of documents, calculated as: [idf = log(ad / dc)]\n- **tf-idf** - calculated as: [tf-idf = tf * idf]\n- **wltf** - Word rating, calculated as: [wltf = 1 + log(tf * dc)]\n\n### File containing similar letters encountered in different dictionaries\n```\np  р\nc  с\no  о\nt  т\nk  к\ne  е\na  а\nh  н\nx  х\nb  в\nm  м\n...\n```\n\n| Original letter | Separator   | Replacement letter   |\n|-----------------|-------------|----------------------|\n| t               | \\t          | т                    |\n\n### File containing a list of abbreviations\n```\nг\nр\nСША\nул\nруб\nрус\nчел\n...\n```\n\n\u003e All words from this list will be marked as an unknown word **〈abbr〉**.\n\n### File containing a list of domain zones\n```\nru\nsu\ncc\nnet\ncom\norg\ninfo\n...\n```\n\n\u003e For a more accurate definition of the ** 〈url〉 ** token, we recommend adding your own domain zones (all domain zones in the example are already pre-installed).\n\n---\n\n### Python word preprocessing script template\n```python\n# -*- coding: utf-8 -*-\n\ndef init():\n    \"\"\"\n    Initialization Method: Executed once at application startup\n    \"\"\"\n\ndef run(word, context):\n    \"\"\"\n    Processing method: called during word extraction from text\n    @word    proccesed word\n    @context sequence of previous words in form of an array\n    \"\"\"\n    return word\n```\n\n### Python custom word token definition script template\n```python\n# -*- coding: utf-8 -*-\n\ndef init():\n    \"\"\"\n    Initialization Method: Executed once at application startup\n    \"\"\"\n\ndef run(token, word):\n    \"\"\"\n    Processing method: called during word extraction from text\n    @token word token name\n    @word processed word\n    \"\"\"\n    if token and (token == \"\u003cusa\u003e\"):\n        if word and (word.lower() == \"сша\"): return \"ok\"\n    elif token and (token == \"\u003crussia\u003e\"):\n        if word and (word.lower() == \"россия\"): return \"ok\"\n    return \"no\"\n```\n\n### Python stemming script example\n```python\nimport spacy\nimport pymorphy2\n\n# Morphological analyzer\nmorphRu = None\nmorphEn = None\n\ndef init():\n    \"\"\"\n    Initialization Method: Executed once at application startup\n    \"\"\"\n    # Get morphological analyzer\n    global morphRu\n    global morphEn\n    # Activate morphological analyzer for Russian language\n    morphRu = pymorphy2.MorphAnalyzer()\n    # Activate morphological analyzer for English language\n    morphEn = spacy.load('en', disable=['parser', 'ner'])\n\ndef eng(word):\n    \"\"\"\n    English lemmatization method\n    @word word to lemmatize\n    \"\"\"\n    # Get morphological analyzer\n    global morphEn\n    # Get morphological analyzer result\n    words = morphEn(word)\n    # Get lemmatization result\n    word = ''.join([token.lemma_ for token in words]).strip()\n    # If the resulting word is a correct word\n    if word[0] != '-' and word[len(word) - 1] != '-':\n        # Return result\n        return word\n    else:\n        # Return empty string\n        return \"\"\n\ndef rus(word):\n    \"\"\"\n    Russian lemmatization method\n    @word word to lemmatize\n    \"\"\"\n    # Get morphological analyzer\n    global morphRu\n    # If morphological analyzer exists\n    if morphRu != None:\n        # Get morphological analyzer result\n        word = morphRu.parse(word)[0].normal_form\n        # Return analyzer result\n        return word\n    else:\n        # Return empty string\n        return \"\"\n\ndef run(word, lang):\n    \"\"\"\n    Method that runs morphological processing\n    @word word to lemmatize\n    @lang alphabet name for @word\n    \"\"\"\n    # If the word is in Russian\n    if lang == \"ru\":\n        # Return russian lemmatization result\n        return rus(word.lower())\n    # If the word is in English\n    elif lang == \"en\":\n        # Return english lemmatization result\n        return eng(word.lower())\n```\n\n---\n\n### Environment variables\n\n- All arguments can be passed via environment variables. Variables start with the ** ASC _ ** prefix and must be written in uppercase,  other than that, all the variable names correspond to their application arguments.\n- If both application parameters and environment variables were passed, application parameters will have priority.\n\n```bash\n$ export ASC_R-ARPA=./lm.arpa\n\n$ export ASC_R-BIN=./wittenbell-3-single.asc\n```\n\n- Example of parameters in JSON format\n\n```json\n{\n  \"debug\": 1,\n  \"method\": \"spell\",\n  \"spell-verbose\": true,\n  \"asc-split\": true,\n  \"asc-alter\": true,\n  \"asc-esplit\": true,\n  \"asc-rsplit\": true,\n  \"asc-uppers\": true,\n  \"asc-hyphen\": true,\n  \"asc-wordrep\": true,\n  \"r-text\": \"./texts/input.txt\",\n  \"w-text\": \"./texts/output.txt\",\n  \"r-bin\": \"./dict/wittenbell-3-middle.asc\"\n}\n```\n\n---\n\n## Examples\n\n![Example of running the program](https://raw.githubusercontent.com/anyks/asc/master/site/img/screen1.png \"Example of running the program\")\n\n### Information about the binary dictionary\n```bash\n$ ./asc -method info -r-bin ./dict/wittenbell-3-middle.asc\n```\n\n---\n\n### Training process\n```json\n{\n  \"ext\": \"txt\",\n  \"size\": 3,\n  \"alter\": {\"е\":\"ё\"},\n  \"debug\": 1,\n  \"threads\": 0,\n  \"method\": \"train\",\n  \"vprune\": true,\n  \"allow-unk\": true,\n  \"reset-unk\": true,\n  \"confidence\": true,\n  \"interpolate\": true,\n  \"mixed-dicts\": true,\n  \"only-token-words\": true,\n  \"kneserney-modified\": true,\n  \"kneserney-prepares\": true,\n  \"vprune-wltf\": -15.0,\n  \"locale\": \"en_US.UTF-8\",\n  \"smoothing\": \"mkneserney\",\n  \"pilots\": [\"а\",\"у\",\"в\",\"о\",\"с\",\"к\",\"б\",\"и\",\"я\",\"э\",\"a\",\"i\",\"o\",\"e\",\"g\"],\n  \"corpus\": \"./texts/corpus\",\n  \"w-bin\": \"./dictionary/3-middle.asc\",\n  \"w-abbr\": \"./dict/release/lm.abbr\",\n  \"w-vocab\": \"./dict/release/lm.vocab\",\n  \"w-arpa\": \"./dict/release/lm.arpa\",\n  \"abbrs\": \"./texts/abbrs/abbrs.txt\",\n  \"goodwords\": \"./texts/whitelist/words.txt\",\n  \"badwords\": \"./texts/blacklist/words.txt\",\n  \"alters\": \"./texts/alters/yoficator.txt\",\n  \"upwords\": \"./texts/words/names/words\",\n  \"mix-restwords\": \"./texts/similars/letters.txt\",\n  \"alphabet\": \"абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz\",\n  \"bin-code\": \"ru\",\n  \"bin-name\": \"Russian\",\n  \"bin-author\": \"You name\",\n  \"bin-copyright\": \"You company LLC\",\n  \"bin-contacts\": \"site: https://example.com, e-mail: info@example.com\",\n  \"bin-lictype\": \"MIT\",\n  \"bin-lictext\": \"... License text ...\",\n  \"embedding-size\": 28,\n  \"embedding\": {\n      \"а\": 0, \"б\": 1, \"в\": 2, \"г\": 3, \"д\": 4, \"е\": 5,\n      \"ё\": 5, \"ж\": 6, \"з\": 7, \"и\": 8, \"й\": 8, \"к\": 9,\n      \"л\": 10, \"м\": 11, \"н\": 12, \"о\": 0, \"п\": 13, \"р\": 14,\n      \"с\": 15, \"т\": 16, \"у\": 17, \"ф\": 18, \"х\": 19, \"ц\": 20,\n      \"ч\": 21, \"ш\": 21, \"щ\": 21, \"ъ\": 22, \"ы\": 23, \"ь\": 22,\n      \"э\": 5, \"ю\": 24, \"я\": 25, \"\u003c\": 26, \"\u003e\": 26, \"~\": 26,\n      \"-\": 26, \"+\": 26, \"=\": 26, \"*\": 26, \"/\": 26, \":\": 26,\n      \"%\": 26, \"|\": 26, \"^\": 26, \"\u0026\": 26, \"#\": 26, \"'\": 26,\n      \"\\\\\": 26, \"0\": 27, \"1\": 27, \"2\": 27, \"3\": 27, \"4\": 27,\n      \"5\": 27, \"6\": 27, \"7\": 27, \"8\": 27, \"9\": 27, \"a\": 0,\n      \"b\": 2, \"c\": 15, \"d\": 4, \"e\": 5, \"f\": 18, \"g\": 3,\n      \"h\": 12, \"i\": 8, \"j\": 6, \"k\": 9, \"l\": 10, \"m\": 11,\n      \"n\": 12, \"o\": 0, \"p\": 14, \"q\": 13, \"r\": 14, \"s\": 15,\n      \"t\": 16, \"u\": 24, \"v\": 21, \"w\": 22, \"x\": 19, \"y\": 17, \"z\": 7\n  }\n}\n```\n\n```bash\n$ ./asc -r-json ./train.json\n```\n---\n\n### Error correction\n\n**Reading text from file -\u003e correction -\u003e writing corrected text to a new file**\n```bash\n$ ./asc -debug 1 -method spell -spell-verbose -asc-split -asc-alter -asc-esplit -asc-rsplit -asc-uppers -asc-hyphen -asc-wordrep -r-text ./texts/input.txt -w-text ./texts/output.txt -r-bin ./dict/wittenbell-3-middle.asc\n```\n\n**Reading from stream -\u003e correction -\u003e output to stream**\n```bash\n$ echo \"слзы теут на мрозе\" | ./asc -debug 1 -method spell -spell-verbose -asc-split -asc-alter -asc-esplit -asc-rsplit -asc-uppers -asc-hyphen -asc-wordrep -r-bin ./dict/wittenbell-3-middle.asc\n```\n\n**Running in the interactive mode**\n```bash\n$ ./asc -debug 1 -method spell -spell-verbose -asc-split -asc-alter -asc-esplit -asc-rsplit -asc-uppers -asc-hyphen -asc-wordrep -interactive -r-bin ./dict/wittenbell-3-middle.asc\n```\n\n**Working with files using JSON template**\n```json\n{\n  \"debug\": 1,\n  \"method\": \"spell\",\n  \"spell-verbose\": true,\n  \"asc-split\": true,\n  \"asc-alter\": true,\n  \"asc-esplit\": true,\n  \"asc-rsplit\": true,\n  \"asc-uppers\": true,\n  \"asc-hyphen\": true,\n  \"asc-wordrep\": true,\n  \"r-text\": \"./texts/input.txt\",\n  \"w-text\": \"./texts/output.txt\",\n  \"r-bin\": \"./dict/wittenbell-3-middle.asc\"\n}\n```\n\n```bash\n$ ./asc -r-json ./spell.json\n```\n\n* * *\n\n## License\n\n![MIT License](http://opensource.org/trademarks/opensource/OSI-Approved-License-100x137.png \"MIT License\")\n\nThe class is licensed under the [MIT License](http://opensource.org/licenses/MIT):\n\nCopyright © 2020 [Yuriy Lobarev](https://anyks.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n* * *\n\n## Contact Info\n\nIf you have questions regarding the library, I would like to invite you to [open an issue at GitHub](https://github.com/anyks/asc/issues/new/choose). Please describe your request, problem, or question as detailed as possible, and also mention the version of the library you are using as well as the version of your compiler and operating system. Opening an issue at GitHub allows other users and contributors to this library to collaborate.\n\n---\n\n[Yuriy Lobarev](https://anyks.com) \u003cforman@anyks.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyks%2Fasc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanyks%2Fasc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanyks%2Fasc/lists"}