# BidNLP
**A Comprehensive Persian (Farsi) Natural Language Processing Library**
BidNLP is a production-ready Python library for Persian text processing, offering a complete suite of NLP tools specifically designed for the unique challenges of Persian language processing.
[](https://github.com/aghabidareh/bidnlp/actions/workflows/ci.yml)
[](https://github.com/aghabidareh/bidnlp/actions/workflows/codeql.yml)
[](https://codecov.io/gh/aghabidareh/bidnlp)
[](https://badge.fury.io/py/bidnlp)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](https://pepy.tech/project/bidnlp)
[](https://github.com/psf/black)
## ✨ Features
### 🔧 Preprocessing (100% Complete)
- **Text Normalization**: Arabic to Persian character conversion, diacritic removal, ZWNJ normalization
- **Text Cleaning**: URL, email, HTML tag removal, emoji handling
- **Number Processing**: Persian ↔ English ↔ Arabic-Indic digit conversion
- **Date Normalization**: Jalali date handling and formatting
- **Punctuation**: Persian and Latin punctuation normalization
### ✂️ Tokenization (100% 100% Complete)
- **Word Tokenizer**: ZWNJ-aware, handles compound words and mixed scripts
- **Sentence Tokenizer**: Smart boundary detection with abbreviation support
- **Character Tokenizer**: Character-level tokenization with diacritic handling
- **Morpheme Tokenizer**: Prefix/suffix detection and morphological analysis
- **Syllable Tokenizer**: Persian syllable segmentation
### 🔍 Stemming & Lemmatization (100% Complete)
- **Stemming**: Conservative suffix removal with minimum stem length
- **Lemmatization**: Dictionary-based lemmatization with irregular form support
- **Arabic Plural Handling**: Special support for Arabic broken plurals
### 📊 Classification (100% Complete)
- **Sentiment Analysis**: Keyword-based with 100+ sentiment keywords and negation handling
- **Text Classification**: Keyword-based multi-class categorization
- **Feature Extraction**: Bag-of-Words, TF-IDF, N-gram extraction
### 🛠️ Utilities (100% Complete)
- **Character Utils**: Persian alphabet, character type detection, diacritic handling
- **Statistics**: Word count, sentence count, lexical diversity, n-gram frequency
- **Stop Words**: 100+ Persian stop words with custom support
- **Validators**: Text quality scoring, normalization checking
- **Metrics**: Precision, Recall, F1, BLEU, edit distance, and more
## 📦 Installation
```bash
pip install bidnlp
```
**From source:**
```bash
git clone https://github.com/aghabidareh/bidnlp.git
cd bidnlp
pip install -e .
```
## 🚀 Quick Start
### Preprocessing
```python
from bidnlp.preprocessing import PersianNormalizer, PersianTextCleaner
# Normalize text
normalizer = PersianNormalizer()
text = normalizer.normalize("كتاب يک") # Converts: کتاب یک
# Clean text
cleaner = PersianTextCleaner(remove_urls=True, remove_emojis=True)
clean_text = cleaner.clean("سلام 😊 https://test.com") # Output: سلام
```
### Tokenization
```python
from bidnlp.tokenization import PersianWordTokenizer, PersianSentenceTokenizer
# Word tokenization
tokenizer = PersianWordTokenizer()
words = tokenizer.tokenize("من به دانشگاه میروم")
# Output: ['من', 'به', 'دانشگاه', 'می', 'روم']
# Sentence tokenization
sent_tokenizer = PersianSentenceTokenizer()
sentences = sent_tokenizer.tokenize("سلام. چطوری؟")
# Output: ['سلام.', 'چطوری؟']
```
### Sentiment Analysis
```python
from bidnlp.classification import PersianSentimentAnalyzer
analyzer = PersianSentimentAnalyzer()
# Simple sentiment
sentiment = analyzer.predict("این کتاب خیلی خوب است")
# Output: 'positive'
# Detailed analysis
result = analyzer.analyze("محصول عالی اما گران است")
# Output: {'sentiment': 'neutral', 'score': 0.0,
# 'positive_words': ['عالی'], 'negative_words': ['گران']}
```
### Text Classification
```python
from bidnlp.classification import KeywordClassifier
classifier = KeywordClassifier()
# Add categories
classifier.add_category('ورزش', {'فوتبال', 'بازیکن', 'تیم'})
classifier.add_category('تکنولوژی', {'کامپیوتر', 'نرمافزار', 'برنامه'})
# Classify
category = classifier.predict("تیم فوتبال برد گرفت")
# Output: 'ورزش'
```
### Text Statistics
```python
from bidnlp.utils import PersianTextStatistics
stats = PersianTextStatistics()
text = "من به دانشگاه میروم. دانشگاه بزرگ است."
statistics = stats.get_statistics(text)
# Output: {
# 'words': 8, 'sentences': 2, 'characters': 35,
# 'average_word_length': 4.38, 'lexical_diversity': 0.875, ...
# }
```
### Stop Words
```python
from bidnlp.utils import PersianStopWords
stopwords = PersianStopWords()
# Remove stop words
text = "من از دانشگاه به خانه می روم"
filtered = stopwords.remove_stopwords(text)
# Output: "دانشگاه خانه می روم"
# Check if word is stop word
is_stop = stopwords.is_stopword('از') # True
```
### Feature Extraction
```python
from bidnlp.classification import TfidfVectorizer, BagOfWords
# TF-IDF
tfidf = TfidfVectorizer(max_features=100)
vectors = tfidf.fit_transform(documents)
# Bag of Words
bow = BagOfWords(max_features=50)
vectors = bow.fit_transform(documents)
```
## 🧪 Testing
```bash
# Run all tests
pytest tests/
# Run specific module tests
pytest tests/preprocessing/ -v
pytest tests/tokenization/ -v
pytest tests/classification/ -v
pytest tests/utils/ -v
# Run with coverage
pytest tests/ --cov=bidnlp
```
## 📊 Project Status
| Module | Status | Tests | Coverage |
|--------|--------|-------|----------|
| Preprocessing | ✅ Complete | 58/58 | 100% |
| Tokenization | ✅ Complete | 64/64 | 100% |
| Classification | ✅ Complete | 46/46 | 100% |
| Utils | ✅ Complete | 117/117 | 100% |
| Stemming | ✅ Complete | 11/11 | 100% |
| Lemmatization | ✅ Complete | 11/11 | 100% |
| **Overall** | **✅ 100%** | **307/307** | **100%** |
## 🎯 Key Features
- **Persian-Specific**: Designed specifically for Persian language challenges
- **ZWNJ Handling**: Proper handling of zero-width non-joiner characters
- **Mixed Script Support**: Handles Persian, Arabic, and English text
- **Production Ready**: 100% test coverage with comprehensive testing
- **Easy to Use**: Simple, intuitive API with extensive documentation
- **Extensible**: Easy to extend and customize for your needs
## 🌟 Use Cases
- **Text Preprocessing**: Clean and normalize Persian text for ML pipelines
- **Sentiment Analysis**: Analyze sentiment in Persian reviews and social media
- **Text Classification**: Categorize Persian documents and news articles
- **Information Extraction**: Extract meaningful information from Persian text
- **Search & Retrieval**: Build Persian search engines with proper tokenization
- **NLP Research**: Foundation for Persian NLP research and experiments
## 🔄 CI/CD & Quality Assurance
BidNLP uses comprehensive automated workflows to ensure code quality and reliability:
### Continuous Integration
- ✅ **Multi-version Testing**: Automated tests across Python 3.7-3.12 on Ubuntu, macOS, and Windows
- ✅ **Code Coverage**: Comprehensive coverage reporting with Codecov integration
- ✅ **Code Quality**: Automated checks with Black, isort, flake8, and mypy
- ✅ **Security Scanning**: Regular security audits with Bandit, Safety, and CodeQL
- ✅ **Dependency Updates**: Automated dependency management with Dependabot
### Release Pipeline
- ✅ **Automated PyPI Publishing**: Seamless releases on version tags
- ✅ **GitHub Releases**: Automatic changelog and artifact generation
- ✅ **Package Validation**: Pre-release checks ensure package integrity
## 🤝 Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
**Quick Start:**
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Make your changes and add tests
4. Ensure all tests pass (`pytest tests/`)
5. Format code (`black . && isort .`)
6. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
7. Push to the branch (`git push origin feature/AmazingFeature`)
8. Open a Pull Request
See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
## 📝 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## 🙏 Acknowledgments
- Thanks to all contributors who have helped build this library
- Inspired by the need for comprehensive Persian NLP tools
- Built with ❤️ for the Persian NLP community
## 📧 Contact
For questions, issues, or suggestions, please open an issue on GitHub.
---
**Made with ❤️ for Persian NLP**
Raw data
{
"_id": null,
"home_page": null,
"name": "bidnlp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "Aghabidareh <aghabidareh@example.com>",
"keywords": "nlp, persian, farsi, natural-language-processing, text-processing, tokenization, preprocessing, stemming, lemmatization, sentiment-analysis, persian-nlp",
"author": null,
"author_email": "Aghabidareh <aghabidareh@example.com>",
"download_url": "https://files.pythonhosted.org/packages/65/00/4083bf00f07e6a4c9d07e3d5dc973576d3c8a4bb445f24c25890c4a46a78/bidnlp-0.1.4.tar.gz",
"platform": null,
"description": "# BidNLP\n\n**A Comprehensive Persian (Farsi) Natural Language Processing Library**\n\nBidNLP is a production-ready Python library for Persian text processing, offering a complete suite of NLP tools specifically designed for the unique challenges of Persian language processing.\n\n[](https://github.com/aghabidareh/bidnlp/actions/workflows/ci.yml)\n[](https://github.com/aghabidareh/bidnlp/actions/workflows/codeql.yml)\n[](https://codecov.io/gh/aghabidareh/bidnlp)\n[](https://badge.fury.io/py/bidnlp)\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n[](https://pepy.tech/project/bidnlp)\n[](https://github.com/psf/black)\n\n## \u2728 Features\n\n### \ud83d\udd27 Preprocessing (100% Complete)\n- **Text Normalization**: Arabic to Persian character conversion, diacritic removal, ZWNJ normalization\n- **Text Cleaning**: URL, email, HTML tag removal, emoji handling\n- **Number Processing**: Persian \u2194 English \u2194 Arabic-Indic digit conversion\n- **Date Normalization**: Jalali date handling and formatting\n- **Punctuation**: Persian and Latin punctuation normalization\n\n### \u2702\ufe0f Tokenization (100% 100% Complete)\n- **Word Tokenizer**: ZWNJ-aware, handles compound words and mixed scripts\n- **Sentence Tokenizer**: Smart boundary detection with abbreviation support\n- **Character Tokenizer**: Character-level tokenization with diacritic handling\n- **Morpheme Tokenizer**: Prefix/suffix detection and morphological analysis\n- **Syllable Tokenizer**: Persian syllable segmentation\n\n### \ud83d\udd0d Stemming & Lemmatization (100% Complete)\n- **Stemming**: Conservative suffix removal with minimum stem length\n- **Lemmatization**: Dictionary-based lemmatization with irregular form support\n- **Arabic Plural Handling**: Special support for Arabic broken plurals\n\n### \ud83d\udcca Classification (100% Complete)\n- **Sentiment Analysis**: Keyword-based with 100+ sentiment keywords and negation handling\n- **Text Classification**: Keyword-based multi-class categorization\n- **Feature Extraction**: Bag-of-Words, TF-IDF, N-gram extraction\n\n### \ud83d\udee0\ufe0f Utilities (100% Complete)\n- **Character Utils**: Persian alphabet, character type detection, diacritic handling\n- **Statistics**: Word count, sentence count, lexical diversity, n-gram frequency\n- **Stop Words**: 100+ Persian stop words with custom support\n- **Validators**: Text quality scoring, normalization checking\n- **Metrics**: Precision, Recall, F1, BLEU, edit distance, and more\n\n## \ud83d\udce6 Installation\n\n```bash\npip install bidnlp\n```\n\n**From source:**\n```bash\ngit clone https://github.com/aghabidareh/bidnlp.git\ncd bidnlp\npip install -e .\n```\n\n## \ud83d\ude80 Quick Start\n\n### Preprocessing\n\n```python\nfrom bidnlp.preprocessing import PersianNormalizer, PersianTextCleaner\n\n# Normalize text\nnormalizer = PersianNormalizer()\ntext = normalizer.normalize(\"\u0643\u062a\u0627\u0628 \u064a\u06a9\") # Converts: \u06a9\u062a\u0627\u0628 \u06cc\u06a9\n\n# Clean text\ncleaner = PersianTextCleaner(remove_urls=True, remove_emojis=True)\nclean_text = cleaner.clean(\"\u0633\u0644\u0627\u0645 \ud83d\ude0a https://test.com\") # Output: \u0633\u0644\u0627\u0645\n```\n\n### Tokenization\n\n```python\nfrom bidnlp.tokenization import PersianWordTokenizer, PersianSentenceTokenizer\n\n# Word tokenization\ntokenizer = PersianWordTokenizer()\nwords = tokenizer.tokenize(\"\u0645\u0646 \u0628\u0647 \u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u0645\u06cc\u200c\u0631\u0648\u0645\")\n# Output: ['\u0645\u0646', '\u0628\u0647', '\u062f\u0627\u0646\u0634\u06af\u0627\u0647', '\u0645\u06cc', '\u0631\u0648\u0645']\n\n# Sentence tokenization\nsent_tokenizer = PersianSentenceTokenizer()\nsentences = sent_tokenizer.tokenize(\"\u0633\u0644\u0627\u0645. \u0686\u0637\u0648\u0631\u06cc\u061f\")\n# Output: ['\u0633\u0644\u0627\u0645.', '\u0686\u0637\u0648\u0631\u06cc\u061f']\n```\n\n### Sentiment Analysis\n\n```python\nfrom bidnlp.classification import PersianSentimentAnalyzer\n\nanalyzer = PersianSentimentAnalyzer()\n\n# Simple sentiment\nsentiment = analyzer.predict(\"\u0627\u06cc\u0646 \u06a9\u062a\u0627\u0628 \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628 \u0627\u0633\u062a\")\n# Output: 'positive'\n\n# Detailed analysis\nresult = analyzer.analyze(\"\u0645\u062d\u0635\u0648\u0644 \u0639\u0627\u0644\u06cc \u0627\u0645\u0627 \u06af\u0631\u0627\u0646 \u0627\u0633\u062a\")\n# Output: {'sentiment': 'neutral', 'score': 0.0,\n# 'positive_words': ['\u0639\u0627\u0644\u06cc'], 'negative_words': ['\u06af\u0631\u0627\u0646']}\n```\n\n### Text Classification\n\n```python\nfrom bidnlp.classification import KeywordClassifier\n\nclassifier = KeywordClassifier()\n\n# Add categories\nclassifier.add_category('\u0648\u0631\u0632\u0634', {'\u0641\u0648\u062a\u0628\u0627\u0644', '\u0628\u0627\u0632\u06cc\u06a9\u0646', '\u062a\u06cc\u0645'})\nclassifier.add_category('\u062a\u06a9\u0646\u0648\u0644\u0648\u0698\u06cc', {'\u06a9\u0627\u0645\u067e\u06cc\u0648\u062a\u0631', '\u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631', '\u0628\u0631\u0646\u0627\u0645\u0647'})\n\n# Classify\ncategory = classifier.predict(\"\u062a\u06cc\u0645 \u0641\u0648\u062a\u0628\u0627\u0644 \u0628\u0631\u062f \u06af\u0631\u0641\u062a\")\n# Output: '\u0648\u0631\u0632\u0634'\n```\n\n### Text Statistics\n\n```python\nfrom bidnlp.utils import PersianTextStatistics\n\nstats = PersianTextStatistics()\ntext = \"\u0645\u0646 \u0628\u0647 \u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u0645\u06cc\u200c\u0631\u0648\u0645. \u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u0628\u0632\u0631\u06af \u0627\u0633\u062a.\"\n\nstatistics = stats.get_statistics(text)\n# Output: {\n# 'words': 8, 'sentences': 2, 'characters': 35,\n# 'average_word_length': 4.38, 'lexical_diversity': 0.875, ...\n# }\n```\n\n### Stop Words\n\n```python\nfrom bidnlp.utils import PersianStopWords\n\nstopwords = PersianStopWords()\n\n# Remove stop words\ntext = \"\u0645\u0646 \u0627\u0632 \u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u0628\u0647 \u062e\u0627\u0646\u0647 \u0645\u06cc \u0631\u0648\u0645\"\nfiltered = stopwords.remove_stopwords(text)\n# Output: \"\u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u062e\u0627\u0646\u0647 \u0645\u06cc \u0631\u0648\u0645\"\n\n# Check if word is stop word\nis_stop = stopwords.is_stopword('\u0627\u0632') # True\n```\n\n### Feature Extraction\n\n```python\nfrom bidnlp.classification import TfidfVectorizer, BagOfWords\n\n# TF-IDF\ntfidf = TfidfVectorizer(max_features=100)\nvectors = tfidf.fit_transform(documents)\n\n# Bag of Words\nbow = BagOfWords(max_features=50)\nvectors = bow.fit_transform(documents)\n```\n\n## \ud83e\uddea Testing\n\n```bash\n# Run all tests\npytest tests/\n\n# Run specific module tests\npytest tests/preprocessing/ -v\npytest tests/tokenization/ -v\npytest tests/classification/ -v\npytest tests/utils/ -v\n\n# Run with coverage\npytest tests/ --cov=bidnlp\n```\n\n## \ud83d\udcca Project Status\n\n| Module | Status | Tests | Coverage |\n|--------|--------|-------|----------|\n| Preprocessing | \u2705 Complete | 58/58 | 100% |\n| Tokenization | \u2705 Complete | 64/64 | 100% |\n| Classification | \u2705 Complete | 46/46 | 100% |\n| Utils | \u2705 Complete | 117/117 | 100% |\n| Stemming | \u2705 Complete | 11/11 | 100% |\n| Lemmatization | \u2705 Complete | 11/11 | 100% |\n| **Overall** | **\u2705 100%** | **307/307** | **100%** |\n\n## \ud83c\udfaf Key Features\n\n- **Persian-Specific**: Designed specifically for Persian language challenges\n- **ZWNJ Handling**: Proper handling of zero-width non-joiner characters\n- **Mixed Script Support**: Handles Persian, Arabic, and English text\n- **Production Ready**: 100% test coverage with comprehensive testing\n- **Easy to Use**: Simple, intuitive API with extensive documentation\n- **Extensible**: Easy to extend and customize for your needs\n\n## \ud83c\udf1f Use Cases\n\n- **Text Preprocessing**: Clean and normalize Persian text for ML pipelines\n- **Sentiment Analysis**: Analyze sentiment in Persian reviews and social media\n- **Text Classification**: Categorize Persian documents and news articles\n- **Information Extraction**: Extract meaningful information from Persian text\n- **Search & Retrieval**: Build Persian search engines with proper tokenization\n- **NLP Research**: Foundation for Persian NLP research and experiments\n\n## \ud83d\udd04 CI/CD & Quality Assurance\n\nBidNLP uses comprehensive automated workflows to ensure code quality and reliability:\n\n### Continuous Integration\n- \u2705 **Multi-version Testing**: Automated tests across Python 3.7-3.12 on Ubuntu, macOS, and Windows\n- \u2705 **Code Coverage**: Comprehensive coverage reporting with Codecov integration\n- \u2705 **Code Quality**: Automated checks with Black, isort, flake8, and mypy\n- \u2705 **Security Scanning**: Regular security audits with Bandit, Safety, and CodeQL\n- \u2705 **Dependency Updates**: Automated dependency management with Dependabot\n\n### Release Pipeline\n- \u2705 **Automated PyPI Publishing**: Seamless releases on version tags\n- \u2705 **GitHub Releases**: Automatic changelog and artifact generation\n- \u2705 **Package Validation**: Pre-release checks ensure package integrity\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n**Quick Start:**\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Make your changes and add tests\n4. Ensure all tests pass (`pytest tests/`)\n5. Format code (`black . && isort .`)\n6. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n7. Push to the branch (`git push origin feature/AmazingFeature`)\n8. Open a Pull Request\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.\n\n## \ud83d\udcdd License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- Thanks to all contributors who have helped build this library\n- Inspired by the need for comprehensive Persian NLP tools\n- Built with \u2764\ufe0f for the Persian NLP community\n\n## \ud83d\udce7 Contact\n\nFor questions, issues, or suggestions, please open an issue on GitHub.\n\n---\n\n**Made with \u2764\ufe0f for Persian NLP**\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Comprehensive Persian (Farsi) Natural Language Processing Library",
"version": "0.1.4",
"project_urls": {
"Changelog": "https://github.com/aghabidareh/bidnlp/releases",
"Documentation": "https://github.com/aghabidareh/bidnlp",
"Homepage": "https://github.com/aghabidareh/bidnlp",
"Issues": "https://github.com/aghabidareh/bidnlp/issues",
"Repository": "https://github.com/aghabidareh/bidnlp"
},
"split_keywords": [
"nlp",
" persian",
" farsi",
" natural-language-processing",
" text-processing",
" tokenization",
" preprocessing",
" stemming",
" lemmatization",
" sentiment-analysis",
" persian-nlp"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c17e342c81c9838249f45576080a88643e7f9c0e0cc6af93cf4a9a29326f568d",
"md5": "a1940b0465505a4387752f72b5f20218",
"sha256": "60b6d47fbe6d0e37ce6f4bb34bb360069ecc40e73e5240ca0d4d99950d20f6c3"
},
"downloads": -1,
"filename": "bidnlp-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a1940b0465505a4387752f72b5f20218",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 52604,
"upload_time": "2025-10-09T09:23:54",
"upload_time_iso_8601": "2025-10-09T09:23:54.806393Z",
"url": "https://files.pythonhosted.org/packages/c1/7e/342c81c9838249f45576080a88643e7f9c0e0cc6af93cf4a9a29326f568d/bidnlp-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "65004083bf00f07e6a4c9d07e3d5dc973576d3c8a4bb445f24c25890c4a46a78",
"md5": "effa9fb92d4ddbf9c0dcdaca09f23a61",
"sha256": "ec70942b3c2257fbe673b6fd965bb3a33f7078770fe3f84de132d00887bef45b"
},
"downloads": -1,
"filename": "bidnlp-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "effa9fb92d4ddbf9c0dcdaca09f23a61",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 92672,
"upload_time": "2025-10-09T09:23:56",
"upload_time_iso_8601": "2025-10-09T09:23:56.386206Z",
"url": "https://files.pythonhosted.org/packages/65/00/4083bf00f07e6a4c9d07e3d5dc973576d3c8a4bb445f24c25890c4a46a78/bidnlp-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-09 09:23:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aghabidareh",
"github_project": "bidnlp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "bidnlp"
}