Đầu tiên, trước khi đi vào chi tiết các bài toán xử lý tiếng Việt với Python thì mình muốn trình bày sự khác nhau giữa Python 2 (Đã khai tử) và Python 3 đối với dữ liệu tiếng Việt.
Đối với Python 2
Trong Python 2, encoding mặc định là ASCII. Do đó, khi bạn làm việc với dữ liệu tiếng Việt, bắt buộc bạn phải khai báo encoding UTF-8 cho nó ở đầu file code .py của bạn:
Và đây là một số điều đặc biệt khi xử lý dữ liệu tiếng Việt với Python 2:
>>> txt = "Hiếu"
>>> for c in txt:
... print c
...
H
i
�
�
�
u
>>> len(txt)
6
Ký tự ‘ế’ trong chữ ‘Hiếu’ bao gồm 3 ký tự khác nhau, dẫn đến độ dài của txt là 6. Đó là bởi chuỗi tiếng Việt của chúng ta sử dụng Unicode, trong khi string của Python coi nó là ASCII.
Để làm việc với Unicode trong Python 2, bạn cần làm như sau:
>>> txt = u"Hiếu"
>>> for c in txt:
... print c
...
H
i
ế
u
>>> len(txt)
4
Với Python 3 thì sao?
Sang đến Python 3, encoding mặc định của các file .py là UTF-8. Do đó, bạn chỉ phải khai báo # -*- coding: utf-8 -*- khi bạn không ở trong sự mặc định đó, hoặc nếu các công cụ khác (như IDE hoặc trình soạn thảo văn bản của bạn) cần sử dụng thông tin đó.
Và việc sử dụng tiếng Việt cũng hết sức đơn giản:
$ python3
Python 3.7.3 (default, Apr 24 2020, 18:51:23)
[Clang 11.0.3 (clang-1103.0.32.62)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> txt = "Hiếu"
>>> for c in txt:
... print(c)
...
H
i
ế
u
>>> len(txt)
4