【Python】xpinyin/Pinyin+中文与拼音相互转换(含音调/声调)/生成中文谐音

 

from xpinyin import Pinyin

if __name__ == '__main__':
    ''' 1 获取汉字对应的拼音(含声调) [tone_marks参数控制 marks-符号;numbers-数字] '''
    # 1.1 声调为符号
    print(Pinyin().get_pinyin("中华人民共和国,今天成立了,和蔼!", tone_marks='marks'))
    # zhōng-huá-rén-mín-gòng-hé-guó-,-jīn-tiān-chéng-lì-le-,-hé-ǎi-!

    # 1.2 声调为数字(1:一声,2:二声,3:三声,4:四声,5:轻声)
    print(Pinyin().get_pinyin("中华人民共和国,今天成立了,和蔼!", tone_marks='numbers'))
    # zhong1-hua2-ren2-min2-gong4-he2-guo2-,-jin1-tian1-cheng2-li4-le5-,-he2-ai3-!

    ''' 2 设置分隔符 [splitter参数控制 splitter默认为'-'] '''
    print(Pinyin().get_pinyin("中华人民共和国,今天成立了,和蔼!", splitter='='))
    # zhong=hua=ren=min=gong=he=guo=,=jin=tian=cheng=li=le=,=he=ai=!

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@Time    :2022/8/2 20:38
@Author  :
@File    :
@Version :1.0
@Function:
"""

from xpinyin import Pinyin
from Pinyin2Hanzi import DefaultDagParams
from Pinyin2Hanzi import dag


def hanzi_to_pinyin(one_str):
    """
    将汉字转化为对应的拼音
    :param one_str:
    :return:
    """
    translator = Pinyin()
    one_kw_pinyin = translator.get_pinyin(one_str, '-').strip()
    listS = one_kw_pinyin.split('-')
    print(f'{one_str} 的拼音是 {listS}')
    return listS


def pinyin_to_hanzi(pinyin, top=5):
    """
    拼音转化为汉字
    汉字存在多意性,所以这里没有一一对应的关系,只能选出概率最高的top
    :param pinyin:
    :param top:
    :return:
    """
    translator = DefaultDagParams()
    result = dag(translator, pinyin, path_num=top, log=True)
    count = 1
    for item in result:
        score = item.score  # 得分
        res = item.path  # 转换结果
        print(f'[参考{str(count).zfill(len(str(top)))}]', score, ''.join([one for one in res]))
        count += 1
    if len(result) > 0:
        return ''.join([one for one in result[0].path])
    else:
        return ''


def start(content, top):
    """
    根据指定文本 生成对应的谐音文本
    :param content: 指定文本(只能是纯中文 不能包含英文、符号、数字等字符)
    :param top: 生成的谐音文本数
    :return:
    """
    one_pinyin = hanzi_to_pinyin(content)
    result = pinyin_to_hanzi(one_pinyin, top=top)
    print(f'\n{content}【AI解析结果为】{result}')


if __name__ == '__main__':
    text = u"重话人民宫贺果"
    start(text, 50)  # 重话人民宫贺果【AI解析结果为】中华人民共和国

 

posted @ 2022-08-02 22:01  淡怀  阅读(1213)  评论(0编辑  收藏  举报