Pypinyin trăn

Tôi đã thấy một phần giới thiệu về mô hình Marcow ẩn trên Internet và tôi cảm thấy rằng tôi không thể tuyệt vời nữa. Tôi cũng đã tìm thấy một đầu vàoBlog đầu vào bính âm của Trung Quốc trên Internet. Đối với mã có thể chạy, có thể chạy, Bạn chỉ có thể tìm thấy nhật ký của tin đồn trên internet. Dựa trên khóa đào tạo này, mô hình Marcow ẩn được vẽ. github Địa chỉ. https. //github. com/LiuRoy/Pinyin_Demo

Nguyên tắc của các nguyên tắc ẩn mô hình Marcow

Sao chép khoảng thời gian định nghĩa trên Internet

Mô hình Marcov ẩn (Mô hình Markov ẩn) là một mô hình bảng kê để mô tả một quy trình chứa các quy trình Malcov có chứa các tham số chưa biết. Khó khăn của nó là xác định các tham số của quá trình từ các tham số được quan sát và sau đó sử dụng các tham số này để phân tích thêm

Tham số có thể được quan sát trong phương pháp bắt đầu vào bính âm là bính âm và tham số dừng là các ký tự Trung Quốc tương ứng


viterbi Thuật toán

Tham khảohttps. //zh. wikipedia. org/wiki /Thuật toán Witbi, ý tưởng là lập kế hoạch động, mã đơn giản hơn, vì vậy tôi sẽ không đi sâu vào chi tiết


Giải thích mã

mô hình Định nghĩa

Xem tệp mô hình/bảng. py. Đối với ba hiệu suất của Marcow ẩn, ba bảng dữ liệu được thiết kế để lưu trữ. Ưu điểm này được hiển thị. Ma trận xác thực của các nhân vật Trung Quốc là một trận ma trận rất thưa thớt. Lưu trữ tệp trực tiếp sử dụng một không gian lớn và nó chỉ có thể được đọc trong bộ nhớ cùng một lúc khi tải xuống. Ngoài ra, hoạt động tham gia của cơ sở dữ liệu rất thuận tiện cho việc tính toán kết quả của thuật toán viterbi

Bảng dữ liệu được xác định như sau


Create model

Xem tệp train/main. py, init side in

bắt đầu, ban đầu

mission,init_transition Tương ứng với ma trận xác thực ban đầu trong mô hình Marcow ẩn, ma trận xác định phát xạ, ma trận xác thực truyền và ghi kết quả được tạo vào tệp sqlite. Bộ dữ liệu được sử dụng trong đào tạo là một thư viện trong từ nói lắp, bởi vì không có câu dài đào tạo và kết quả của hoạt động cuối cùng cũng chứng minh rằng nó chỉ có thể được áp dụng cho đầu câu hỏi ngắn


Ban đầu ma trận xác định

Ma trận khởi động bảng kê là tìm ra tất cả các ký tự Trung Quốc xuất hiện ở đầu từ và đếm số lần chúng xuất hiện ở đầu từ. Cuối cùng, sự xác minh của các ký tự Trung Quốc này xuất hiện trong lần đầu tiên của các ký tự dựa trên dữ liệu trên. Specify 0 is 0, not write into the database. Một điều cần chú ý là ngăn chặn tính toán tính toán, bởi vì tính toán càng nhỏ, máy tính càng ít, máy tính không thể so sánh được. Kết quả của các số liệu thống kê như sau

PIC-1

Chuyển ma trận xác định

Mô hình Markov ẩn đơn giản nhất được sử dụng ở đây, nghĩa là sự xuất hiện của mỗi nhân vật Trung Quốc trong một câu chỉ liên quan đến nhân vật Trung Quốc trước đó. Mặc dù đơn giản và lỗi thô, nhưng nó đã có thể giải đáp hầu hết các vấn đề. Too the Statistics system is found bộ sưu tập nhân vật Trung Quốc phía sau mỗi ký tự Trung Quốc trong từ điển và xác định hệ thống thống kê. Bởi vì ma trận xác thực rất lớn, dữ liệu của cơ sở dữ liệu quá chậm và nó có thể được tối ưu hóa thành văn bản hàng loạt để cải thiện hiệu quả đào tạo hiệu quả. The results is as after

PIC-2

Tuổi từ xác định cao nhất của xác định cao nhất sau hình trên, cũng như đáp ứng thói quen hàng ngày


Khởi động ma trận xác thực

Sự phổ biến là đếm các bính âm tương ứng với từng ký tự Trung Quốc và xác định được sử dụng trong các tình huống hàng ngày. > and pu verify output. Các số liệu thống kê ở đây sử dụng mô-đun pypinyin và cụm từ trong từ điển đã được chuyển đổi thành bính âm để thống kê xác thực, nhưng cách phát âm của một số nơi không hoàn toàn chính xác. Các kết quả thống kê như sau

PIC-3

viterbi Việc phát triển khai

File mã input_method/viterbi. py, ở đây sẽ tìm thấy tối đa mười giải pháp tối ưu bộ cục bộ. Lưu ý rằng có mười giải pháp tối ưu cục bộ thay vì mười giải pháp tối ưu toàn cầu, nhưng giải pháp tốt nhất trong số mười giải pháp là giải pháp tối ưu toàn cầu nhất, mã như sau


Kết quả cho thấy

Run input file_method/viterbi. py, chỉ cần hiển thị kết quả đang chạy

PIC-4

Số liệu thống kê.

Từ điển tạo ma trận chuyển đổi để ghi vào cơ sở dữ liệu quá chậm và phải mất gần mười phút để chạy một lần. Dữ liệu ma trận phát xạ không chính xác và luôn có một số ký tự Trung Quốc. bính âm không khớp. Bộ đào tạo quá nhỏ và phương pháp đầu vào được thực hiện không phù hợp với các câu dài

目录

安装

基本拼音

风格转换

严格模式

自定义拼音


python 中提供了汉字转拼音的库,名字叫做 PyPinyin,可以用于汉字注音、排序、检索等等场合,是基于 hotto/pinyin 这个库开发的,一些站点链接如下:

GitHub. https. //github. com/mozillazg/python-bính âm

文档: https. //pypinyin. đọcthedocs. io/zh_CN/thầy/

PyPi: https. //pypi. tổ chức/dự án/pypinyin/

安装

首先就是这个库的安装了,通过 pip 安装即可:

pip3 install pypinyin

安装完成之后导入一下这个库,如果不报错,那就说明安装成功了。

import pypinyin

基本拼音

首先我们进行一下基本的拼音转换,方法非常简单,直接调用 pinyin 方法即可:

from pypinyin import pinyin

print(pinyin('中心'))

运行结果:
[['zhōng'],  ['xīn']]

可以看到结果会是一个二维的列表,每个元素都另外成了一个列表,其中包含了每个字的读音。
那么如果这个词是多音字咋办呢?比如 “朝阳”,它有两个读音,我们拿来试下:

from pypinyin import pinyin

print(pinyin('朝阳'))

运行结果:
[['zhāo'],  ['yáng']]

好吧,它只给出来了一个读音,但是如果我们想要另外一种读音咋办呢?
其实很简单,只需添加 heteronym 参数并设置为 True 就好了,我们试下.

from pypinyin import pinyin

print(pinyin('朝阳',  heteronym=True))

运行结果:
[['zhāo',  'cháo'],  ['yáng']]

OK 了,这下子就显示出来了两个读音了,而且我们也明白了结果为什么是一个二维列表,因为里面的一维的结果可能是多个,比如多音字的情况就是这样。

但这个多少解析起来有点麻烦,很多情况下我们是不需要管多音字的,我们只是用它来转换一下名字而已,而处理上面的二维数组又比较麻烦。

所以有没有一个方法直接给我们一个一维列表呢?有!
我们可以使用 lazy_pinyin 这个方法来生成,尝试一下:

from pypinyin import lazy_pinyin

print(lazy_pinyin('聪明的小兔子'))

运行结果:
['cong',  'ming',  'de',  'xiao',  'tu',  'zi']

这时候观察到得到的是一个列表,并且不再包含音调了。
这里我们就有一个疑问了,为啥 pinyin 方法返回的结果默认是带音调的,而 lazy_pinyin 是不带的,这里面就涉及到一个风格转换的问题了。

风格转换

我们可以对结果进行一些风格转换,比如不带声调风格、标准声调风格、声调在拼音之后、声调在韵母之后、注音风格等等,比如我们想要声调放在拼音后面,可以这么来实现:

from pypinyin import lazy_pinyin,  Style

style  =  Style.TONE3

print(lazy_pinyin('聪明的小兔子',  style=style))

运行结果:
['cong1',  'ming2',  'de',  'xiao3',  'tu4',  'zi']

可以看到运行结果每个拼音后面就多了一个声调,这就是其中的一个风格,叫做 TONE3,其实还有很多风格,下面是我从源码里面找出来的定义:

#: 普通风格,不带声调。如: 中国 -> ``zhong guo``

NORMAL  =  0

#: 标准声调风格,拼音声调在韵母第一个字母上(默认风格)。如: 中国 -> ``zhōng guó``

TONE  =  1

#: 声调风格2,即拼音声调在各个韵母之后,用数字 [1-4] 进行表示。如: 中国 -> ``zho1ng guo2``

TONE2  =  2

#: 声调风格3,即拼音声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> ``zhong1 guo2``

TONE3  =  8

#: 声母风格,只返回各个拼音的声母部分(注:有的拼音没有声母,详见 `#27`_)。如: 中国 -> ``zh g``

INITIALS  =  3

#: 首字母风格,只返回拼音的首字母部分。如: 中国 -> ``z g``

FIRST_LETTER  =  4

#: 韵母风格,只返回各个拼音的韵母部分,不带声调。如: 中国 -> ``ong uo``

FINALS  =  5

#: 标准韵母风格,带声调,声调在韵母第一个字母上。如:中国 -> ``ōng uó``

FINALS_TONE  =  6

#: 韵母风格2,带声调,声调在各个韵母之后,用数字 [1-4] 进行表示。如: 中国 -> ``o1ng uo2``

FINALS_TONE2  =  7

#: 韵母风格3,带声调,声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> ``ong1 uo2``

FINALS_TONE3  =  9

#: 注音风格,带声调,阴平(第一声)不标。如: 中国 -> ``ㄓㄨㄥ ㄍㄨㄛˊ``

BOPOMOFO  =  10

#: 注音风格,仅首字母。如: 中国 -> ``ㄓ ㄍ``

BOPOMOFO_FIRST  =  11

#: 汉语拼音与俄语字母对照风格,声调在各个拼音之后,用数字 [1-4] 进行表示。如: 中国 -> ``чжун1 го2``

CYRILLIC  =  12

#: 汉语拼音与俄语字母对照风格,仅首字母。如: 中国 -> ``ч г``

CYRILLIC_FIRST  =  13

如果你依然在编程的世界里迷茫,
不知道自己的未来规划,
对python感兴趣,
这里推荐一下我的学习交流圈QQ群:895 797 751,
里面都是学习python的,


有了这些,我们就可以轻松地实现风格转换了。
好,再回到原来的问题,为什么 pinyin 的方法默认带声调,而 lazy_pinyin 方法不带声调,答案就是:它们二者使用的默认风格不同,我们看下它的函数定义就知道了:
pinyin 方法的定义如下:

________số 8

这下懂了吧,因为 pinyin 方法默认使用了 TONE 的风格,而 lazy_pinyin 方法默认使用了 NORMAL 的风格,所以就导致二者返回风格不同了。

好了,有了这两个函数的定义,我们再来研究下其他的参数,比如定义里面的 errors 和 strict 参数又怎么用呢?
错误处理

在这里我们先做一个测试,比如我们传入无法转拼音的字,比如:

from pypinyin import lazy_pinyin

print(lazy_pinyin('你好☆☆,我是xxx'))

其中包含了星号两个,还有标点一个,另外还包含了一个 xxx 英文字符,结果会是什么呢?
['ni',  'hao',  '☆☆,',  'wo',  'shi',  'xxx']

可以看到结果中星号和英文字符都作为一个整体并原模原样返回了。

那么这种特殊字符可以单独进行处理吗?当然可以,这里就用到刚才提到的 errors 参数了。

errors 参数是有几种模式的:

下面是 errors 这个参数的源码实现逻辑:

import pypinyin
0

当处理没有拼音的字符的时候,errors 的不同参数会有不同的处理结果,更详细的逻辑可以翻看源码。

好了,下面我们来尝试一下,比如我们想将不能转拼音的字符去掉,则可以这么设置:

import pypinyin
1

如果我们想要自定义处理,比如把 ☆ 转化为 ※ ,则可以这么设置:

import pypinyin
2

如上便是一些相关异常处理的操作,我们可以随心所欲地处理自己想处理的字符了。

严格模式

最后再看下 strict 模式,这个参数用于控制处理声母和韵母时是否严格遵循《汉语拼音方案》 标准。

下面的一些说明来源于官方文档:

当 strict 参数为 True 时根据《汉语拼音方案》 的如下规则处理声母、在韵母相关风格下还原正确的韵母:

  • 21 个声母: b p m f d t n l g k h j q x zh ch sh r z c s ( y, w 不是声母 )

  • i行的韵母,前面没有声母的时候,写成yi(衣),ya(呀),ye(耶),yao(腰),you(忧),yan(烟), yin(因),yang(央),ying(英),yong(雍)。( y 不是声母 )

  • u行的韵母,前面没有声母的时候,写成wu(乌),wa(蛙),wo(窝),wai(歪),wei(威),wan(弯), wen(温),wang(汪),weng(翁)。( w 不是声母 )

  • ü行的韵母,前面没有声母的时候,写成yu(迂),yue(约),yuan(冤),yun(晕);ü上两点省略。 ( 韵母相关风格下还原正确的韵母 ü )

  • ü行的韵跟声母j,q,x拼的时候,写成ju(居),qu(区),xu(虚),ü上两点也省略; 但是跟声母n,l拼的时候,仍然写成nü(女),lü(吕)。( 韵母相关风格下还原正确的韵母 ü )

  • iou,uei,uen前面加声母的时候,写成iu,ui,un。例如niu(牛),gui(归),lun(论)。 ( 韵母相关风格下还原正确的韵母 iou,uei,uen )

当 strict 为 False 时就是不遵守上面的规则来处理声母和韵母, 比如: y , w 会被当做声母,yu(迂) 的韵母就是一般认为的 u 等。

具体差异可以查看源码中 tests/test_standard. py 中的对比结果测试用例。

自定义拼音

如果对库返回的结果不满意,我们还可以自定义自己的拼音库,这里用到的方法就有 load_single_dict 和 load_phrases_dict 方法了。

比如刚才我们看到 “朝阳” 两个字的发音默认返回的是 zhao yang,我们想默认返回 chao yang,那可以这么做:

import pypinyin
3

这里我们自定义了一个词典,然后使用 load_phrases_dict 方法设置了一下就可以了。
运行结果:

import pypinyin
4

这样就可以完成自定义的设置了。
在一些项目里面我们可以自定义很多拼音库,然后加载就可以了。