欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

裝13失敗后,我決定使用Python為生僻字批量注音

系統(tǒng) 1719 0

裝13的冷場

“龍生九子,各不相同…”
囚牛、睚眥、嘲風(fēng)、蒲牢、狻猊、霸下、狴犴、負(fù)屃、螭吻。

都說提筆忘字丟人,可至少還有提筆的機(jī)會(huì)。隨著信息化時(shí)代的普及,原來越多的人成了半文盲。怎么說?電腦前打字敲的一二一,可提起筆來就忘字。從前特別喜歡鋼筆,筆袋里放的凌美、百利、永生、英雄一堆,買的北碳、畢加索、派克、百利金各式牌子的墨水。結(jié)果感覺半年多都沒動(dòng)過這些陳年老貨了。
下午聊天裝13說到龍生九子,本來吹得正歡,結(jié)果朋友問老七?bì àn怎么寫,然后…瞬間懵逼了,這個(gè)13裝的有點(diǎn)冷場啊。
最近項(xiàng)目有些忙,晚上構(gòu)思該寫點(diǎn)什么。想到下午的尷尬,決定發(fā)一篇之前寫的Python為生僻字歌詞注音的文章。

抖音配樂—生僻字

首次聽到生僻字就是從抖音了,隨著生僻字配樂使用的人越來越多,很多人翻唱、模仿甚至有講解成語出處和寓意的段子,可謂百家爭鳴。
但,有一類視頻很不討喜,就是把歌詞用諧音字代替,好讓人一眼認(rèn)識(shí)。
如果是那些哈韓哈日的朋友們,想唱歌但又沒有語言基礎(chǔ),那你配上諧音的字沒毛病。可歌詞中的成語和漢字就是老祖宗傳下來的文化,你卻用諧音字去讓自己容易辨識(shí),不覺得臉紅嗎?
如果不認(rèn)識(shí),你可以查字典,找度娘,然后標(biāo)注上拼音啊!即娛樂又長知識(shí)了。
當(dāng)然有人覺得這樣一個(gè)一個(gè)的查太麻煩,那是因?yàn)椤悴粫?huì)Python啊!
今天,我就來教教你們,怎么把文本內(nèi)容自動(dòng)標(biāo)注拼音。

Python的拼音模塊

Python的模塊庫API,每次進(jìn)去習(xí)慣第一動(dòng)作,就是右鍵翻譯為中文。(好羞愧,個(gè)人太愛國了,所以一直排斥學(xué)英語,好不要臉的借口…)可Python的拼音模塊不需要這么做,因?yàn)樯婕捌匆舻饶K肯定和中文有關(guān)系,文檔自然是中文的嘍。
那么Python的拼音模塊是什么?? pypinyin

  • 特性

    • 根據(jù)詞組智能匹配最正確的拼音。

    • 支持多音字。

    • 簡單的繁體支持, 注音支持。

    • 支持多種不同拼音/注音風(fēng)格。

  • 安裝
    pip install pypinyin

  • 使用示例

            
              >>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心')
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True)  # 啟用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER)  # 設(shè)置拼音風(fēng)格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> pinyin('中心', style=Style.BOPOMOFO)  # 注音風(fēng)格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
>>> pinyin('中心', style=Style.CYRILLIC)  # 俄語字母風(fēng)格
[['чжун1'], ['синь1']]
>>> lazy_pinyin('中心')  # 不考慮多音字的情況
['zhong', 'xin']
# Python 3(Python 2 下把 '中心' 替換為 u'中心' 即可):
            
          

實(shí)現(xiàn)分析

起初想著,既然有了這個(gè)強(qiáng)大的拼音模塊,那么文本批量添加拼音,豈不是分分鐘的事情了嗎?然后,打臉接踵而來!
首先,要實(shí)現(xiàn)文字上一一對應(yīng)的標(biāo)注拼音,每個(gè)字與拼音的長度肯定不同,沒辦法對其。如果要對其,就得將文字進(jìn)行拆分,字與字之間添加間距。有人說簡單啊,每個(gè)字的拼音最多不過6位,那我們使用列表解析式 [i.just(6) for i in line] 不就完了?
聽起來沒毛病,但是…

  • 歌詞也有語氣詞啊,這句Wu 又雙叒叕你直接按照字符串拆開成了什么鬼?

  • 一個(gè)中文在文本中占兩個(gè)字符的長度,如果對齊的話,還需要識(shí)別中文和英文字符!

  • 有效字符的辨識(shí),Wu被認(rèn)為是是個(gè)有效字段,模塊會(huì)對其進(jìn)行合并

    pinyin(‘Wu 又雙叒叕’) —>[[‘Wu ‘], [‘yòu’], [‘shuāng’], [‘ruò’], [‘zhuó’]]

中文識(shí)別

本來考慮使用正則去判斷中文的,因?yàn)榫W(wǎng)上查到正則的匹配中文是 [\u4e00-\u9fa5] ,簡單測試了下,貌似沒毛病
然后…代碼都快寫完了發(fā)現(xiàn)有些生僻字不再這個(gè)范圍內(nèi),我擦!

            
              '\u4e00'<='生'<='\u9fa5'
True
'\u4e00'<='僻'<='\u9fa5'
True
'\u4e00'<='字'<='\u9fa5'
True
'\u4e00'<='?'<='\u9fa5'
False
            
          

解決辦法

針對正則匹配問題,深入去研究,就脫離了學(xué)Python的初衷,即便解決了也收獲甚微,不如換個(gè)思路。
utf-8字符編碼下,一個(gè)中文字符占3個(gè)字節(jié),但是字符的長度僅為1,那么解析中文的方式是否可以變通為:
len(bytes(str,'utf-8) == 3 and len(string) == 1)
關(guān)于文本書寫,我們判斷中文后,如果是漢字str.ljust(5),否則str.ljust(6)不就行了(因?yàn)橐粋€(gè)漢字占兩個(gè)字符長度)。

代碼實(shí)現(xiàn)

            
              # -*- coding: utf-8 -*-
# @Author  : 王翔
# @公眾號(hào)   : 清風(fēng)Python

# @WeChat  : King_Uranus

# @Date    : 2019/9/6 01:33
# Software : PyCharm
# version  :Python 3.7.3
# @File    : TextAddPinyin.py

from pypinyin import pinyin
import re


class ChangePinyin:
    def __init__(self, filename):
        self.file = filename
        self.lyric = self.read_file()
        self.pinyin = []

    def read_file(self):
        with open(self.file, encoding='utf-8') as f:
            return f.readlines()

    def write_file(self):
        with open('New_%s' % self.file, 'w', encoding='utf-8') as f:
            print(self.lyric)
            for line in self.lyric:
                # print(line)
                if line.strip() == '':
                    continue
                _new_line = re.sub(r'\s', '', line)
                # 行內(nèi)容轉(zhuǎn)拼音
                _pinyin = ''.join(map(lambda x: x[0].ljust(6), pinyin(_new_line)))
                # 根據(jù)中英文,將行內(nèi)容進(jìn)行字符與漢字的拆分
                _lyric = self.split_words(_new_line)
                f.write('%s\n%s\n' % (_pinyin, _lyric))

    @staticmethod
    def split_words(words):
        word_list = ""
        tmp = ""
        for string in words:
            if len(bytes(string, 'utf-8')) == 3 and len(string) == 1:
                if tmp != '':
                    word_list += tmp.ljust(6)
                    tmp = ""
                word_list += string.ljust(5)
            else:
                tmp += string
        return word_list


if __name__ == '__main__':
    Main = ChangePinyin('lyric.txt')
    Main.write_file()
            
          

看看最后的實(shí)現(xiàn)效果吧,是不是格式很工整!

裝13失敗后,我決定使用Python為生僻字批量注音_第1張圖片

錄屏軟件為LICEcap

它是一款屏幕錄制工具,支持導(dǎo)出 GIF 動(dòng)畫圖片格式,輕量級、使用簡單,錄制過程中可以隨意改變錄屏范圍。
好了,今天的內(nèi)容就到這里,希望大家喜歡,如果覺得文章有用,記得關(guān)注支持我啊。

The End

OK,今天的內(nèi)容就到這里,如果覺得內(nèi)容對你有所幫助,歡迎點(diǎn)贊。
期待你關(guān)注我的公眾號(hào) 清風(fēng)Python ,如果覺得不錯(cuò),希望能動(dòng)動(dòng)手指轉(zhuǎn)發(fā)給你身邊的朋友們。

作者:清風(fēng)Python


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产一区中文字幕 | 久久一区二区三区四区 | 欧美黑人疯狂性受xxxxx喷水 | 久久久久久综合一区中文字幕 | 亚洲欧美v视色一区二区 | 精品成人A片久久久久久船舶 | 色噜噜色噜噜天天拍一拍 | 一区二区欧美在线 | 草色在线| 国产日韩欧美一区 | 日韩欧美三级在线 | 亚洲一区二区三区中文字幕 | 香蕉国产人午夜视频在线观看 | 日韩字幕无线乱码 | 四虎天海翼 | 色色成人网 | 久草视频网站 | 国产精品久久久久aaaa九色 | 久久香蕉国产线熟妇人妻 | 日本成日本片人免费 | 超碰免费在线观看 | 午夜视频1000 | 亚洲色图第四页 | 欧美video| 久久久久亚洲精品影视 | 日本高清在线中文字幕网 | 色喜亚洲美女沟沟炮交国模 | 欧美日韩精品一区二区在线播放 | 欧美aaaa视频 | 国产精品综合视频 | 女同久久另类99精品国产 | 欧美午夜a级限制福利片 | 日韩色中色 | 超碰在线97国产 | 欧美黄色免费网站 | 日本肥老太成熟 | 56av国产精品久久久久久久 | 欧美亚洲在线视频 | 国产视频在线观看免费 | 欧美日韩一区二区中文字幕视频 | 精品国产理论在线观看不卡 |