{"id":36985630,"url":"https://github.com/taggedzi/nonwordgen","last_synced_at":"2026-01-13T23:02:52.599Z","repository":{"id":327705471,"uuid":"1104041534","full_name":"taggedzi/nonwordgen","owner":"taggedzi","description":"Generate made-up words, sentences, and paragraphs in 29 languages - a multilingual lorem-ipsum style text generator for writers, developers, and UI mockups.","archived":false,"fork":false,"pushed_at":"2025-12-07T08:13:42.000Z","size":825,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-08T15:33:38.278Z","etag":null,"topics":["content-generation","generator","language-tool","linguistics","lorem-ipsum","multi-language","nlp","nonsense-text","placeholder-text","python","random-text","text-generator"],"latest_commit_sha":null,"homepage":"","language":"Python","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/taggedzi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-25T17:10:00.000Z","updated_at":"2025-12-07T08:13:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/taggedzi/nonwordgen","commit_stats":null,"previous_names":["taggedzi/nonwordgen"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/taggedzi/nonwordgen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taggedzi%2Fnonwordgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taggedzi%2Fnonwordgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taggedzi%2Fnonwordgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taggedzi%2Fnonwordgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taggedzi","download_url":"https://codeload.github.com/taggedzi/nonwordgen/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taggedzi%2Fnonwordgen/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28399667,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["content-generation","generator","language-tool","linguistics","lorem-ipsum","multi-language","nlp","nonsense-text","placeholder-text","python","random-text","text-generator"],"created_at":"2026-01-13T23:02:52.273Z","updated_at":"2026-01-13T23:02:52.593Z","avatar_url":"https://github.com/taggedzi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nonwordgen\n\n\u003e **nonwordgen** - because real words are overrated!\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Identity \u0026 License --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-ff69b4?style=for-the-badge\" /\u003e\n\n  \u003c!-- Platforms --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/OS-Windows-0078D6?logo=windows\u0026style=for-the-badge\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/OS-Linux-FCC624?logo=linux\u0026style=for-the-badge\u0026logoColor=black\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/macOS-Untested-lightgrey?logo=apple\u0026style=for-the-badge\" /\u003e\n\n  \u003c!-- Project State --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Status-Actively%20Perplexing-00cc66?style=for-the-badge\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/v/release/taggedzi/nonwordgen?style=for-the-badge\u0026color=blueviolet\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/downloads/taggedzi/nonwordgen/total?style=for-the-badge\u0026color=orange\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- Tech Stack --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3776ab?style=for-the-badge\u0026logo=python\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Automation-NOX-7e57c2?style=for-the-badge\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/PyInstaller-2e9afe?style=for-the-badge\" /\u003e\n\n  \u003c!-- Quality Assurance --\u003e\n  \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/taggedzi/nonwordgen/ci.yml?style=for-the-badge\u0026label=Tests\u0026color=brightgreen\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/taggedzi/nonwordgen/release.yml?style=for-the-badge\u0026label=Release%20Build\u0026color=purple\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Lint-Ruff%20Wrangled-fc4f30?style=for-the-badge\u0026logo=ruff\u0026logoColor=white\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Typecheck-mypy-1f9aff?style=for-the-badge\" /\u003e\n\n  \u003c!-- Fun --\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Certified%20Fake-100%25%20Non--Words!-ff5722?style=for-the-badge\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Silliness-Maximum-f50057?style=for-the-badge\" /\u003e\n\u003c/p\u003e\n\n\n---\n\n`nonwordgen` is a multilingual text generator that creates **fake words, sentences, and paragraphs** that *look like* they belong to real languages - but aren’t.  \nIt’s ideal for **lorem ipsum–style filler text**, **UI design**, **test data**, **creative writing**, or anywhere you need realistic-looking nonsense.\n\nUnder the hood, it uses a **phonotactic syllable model**, **language plugins**, and **dictionary-based filters** to ensure generated text looks plausible while avoiding real vocabulary.  \nBut using it is easy: pick a language, choose strictness, and generate.\n\n---\n\n## ✨ Features\n\n- ✔️ Generate **nonwords**, **sentences**, and full **paragraphs**  \n- ✔️ Supports **29 languages** with accurate orthography  \n- ✔️ **Plugin-based** architecture for easy language expansion  \n- ✔️ Optional dictionary filtering  \n- ✔️ **GUI**, **CLI**, and **Python API**  \n- ✔️ Works on Windows and Linux\n\n**macOS users:**  \nThe project will probably run on macOS, but I don’t have access to a Mac to test or build for it.  \nIf you're a macOS user and try it out, feedback is appreciated!\n\n---\n\n## 📥 Installation\n\nSince `nonwordgen` is not yet published to PyPI, download it directly from **GitHub Releases**:\n\n➡ **Download the latest wheel or source package:**  \n[nonwordgen Releases](https://github.com/taggedzi/nonwordgen/releases)\n\nInstall using pip (point to your downloaded file):\n\n```bash\n# Install from wheel\npython -m pip install nonwordgen-\u003cversion\u003e-py3-none-any.whl\n\n# Or install from source\npython -m pip install nonwordgen-\u003cversion\u003e.tar.gz\n````\n\nFor development:\n\n```bash\ngit clone https://github.com/taggedzi/nonwordgen.git\ncd nonwordgen\npython -m pip install -e \".[dev]\"\n```\n\nExtras are available if you want GUI or dictionary support during development as well:\n\n```bash\n# GUI support\npython -m pip install \".[gui]\"\n\n# Dictionary / wordfreq support\npython -m pip install \".[dictionaries]\"\n```\n\n---\n\n## 🧩 Library Usage\n\n```python\nfrom nonwordgen import WordGenerator, Strictness\n\ngen = WordGenerator(\n    min_length=5,\n    max_length=9,\n    strictness=Strictness.MEDIUM,\n    language=\"english\",  # default plugin\n)\n\nprint(gen.generate_one())\nprint(gen.generate_many(10))\n```\n\n---\n\n## 🖥️ CLI Usage\n\nWords (English):\n\n```bash\nnonwordgen -n 20 --min-length 4 --max-length 8 --strictness strict\n```\n\nWords (Spanish):\n\n```bash\nnonwordgen -n 20 --language spanish --min-length 4 --max-length 8\n```\n\nSentences:\n\n```bash\nnonwordgen sentences -n 5 --language french --min-words 3 --max-words 8\n```\n\nParagraphs:\n\n```bash\nnonwordgen paragraphs -p 2 --language german --min-sentences 2 --max-sentences 4\n```\n\nLaunch GUI:\n\n```bash\nnonwordgen gui\n```\n\nYou can also launch the GUI directly via the separate entry point:\n\n```bash\nnonwordgen-gui\n```\n\nSelect your language, chose your options and click generate!\n\n![Screenshot](docs/images/nonwords-gen_screenshot.png)\n\n---\n\n## 🌍 Supported Languages\n\n`nonwordgen` includes plugins for:\n\n**english**, **spanish**, **french**, **portuguese**, **indonesian**,\n**swahili**, **german**, **turkish**, **russian**, **vietnamese**,\n**hindi**, **korean**, **italian**, **dutch**, **tagalog**, **romanian**,\n**swedish**, **norwegian**, **danish**, **afrikaans**, **yoruba**,\n**polish**, **czech**, **hungarian**, **greek**, **thai**, **hebrew**,\n**scb**, **malay**\n\nTo inspect programmatically:\n\n```python\nimport nonwordgen\nprint(nonwordgen.available_languages())\n```\n\n---\n\n## 📦 Optional Dependencies\n\nThese are **optional** and must be installed separately if desired:\n\n- `wordfreq` - frequency-based dictionary filtering\n- `PyQt6` - enables the GUI\n\nInstall one or more manually:\n\n```bash\npip install wordfreq\npip install PyQt6\n\n# Or via extras when installing from source / editable:\npython -m pip install \".[dictionaries]\"\npython -m pip install \".[gui]\"\n```\n\n---\n\n## 🛠 Development\n\nInstall dev dependencies and nox:\n\n```bash\npython -m pip install -e \".[dev]\"\npython -m pip install nox\n```\n\nCommon tasks via nox:\n\n```bash\nnox                              # run default sessions (tests + lint)\nnox -s tests                     # run test suite\nnox -s coverage                  # run tests with coverage + coverage.xml\nnox -s lint                      # run Ruff lint checks\nnox -s format                    # auto-fix with Ruff + Black\nnox -s typecheck                 # run mypy\nnox -s spdx                      # run test to confirm spdx license text included\nnox -s spdx -- add               # Add the spdx license text to any file that does not have it.\nnox -s build                     # build GUI release via build_release.py\nnox -s build_package             # build wheel + sdist into dist/\nnox -s build_dist                # Linux-only sdist + wheel build (CI-friendly)\nnox -s build_exe                 # build standalone Windows EXE (no-op on non-Windows)\nnox -s bundle_release            # bundles artifacts/files into a versioned Zip for release\nnox -s publish_release -- 1.2.1  # publishes a release, update changelog, commit, create tags, push to github for release generation\n```\n\nYou can still run `pytest` or `python -m build` directly if you prefer, but the GitHub Actions CI uses the nox sessions above so you can reproduce CI locally with the same commands.\n\nArtifacts from builds appear under `dist/` (wheels/sdists from `build_package`, and the Windows executable from `build` / `build_exe`).\n\n---\n\n## 📤 Release Process (GitHub Only)\n\n1. Update version in `pyproject.toml` (`[project].version`)\n2. Run tests \u0026 build artifacts\n3. Commit → tag → push\n4. Draft a GitHub Release\n\n   - Upload `.whl` and `.tar.gz` files\n   - Add changelog notes\n\nNo PyPI steps required unless you publish there later.\n\n---\n\n## 📄 License\n\nMIT License - see [LICENSE](./LICENSE).\n\n---\n\n## 🤖 AI Disclosure\n\nSome documentation and text were drafted with assistance from OpenAI models and reviewed manually.\n\n---\n\n## 📚 Third-Party Notices\n\n- **PyQt6** - GUI backend\n- **wordfreq** - Apache-2.0 licensed\n\nAll optional extras are installed separately and not bundled by default.\n\n---\n\n## 🤝 Code of Conduct\n\nThis project follows a simple, respectful [Code of Conduct](./CODE_OF_CONDUCT.md).\nBy participating, you agree to uphold these guidelines and help keep the community welcoming and constructive.\n\n---\n\n## 🛡 Security\n\nIf you believe you’ve found a security issue, please review the project’s\n[Security Policy](./SECURITY.md).\n\nThis project is maintained by a single developer with limited availability. I may not always be able to respond quickly, but I take security\nconcerns seriously and appreciate responsible disclosure.\n\n---\n\n## 📜 Changelog\n\nFor a history of changes, see the [Changelog](./CHANGELOG.md).\n\nThe changelog is generated automatically from git tags and commit messages.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaggedzi%2Fnonwordgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaggedzi%2Fnonwordgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaggedzi%2Fnonwordgen/lists"}