Python bính âm sang ký tự Trung Quốc

Python 3 (trong Python 2, thay 'center' bằng u'center')

>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心')  # or pinyin(['中心']),参数值为列表时表示输入的是已分词后的数据
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True)  # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER)  # 设置拼音风格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> pinyin('中心', style=Style.TONE3, heteronym=True)
[['zhong1', 'zhong4'], ['xin1']]
>>> pinyin('中心', style=Style.BOPOMOFO)  # 注音风格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
>>> lazy_pinyin('威妥玛拼音', style=Style.WADEGILES)
['wei', "t'o", 'ma', "p'in", 'yin']
>>> lazy_pinyin('中心')  # 不考虑多音字的情况
['zhong', 'xin']
>>> lazy_pinyin('战略', v_to_u=True)  # 不使用 v 表示 ü
['zhan', 'lüe']
# 使用 5 标识轻声
>>> lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True)
['yi1', 'shang5']
# 变调  nǐ hǎo -> ní hǎo
>>> lazy_pinyin('你好', style=Style.TONE2, tone_sandhi=True)
['ni2', 'ha3o']

Các biện pháp phòng ngừa :

  • Theo mặc định, kết quả bính âm sẽ không cho biết âm cuối nào là âm mềm và âm cuối mềm không có âm hoặc nhận dạng số (bạn có thể sử dụng tham số neutral_tone_with_ five=True để bật và sử dụng 5 để xác định âm mềm).

  • Theo mặc định, kết quả trong kiểu bính âm không liên quan đến thanh điệu sẽ sử dụng v để biểu thị ü (bạn có thể sử dụng ü thay vì v thông qua tham số v_to_u=True).

  • Theo mặc định, các ký tự không có bính âm sẽ được xuất ra như cũ (xem phương pháp tùy chỉnh các ký tự không có bính âm).

  • Bính âm của um không phải là en như hầu hết mọi người nghĩ, và có những bính âm không có chữ cái đầu cũng không có chữ cuối. Hãy xem phần giải thích trong phần Câu hỏi thường gặp bên dưới để biết thêm chi tiết.

Công cụ dòng lệnh:

$ pypinyin 音乐
yīn yuè
$ pypinyin -h

Gần đây mình gặp sự cố, nhiều file trong dự án là một số tài liệu có tên tiếng Trung do mình tiếp quản, dẫn đến khi triển khai tên file đều bị cắt xén khiến dự án không chạy bình thường được.

tổng quát

Python cung cấp một thư viện để chuyển đổi các ký tự tiếng Trung sang bính âm, tên là PyPinyin, có thể được sử dụng cho ký hiệu ngữ âm tiếng Trung, sắp xếp, truy xuất, v.v. Nó được phát triển dựa trên thư viện hotto/pinyin. Một số liên kết đến các trang web như sau :

  • GitHub. https. //github. com/mozillazg/python-bính âm
  • Tài liệu: https. //pypinyin. đọcthedocs. io/zh_CN/master/
  • PyPi: https. //pypi. tổ chức/dự án/pypinyin/

Nó có một số đặc điểm:

  • Ghép thông minh bính âm chính xác nhất theo cụm từ.
  • Hỗ trợ ký tự đa âm.
  • Hỗ trợ tiếng Trung phồn thể đơn giản, hỗ trợ phiên âm.
  • Hỗ trợ nhiều kiểu bính âm/zhuyin khác nhau.

Không thể chờ đợi?

Cài đặt

Đầu tiên là cài đặt thư viện này, có thể cài đặt thông qua pip:

1
pip3 install pypinyin

Sau khi cài đặt xong thì import thư viện này vào, nếu không báo lỗi nghĩa là cài đặt thành công.

1
\>>> import pypinyin

Chà, tiếp theo hãy xem xét các chức năng cụ thể của nó.

bính âm cơ bản

Trước hết, hãy thực hiện chuyển đổi bính âm cơ bản, phương pháp này rất đơn giản, chỉ cần gọi trực tiếp phương thức bính âm:

1
2
from pypinyin import pinyin
print(pinyin('中心'))

kết quả hoạt động:

1
[['zhōng'], ['xīn']]

Có thể thấy rằng kết quả sẽ là một danh sách hai chiều và mỗi phần tử sẽ trở thành một danh sách khác chứa cách phát âm của từng từ.

1
2
from pypinyin import pinyin
print(pinyin('朝阳'))

kết quả hoạt động:

1
pip3 install pypinyin
1

Chà, nó chỉ cung cấp một cách phát âm, nhưng nếu chúng ta muốn cách phát âm khác thì sao?

1
2
pip3 install pypinyin
3

kết quả hoạt động:

1
pip3 install pypinyin
5

OK, bây giờ hai cách phát âm được hiển thị và chúng tôi cũng hiểu tại sao kết quả là danh sách hai chiều, vì có thể có nhiều kết quả một chiều, chẳng hạn như trường hợp các ký tự đa âm.

1
2
pip3 install pypinyin
7

kết quả hoạt động:

1
pip3 install pypinyin
9

Tại thời điểm này, hãy quan sát rằng những gì bạn nhận được là một danh sách và nó không còn chứa các âm nữa.

thay đổi phong cách

Chúng tôi có thể thực hiện một số chuyển đổi kiểu trên kết quả, chẳng hạn như không có kiểu âm, kiểu âm tiêu chuẩn, âm sau bính âm, âm sau từ cuối, kiểu ngữ âm, v.v. Ví dụ: nếu chúng ta muốn đặt âm sau bính âm, chúng ta có thể thực hiện điều này :

1
0
1
1

kết quả hoạt động:

1
1
3

Bạn có thể thấy rằng có một âm bổ sung sau mỗi bính âm trong kết quả đang chạy. Đây là một trong những kiểu, được gọi là TONE3. Trên thực tế, có nhiều kiểu khác. Sau đây là định nghĩa tôi tìm thấy từ mã nguồn:

1
4_______2_______5

Với những thứ này, chúng ta có thể dễ dàng thực hiện chuyển kiểu.

1
1
7

Phương thức lazy_pinyin được định nghĩa như sau:

1
1
9

Bây giờ tôi đã hiểu, bởi vì phương thức bính âm sử dụng kiểu TONE theo mặc định và phương thức lazy_pinyin sử dụng kiểu BÌNH THƯỜNG theo mặc định, do đó, kiểu trả về của hai phương thức này là khác nhau.

xử lý lỗi

Ở đây chúng tôi làm một bài kiểm tra trước, ví dụ chúng tôi chuyển những từ không thể chuyển đổi thành bính âm, chẳng hạn như:

1
2
\>>> import pypinyin
1

Nó chứa hai dấu hoa thị, một dấu chấm câu và một ký tự tiếng Anh xxx. Kết quả sẽ là gì?

1
\>>> import pypinyin
3

Có thể thấy rằng các dấu hoa thị và ký tự tiếng Anh trong kết quả được trả về dưới dạng tổng thể.

  • mặc định: hành vi mặc định, không xử lý, nhật ký được trả về như hiện tại
  • bỏ qua: Bỏ qua các ký tự và ném chúng đi trực tiếp
  • thay thế: thay thế trực tiếp bằng mã hóa unicode loại bỏ
    from pypinyin import pinyin
    print(pinyin('中心'))
    2
  • đối tượng có thể gọi được: Khi một đối tượng có thể gọi được truyền vào, phương thức xử lý có thể được tùy chỉnh.

Sau đây là logic triển khai mã nguồn của tham số lỗi:

\>>> import pypinyin
4_______5_______5

Khi xử lý các ký tự không có bính âm, các tham số lỗi khác nhau sẽ có kết quả xử lý khác nhau, để biết logic chi tiết hơn, bạn có thể tham khảo mã nguồn.

1
2
\>>> import pypinyin
7

kết quả hoạt động:

1
\>>> import pypinyin
9

Nếu chúng tôi muốn tùy chỉnh quá trình xử lý, chẳng hạn như chuyển đổi

from pypinyin import pinyin
print(pinyin('中心'))
3 thành
from pypinyin import pinyin
print(pinyin('中心'))
4, chúng tôi có thể đặt nó như thế này:

1
1
2
1

kết quả hoạt động:

1
1
2
3

Trên đây là một số thao tác liên quan đến xử lý ngoại lệ, chúng ta có thể xử lý các ký tự mà chúng ta muốn xử lý theo ý muốn.

chế độ nghiêm ngặt

Cuối cùng, hãy xem chế độ nghiêm ngặt. Tham số này được sử dụng để kiểm soát việc có tuân thủ nghiêm ngặt tiêu chuẩn "Lược đồ bính âm Trung Quốc" khi xử lý hay không chữ cái đầu và chữ cái cuối cùng. 《汉语拼音方案》 的如下规则处理声母、在韵母相关风格下还原正确的韵母:

  • 21 chữ cái đầu:
    from pypinyin import pinyin
    print(pinyin('中心'))
    5 (y, w không phải là chữ cái đầu)
  • Chữ cuối cùng và cuối cùng của dòng i, khi không có phụ âm đầu ở phía trước, được viết là yi (quần áo), ya (à), ye (ye), yao (eo), bạn (lo lắng), yan (khói), yin (do), yang (trung tâm), ying (Anh), yong (Yong).
  • Khi không có phụ âm đầu trước nguyên âm của dòng u, nó được viết là wu (wu), wa (ếch), wo (wort), wai (quanh co), wei (wei), wan (cong), wen (ấm), wang (wang), weng (Weng).
  • Khi không có phụ âm đầu trước âm cuối của dòng ü, nó được viết là yu (bùng binh), yue (về), nguyên (bất công), và yun (chóng mặt); hai dấu chấm trên ü được bỏ qua.
  • Khi vần ü được đánh vần bằng các chữ cái đầu j, q, x, nó được viết là ju (ju), qu (quận), xu (rỗng), và hai điểm trên ü cũng bị lược bỏ; nhưng khi nó được đánh vần bằng các chữ cái đầu n, l vẫn viết là nü (nữ), lü (lư).
  • Khi các chữ cái đầu được thêm vào trước iou, uei, uen, chúng được viết là iu, ui, un.

Khi nghiêm ngặt là Sai, điều đó có nghĩa là các quy tắc trên không được tuân theo để xử lý chữ cái đầu và chữ cái cuối cùng. Ví dụ:

from pypinyin import pinyin
print(pinyin('中心'))
6, _______7_______7 sẽ được coi là chữ cái đầu và chữ cái cuối cùng của yu (đường vòng) thường được coi là
from pypinyin import pinyin
print(pinyin('中心'))
2 , vân vân. . py tests/test_standard.py trường hợp thử nghiệm kết quả so sánh.

bính âm tùy chỉnh

Nếu bạn không hài lòng với kết quả mà thư viện trả về, chúng ta cũng có thể tùy chỉnh thư viện bính âm của riêng mình. Các phương thức được sử dụng ở đây bao gồm các phương thức load_single_dict và load_phrase_dict.