vinormx


Namevinormx JSON
Version 1.0.8 PyPI version JSON
download
home_pagehttps://github.com/genievn/vinormx
SummaryAdvanced Vietnamese Text Normalization System - Modular Architecture with Comprehensive Dictionaries and Regex Rules
upload_time2025-09-06 02:07:57
maintainerNone
docs_urlNone
authorNguyen Huu Thanh
requires_python>=3.6
licenseNone
keywords vietnamese text normalization nlp tts speech synthesis modular comprehensive dictionaries regex rules
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Vinorm compatible for Windows 64-bit

Vietnamese Text Normalization System - Pure Python Implementation

## Giới thiệu

Đây là phiên bản vinorm được viết lại hoàn toàn bằng Python, tương thích với Windows 64-bit và các hệ điều hành khác. Phiên bản này giải quyết lỗi **WinError 193** mà nhiều người gặp phải khi sử dụng vinorm gốc trên Windows.

### Tại sao cần phiên bản này?

Vinorm gốc sử dụng một file thực thi C++ được compile cho Linux, không thể chạy trên Windows. Phiên bản này:

- ✅ **100% Pure Python** - không cần file thực thi C++
- ✅ **Cross-platform** - chạy trên Windows, macOS, Linux
- ✅ **Không dependencies** - chỉ sử dụng thư viện chuẩn Python
- ✅ **API tương thích** - drop-in replacement cho vinorm gốc
- ✅ **Performance tốt** - tối ưu hóa cho tốc độ xử lý

## Cài đặt

### Cách 1: Cài đặt trực tiếp từ file

```bash
pip install vinormx
```

### Cách 2: Cài đặt từ source code

1. Download file `vinormx.py`
2. Đặt vào thư mục project của bạn
3. Import và sử dụng:

```python
from vinormx import TTSnorm

text = "Hàm này được phát triển từ 8/2019. Có phải tháng 12/2020 đã có vaccine phòng ngừa Covid-19 xmz ?"
normalized = TTSnorm(text)
print(normalized)
```

## Sử dụng

### Cách sử dụng cơ bản

```python
from vinormx import TTSnorm

# Chuẩn hóa văn bản cơ bản
text = "Tôi có 100 USD và 2.5 triệu VND ngày 25/12/2023"
result = TTSnorm(text)
print(result)
# Output: tôi có một trăm usd và hai phẩy năm triệu vnd ngày hai mười lăm tháng mười hai năm hai nghìn không trăm hai mười ba .
```

### Các tùy chọn nâng cao

```python
# Giữ nguyên dấu câu
TTSnorm(text, punc=True)

# Giữ nguyên chữ hoa
TTSnorm(text, lower=False)

# Xử lý từ không xác định (spell out)
TTSnorm(text, unknown=False)

# Chỉ sử dụng regex (không dùng từ điển)
TTSnorm(text, rule=True)
```

### Ví dụ chi tiết

```python
from vinormx import TTSnorm

test_cases = [
    "Dr. Smith vs Mr. Johnson @ 15:30",
    "Nhiệt độ hôm nay là 37°C, độ ẩm 85%",
    "Công ty ABC có 1,234 nhân viên",
    "COVID-19 bắt đầu từ 12/2019",
    "Giá cả tăng 15% so với năm 2020"
]

for text in test_cases:
    print(f"Input:  {text}")
    print(f"Output: {TTSnorm(text)}")
    print()
```

## Tính năng

### ✅ Chuẩn hóa số

- Số nguyên: `123` → `một trăm hai mười ba`
- Số thập phân: `12.5` → `mười hai phẩy năm`
- Năm: `2023` → `hai nghìn không trăm hai mười ba`

### ✅ Chuẩn hóa ngày tháng

- `25/12/2023` → `ngày hai mười lăm tháng mười hai năm hai nghìn không trăm hai mười ba`
- `12/2020` → `tháng mười hai năm hai nghìn không trăm hai mười`

### ✅ Chuẩn hóa từ viết tắt

- `Dr.` → `bác sĩ`
- `COVID-19` → `covid mười chín`
- `USA` → `hoa kỳ`
- `WHO` → `tổ chức y tế thế giới`

### ✅ Chuẩn hóa ký tự đặc biệt

- `&` → `và`
- `%` → `phần trăm`
- `@` → `a còng`
- `°C` → `độ c`
- `$` → `đô la`

### ✅ Xử lý từ không xác định

- `xmz` → `ích em giét` (spell out từng ký tự)

## So sánh với vinorm gốc

| Tính năng             | Vinorm gốc        | Vinorm X            |
| --------------------- | ----------------- | ------------------- |
| Hỗ trợ Windows 64-bit | ❌ (WinError 193) | ✅                  |
| Dependencies          | C++ executable    | Pure Python         |
| Cross-platform        | ❌                | ✅                  |
| Performance           | Rất nhanh         | Nhanh               |
| API compatibility     | -                 | ✅ 100% tương thích |

## API Reference

### `TTSnorm(text, punc=False, unknown=True, lower=True, rule=False)`

**Parameters:**

- `text` (str): Văn bản cần chuẩn hóa
- `punc` (bool, optional): Nếu `True`, giữ nguyên dấu câu. Default: `False`
- `unknown` (bool, optional): Nếu `True`, giữ nguyên từ không xác định. Default: `True`
- `lower` (bool, optional): Nếu `True`, chuyển về chữ thường. Default: `True`
- `rule` (bool, optional): Nếu `True`, chỉ sử dụng regex. Default: `False`

**Returns:**

- `str`: Văn bản đã được chuẩn hóa

## Troubleshooting

### Lỗi WinError 193 với vinorm gốc

Nếu bạn gặp lỗi này:

```
OSError: [WinError 193] %1 is not a valid Win32 application
```

**Giải pháp:** Sử dụng vinormx này thay thế!

### Migration từ vinorm gốc

```python
# Cũ
from vinorm import TTSnorm

# Mới - chỉ cần thay đổi import
from vinormx import TTSnorm

# API hoàn toàn giống nhau!
```

## Performance

Benchmarks trên Windows 10 64-bit:

| Text length  | Vinorm X |
| ------------ | -------- |
| 100 chars    | ~0.01s   |
| 1,000 chars  | ~0.05s   |
| 10,000 chars | ~0.3s    |

## Requirements

- Python 3.6+
- Windows, macOS, hoặc Linux
- Không cần dependencies ngoài

## Contributing

Contributions welcome! Please feel free to submit a Pull Request.

## License

MIT License - Dựa trên vinorm gốc của [v-nhandt21](https://github.com/v-nhandt21/Vinorm) và [NoahDrisort](https://github.com/NoahDrisort/vinorm_cpp_version).

## Credits

- **Original Vinorm**: [v-nhandt21/Vinorm](https://github.com/v-nhandt21/Vinorm)
- **Original C++ Version**: [NoahDrisort/vinorm_cpp_version](https://github.com/NoahDrisort/vinorm_cpp_version)
- **Authors**: Lê Tấn Đăng Tâm, Đỗ Trí Nhân (AILab, HCMUS)
- **Supervisor**: Prof. Vũ Hải Quân

---

**🎯 Giải pháp hoàn hảo cho lỗi WinError 193 trên Windows!**

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/genievn/vinormx",
    "name": "vinormx",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "vietnamese text normalization nlp tts speech synthesis modular comprehensive dictionaries regex rules",
    "author": "Nguyen Huu Thanh",
    "author_email": "nguyenhuuthanh@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f3/db/a2f0828003b03994e5072f6541e1565236d95b388e18c8870ece9cd46c7b/vinormx-1.0.8.tar.gz",
    "platform": null,
    "description": "# Vinorm compatible for Windows 64-bit\r\n\r\nVietnamese Text Normalization System - Pure Python Implementation\r\n\r\n## Gi\u1edbi thi\u1ec7u\r\n\r\n\u0110\u00e2y l\u00e0 phi\u00ean b\u1ea3n vinorm \u0111\u01b0\u1ee3c vi\u1ebft l\u1ea1i ho\u00e0n to\u00e0n b\u1eb1ng Python, t\u01b0\u01a1ng th\u00edch v\u1edbi Windows 64-bit v\u00e0 c\u00e1c h\u1ec7 \u0111i\u1ec1u h\u00e0nh kh\u00e1c. Phi\u00ean b\u1ea3n n\u00e0y gi\u1ea3i quy\u1ebft l\u1ed7i **WinError 193** m\u00e0 nhi\u1ec1u ng\u01b0\u1eddi g\u1eb7p ph\u1ea3i khi s\u1eed d\u1ee5ng vinorm g\u1ed1c tr\u00ean Windows.\r\n\r\n### T\u1ea1i sao c\u1ea7n phi\u00ean b\u1ea3n n\u00e0y?\r\n\r\nVinorm g\u1ed1c s\u1eed d\u1ee5ng m\u1ed9t file th\u1ef1c thi C++ \u0111\u01b0\u1ee3c compile cho Linux, kh\u00f4ng th\u1ec3 ch\u1ea1y tr\u00ean Windows. Phi\u00ean b\u1ea3n n\u00e0y:\r\n\r\n- \u2705 **100% Pure Python** - kh\u00f4ng c\u1ea7n file th\u1ef1c thi C++\r\n- \u2705 **Cross-platform** - ch\u1ea1y tr\u00ean Windows, macOS, Linux\r\n- \u2705 **Kh\u00f4ng dependencies** - ch\u1ec9 s\u1eed d\u1ee5ng th\u01b0 vi\u1ec7n chu\u1ea9n Python\r\n- \u2705 **API t\u01b0\u01a1ng th\u00edch** - drop-in replacement cho vinorm g\u1ed1c\r\n- \u2705 **Performance t\u1ed1t** - t\u1ed1i \u01b0u h\u00f3a cho t\u1ed1c \u0111\u1ed9 x\u1eed l\u00fd\r\n\r\n## C\u00e0i \u0111\u1eb7t\r\n\r\n### C\u00e1ch 1: C\u00e0i \u0111\u1eb7t tr\u1ef1c ti\u1ebfp t\u1eeb file\r\n\r\n```bash\r\npip install vinormx\r\n```\r\n\r\n### C\u00e1ch 2: C\u00e0i \u0111\u1eb7t t\u1eeb source code\r\n\r\n1. Download file `vinormx.py`\r\n2. \u0110\u1eb7t v\u00e0o th\u01b0 m\u1ee5c project c\u1ee7a b\u1ea1n\r\n3. Import v\u00e0 s\u1eed d\u1ee5ng:\r\n\r\n```python\r\nfrom vinormx import TTSnorm\r\n\r\ntext = \"H\u00e0m n\u00e0y \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n t\u1eeb 8/2019. C\u00f3 ph\u1ea3i th\u00e1ng 12/2020 \u0111\u00e3 c\u00f3 vaccine ph\u00f2ng ng\u1eeba Covid-19 xmz ?\"\r\nnormalized = TTSnorm(text)\r\nprint(normalized)\r\n```\r\n\r\n## S\u1eed d\u1ee5ng\r\n\r\n### C\u00e1ch s\u1eed d\u1ee5ng c\u01a1 b\u1ea3n\r\n\r\n```python\r\nfrom vinormx import TTSnorm\r\n\r\n# Chu\u1ea9n h\u00f3a v\u0103n b\u1ea3n c\u01a1 b\u1ea3n\r\ntext = \"T\u00f4i c\u00f3 100 USD v\u00e0 2.5 tri\u1ec7u VND ng\u00e0y 25/12/2023\"\r\nresult = TTSnorm(text)\r\nprint(result)\r\n# Output: t\u00f4i c\u00f3 m\u1ed9t tr\u0103m usd v\u00e0 hai ph\u1ea9y n\u0103m tri\u1ec7u vnd ng\u00e0y hai m\u01b0\u1eddi l\u0103m th\u00e1ng m\u01b0\u1eddi hai n\u0103m hai ngh\u00ecn kh\u00f4ng tr\u0103m hai m\u01b0\u1eddi ba .\r\n```\r\n\r\n### C\u00e1c t\u00f9y ch\u1ecdn n\u00e2ng cao\r\n\r\n```python\r\n# Gi\u1eef nguy\u00ean d\u1ea5u c\u00e2u\r\nTTSnorm(text, punc=True)\r\n\r\n# Gi\u1eef nguy\u00ean ch\u1eef hoa\r\nTTSnorm(text, lower=False)\r\n\r\n# X\u1eed l\u00fd t\u1eeb kh\u00f4ng x\u00e1c \u0111\u1ecbnh (spell out)\r\nTTSnorm(text, unknown=False)\r\n\r\n# Ch\u1ec9 s\u1eed d\u1ee5ng regex (kh\u00f4ng d\u00f9ng t\u1eeb \u0111i\u1ec3n)\r\nTTSnorm(text, rule=True)\r\n```\r\n\r\n### V\u00ed d\u1ee5 chi ti\u1ebft\r\n\r\n```python\r\nfrom vinormx import TTSnorm\r\n\r\ntest_cases = [\r\n    \"Dr. Smith vs Mr. Johnson @ 15:30\",\r\n    \"Nhi\u1ec7t \u0111\u1ed9 h\u00f4m nay l\u00e0 37\u00b0C, \u0111\u1ed9 \u1ea9m 85%\",\r\n    \"C\u00f4ng ty ABC c\u00f3 1,234 nh\u00e2n vi\u00ean\",\r\n    \"COVID-19 b\u1eaft \u0111\u1ea7u t\u1eeb 12/2019\",\r\n    \"Gi\u00e1 c\u1ea3 t\u0103ng 15% so v\u1edbi n\u0103m 2020\"\r\n]\r\n\r\nfor text in test_cases:\r\n    print(f\"Input:  {text}\")\r\n    print(f\"Output: {TTSnorm(text)}\")\r\n    print()\r\n```\r\n\r\n## T\u00ednh n\u0103ng\r\n\r\n### \u2705 Chu\u1ea9n h\u00f3a s\u1ed1\r\n\r\n- S\u1ed1 nguy\u00ean: `123` \u2192 `m\u1ed9t tr\u0103m hai m\u01b0\u1eddi ba`\r\n- S\u1ed1 th\u1eadp ph\u00e2n: `12.5` \u2192 `m\u01b0\u1eddi hai ph\u1ea9y n\u0103m`\r\n- N\u0103m: `2023` \u2192 `hai ngh\u00ecn kh\u00f4ng tr\u0103m hai m\u01b0\u1eddi ba`\r\n\r\n### \u2705 Chu\u1ea9n h\u00f3a ng\u00e0y th\u00e1ng\r\n\r\n- `25/12/2023` \u2192 `ng\u00e0y hai m\u01b0\u1eddi l\u0103m th\u00e1ng m\u01b0\u1eddi hai n\u0103m hai ngh\u00ecn kh\u00f4ng tr\u0103m hai m\u01b0\u1eddi ba`\r\n- `12/2020` \u2192 `th\u00e1ng m\u01b0\u1eddi hai n\u0103m hai ngh\u00ecn kh\u00f4ng tr\u0103m hai m\u01b0\u1eddi`\r\n\r\n### \u2705 Chu\u1ea9n h\u00f3a t\u1eeb vi\u1ebft t\u1eaft\r\n\r\n- `Dr.` \u2192 `b\u00e1c s\u0129`\r\n- `COVID-19` \u2192 `covid m\u01b0\u1eddi ch\u00edn`\r\n- `USA` \u2192 `hoa k\u1ef3`\r\n- `WHO` \u2192 `t\u1ed5 ch\u1ee9c y t\u1ebf th\u1ebf gi\u1edbi`\r\n\r\n### \u2705 Chu\u1ea9n h\u00f3a k\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t\r\n\r\n- `&` \u2192 `v\u00e0`\r\n- `%` \u2192 `ph\u1ea7n tr\u0103m`\r\n- `@` \u2192 `a c\u00f2ng`\r\n- `\u00b0C` \u2192 `\u0111\u1ed9 c`\r\n- `$` \u2192 `\u0111\u00f4 la`\r\n\r\n### \u2705 X\u1eed l\u00fd t\u1eeb kh\u00f4ng x\u00e1c \u0111\u1ecbnh\r\n\r\n- `xmz` \u2192 `\u00edch em gi\u00e9t` (spell out t\u1eebng k\u00fd t\u1ef1)\r\n\r\n## So s\u00e1nh v\u1edbi vinorm g\u1ed1c\r\n\r\n| T\u00ednh n\u0103ng             | Vinorm g\u1ed1c        | Vinorm X            |\r\n| --------------------- | ----------------- | ------------------- |\r\n| H\u1ed7 tr\u1ee3 Windows 64-bit | \u274c (WinError 193) | \u2705                  |\r\n| Dependencies          | C++ executable    | Pure Python         |\r\n| Cross-platform        | \u274c                | \u2705                  |\r\n| Performance           | R\u1ea5t nhanh         | Nhanh               |\r\n| API compatibility     | -                 | \u2705 100% t\u01b0\u01a1ng th\u00edch |\r\n\r\n## API Reference\r\n\r\n### `TTSnorm(text, punc=False, unknown=True, lower=True, rule=False)`\r\n\r\n**Parameters:**\r\n\r\n- `text` (str): V\u0103n b\u1ea3n c\u1ea7n chu\u1ea9n h\u00f3a\r\n- `punc` (bool, optional): N\u1ebfu `True`, gi\u1eef nguy\u00ean d\u1ea5u c\u00e2u. Default: `False`\r\n- `unknown` (bool, optional): N\u1ebfu `True`, gi\u1eef nguy\u00ean t\u1eeb kh\u00f4ng x\u00e1c \u0111\u1ecbnh. Default: `True`\r\n- `lower` (bool, optional): N\u1ebfu `True`, chuy\u1ec3n v\u1ec1 ch\u1eef th\u01b0\u1eddng. Default: `True`\r\n- `rule` (bool, optional): N\u1ebfu `True`, ch\u1ec9 s\u1eed d\u1ee5ng regex. Default: `False`\r\n\r\n**Returns:**\r\n\r\n- `str`: V\u0103n b\u1ea3n \u0111\u00e3 \u0111\u01b0\u1ee3c chu\u1ea9n h\u00f3a\r\n\r\n## Troubleshooting\r\n\r\n### L\u1ed7i WinError 193 v\u1edbi vinorm g\u1ed1c\r\n\r\nN\u1ebfu b\u1ea1n g\u1eb7p l\u1ed7i n\u00e0y:\r\n\r\n```\r\nOSError: [WinError 193] %1 is not a valid Win32 application\r\n```\r\n\r\n**Gi\u1ea3i ph\u00e1p:** S\u1eed d\u1ee5ng vinormx n\u00e0y thay th\u1ebf!\r\n\r\n### Migration t\u1eeb vinorm g\u1ed1c\r\n\r\n```python\r\n# C\u0169\r\nfrom vinorm import TTSnorm\r\n\r\n# M\u1edbi - ch\u1ec9 c\u1ea7n thay \u0111\u1ed5i import\r\nfrom vinormx import TTSnorm\r\n\r\n# API ho\u00e0n to\u00e0n gi\u1ed1ng nhau!\r\n```\r\n\r\n## Performance\r\n\r\nBenchmarks tr\u00ean Windows 10 64-bit:\r\n\r\n| Text length  | Vinorm X |\r\n| ------------ | -------- |\r\n| 100 chars    | ~0.01s   |\r\n| 1,000 chars  | ~0.05s   |\r\n| 10,000 chars | ~0.3s    |\r\n\r\n## Requirements\r\n\r\n- Python 3.6+\r\n- Windows, macOS, ho\u1eb7c Linux\r\n- Kh\u00f4ng c\u1ea7n dependencies ngo\u00e0i\r\n\r\n## Contributing\r\n\r\nContributions welcome! Please feel free to submit a Pull Request.\r\n\r\n## License\r\n\r\nMIT License - D\u1ef1a tr\u00ean vinorm g\u1ed1c c\u1ee7a [v-nhandt21](https://github.com/v-nhandt21/Vinorm) v\u00e0 [NoahDrisort](https://github.com/NoahDrisort/vinorm_cpp_version).\r\n\r\n## Credits\r\n\r\n- **Original Vinorm**: [v-nhandt21/Vinorm](https://github.com/v-nhandt21/Vinorm)\r\n- **Original C++ Version**: [NoahDrisort/vinorm_cpp_version](https://github.com/NoahDrisort/vinorm_cpp_version)\r\n- **Authors**: L\u00ea T\u1ea5n \u0110\u0103ng T\u00e2m, \u0110\u1ed7 Tr\u00ed Nh\u00e2n (AILab, HCMUS)\r\n- **Supervisor**: Prof. V\u0169 H\u1ea3i Qu\u00e2n\r\n\r\n---\r\n\r\n**\ud83c\udfaf Gi\u1ea3i ph\u00e1p ho\u00e0n h\u1ea3o cho l\u1ed7i WinError 193 tr\u00ean Windows!**\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Advanced Vietnamese Text Normalization System - Modular Architecture with Comprehensive Dictionaries and Regex Rules",
    "version": "1.0.8",
    "project_urls": {
        "Bug Reports": "https://github.com/genievn/vinormx/issues",
        "Homepage": "https://github.com/genievn/vinormx",
        "Original C++ Version": "https://github.com/NoahDrisort/vinorm_cpp_version",
        "Original Vinorm": "https://github.com/v-nhandt21/Vinorm",
        "Source": "https://github.com/genievn/vinormx"
    },
    "split_keywords": [
        "vietnamese",
        "text",
        "normalization",
        "nlp",
        "tts",
        "speech",
        "synthesis",
        "modular",
        "comprehensive",
        "dictionaries",
        "regex",
        "rules"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2ffa3734d13a1a7e864cdca7e9dc5271199b9621aa7dc905546aa16a38996fd1",
                "md5": "78b8ecc7b941aa313062096e74261670",
                "sha256": "f5fabca038070837abe9cee499987c00829cd33f18d3ac77235d40bf298bd2f0"
            },
            "downloads": -1,
            "filename": "vinormx-1.0.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "78b8ecc7b941aa313062096e74261670",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 117989,
            "upload_time": "2025-09-06T02:07:56",
            "upload_time_iso_8601": "2025-09-06T02:07:56.372477Z",
            "url": "https://files.pythonhosted.org/packages/2f/fa/3734d13a1a7e864cdca7e9dc5271199b9621aa7dc905546aa16a38996fd1/vinormx-1.0.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f3dba2f0828003b03994e5072f6541e1565236d95b388e18c8870ece9cd46c7b",
                "md5": "fcc7efed2a854d95f73ebc2b9b8c0366",
                "sha256": "cc36fc27922df59faa440a1afa1ab482a60fc8460d692b6beafa396ef3732f3d"
            },
            "downloads": -1,
            "filename": "vinormx-1.0.8.tar.gz",
            "has_sig": false,
            "md5_digest": "fcc7efed2a854d95f73ebc2b9b8c0366",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 109572,
            "upload_time": "2025-09-06T02:07:57",
            "upload_time_iso_8601": "2025-09-06T02:07:57.991291Z",
            "url": "https://files.pythonhosted.org/packages/f3/db/a2f0828003b03994e5072f6541e1565236d95b388e18c8870ece9cd46c7b/vinormx-1.0.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-06 02:07:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "genievn",
    "github_project": "vinormx",
    "github_not_found": true,
    "lcname": "vinormx"
}
        
Elapsed time: 0.45156s