• 欢迎访问VPS岛网站,国外VPS,国内VPS,国外服务器,国内服务器,服务器主机,测评及优惠码,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站 QQ群

mysql实现汉字换拼音,及汉字转简拼

mysql技术 张marlie 84次浏览 已收录 0个评论

我们实现汉字转拼音,需要结束代码包来完成,但是有个问题 ,针对多音字,会把排列组合的所有方式 全部打印出来.

比如 地区名,都是不需要多音字的,只有一个拼音发音是正确的.

下边 我们来实现 汉字转拼音的方法

— 创建 拼音音节基础表

CREATE TABLE IF NOT EXISTS t_base_pinyin (
pinyin_code varchar(255) CHARACTER SET gbk NOT NULL,
pinyin_id int(11) NOT NULL,
PRIMARY KEY (pinyin_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— 初始化拼音音节

INSERT INTO t_base_pinyin (pinyin_code,pinyin_id)
VALUES (‘a’, 20319),(‘ai’, 20317),(‘an’, 20304),(‘ang’, 20295),(‘ao’, 20292),(‘ba’, 20283),(‘bai’, 20265),(‘ban’, 20257),(‘bang’, 20242),(‘bao’, 20230),(‘bei’, 20051),(‘ben’, 20036),(‘beng’, 20032),(‘bi’, 20026),(‘bian’, 20002),(‘biao’, 19990),(‘bie’, 19986),(‘bin’, 19982),(‘bing’, 19976),(‘bo’, 19805),(‘bu’, 19784),(‘ca’, 19775),(‘cai’, 19774),(‘can’, 19763),(‘cang’, 19756),(‘cao’, 19751),(‘ce’, 19746),(‘ceng’, 19741),(‘cha’, 19739),(‘chai’, 19728),(‘chan’, 19725),(‘chang’, 19715),(‘chao’, 19540),(‘che’, 19531),(‘chen’, 19525),(‘cheng’, 19515),(‘chi’, 19500),(‘chong’, 19484),(‘chou’, 19479),(‘chu’, 19467),(‘chuai’, 19289),(‘chuan’, 19288),(‘chuang’, 19281),
(‘chui’, 19275),(‘chun’, 19270),(‘chuo’, 19263),(‘ci’, 19261),(‘cong’, 19249),(‘cou’, 19243),(‘cu’, 19242),(‘cuan’, 19238),(‘cui’, 19235),(‘cun’, 19227),(‘cuo’, 19224),(‘da’, 19218),(‘dai’, 19212),(‘dan’, 19038),(‘dang’, 19023),(‘dao’, 19018),(‘de’, 19006),(‘deng’, 19003),(‘di’, 18996),(‘dian’, 18977),(‘diao’, 18961),(‘die’, 18952),(‘ding’, 18783),(‘diu’, 18774),(‘dong’, 18773),(‘dou’, 18763),(‘du’, 18756),(‘duan’, 18741),(‘dui’, 18735),(‘dun’, 18731),(‘duo’, 18722),(‘e’, 18710),(‘en’, 18697),(‘er’, 18696),(‘fa’, 18526),(‘fan’, 18518),(‘fang’, 18501),(‘fei’, 18490),(‘fen’, 18478),(‘feng’, 18463),(‘fo’, 18448),(‘fou’, 18447),(‘fu’, 18446),(‘ga’, 18239),(‘gai’, 18237),
(‘gan’, 18231),(‘gang’, 18220),(‘gao’, 18211),(‘ge’, 18201),(‘gei’, 18184),(‘gen’, 18183),(‘geng’, 18181),(‘gong’, 18012),(‘gou’, 17997),(‘gu’, 17988),(‘gua’, 17970),(‘guai’, 17964),(‘guan’, 17961),(‘guang’, 17950),(‘gui’, 17947),(‘gun’, 17931),(‘guo’, 17928),(‘ha’, 17922),(‘hai’, 17759),(‘han’, 17752),(‘hang’, 17733),(‘hao’, 17730),(‘he’, 17721),(‘hei’, 17703),(‘hen’, 17701),(‘heng’, 17697),(‘hong’, 17692),(‘hou’, 17683),(‘hu’, 17676),(‘hua’, 17496),(‘huai’, 17487),(‘huan’, 17482),(‘huang’, 17468),(‘hui’, 17454),(‘hun’, 17433),(‘huo’, 17427),
(‘ji’, 17417),(‘jia’, 17202),(‘jian’, 17185),(‘jiang’, 16983),(‘jiao’, 16970),(‘jie’, 16942),(‘jin’, 16915),(‘jing’, 16733),(‘jiong’, 16708),(‘jiu’, 16706),(‘ju’, 16689),(‘juan’, 16664),(‘jue’, 16657),(‘jun’, 16647),(‘ka’, 16474),(‘kai’, 16470),(‘kan’, 16465),(‘kang’, 16459),(‘kao’, 16452),(‘ke’, 16448),(‘ken’, 16433),(‘keng’, 16429),(‘kong’, 16427),(‘kou’, 16423),(‘ku’, 16419),(‘kua’, 16412),(‘kuai’, 16407),(‘kuan’, 16403),(‘kuang’, 16401),(‘kui’, 16393),(‘kun’, 16220),(‘kuo’, 16216),(‘la’, 16212),(‘lai’, 16205),(‘lan’, 16202),(‘lang’, 16187),(‘lao’, 16180),(‘le’, 16171),(‘lei’, 16169),(‘leng’, 16158),(‘li’, 16155),(‘lia’, 15959),(‘lian’, 15958),(‘liang’, 15944),(‘liao’, 15933),(‘lie’, 15920),(‘lin’, 15915),(‘ling’, 15903),(‘liu’, 15889),(‘long’, 15878),(‘lou’, 15707),(‘lu’, 15701),(‘lv’, 15681),(‘luan’, 15667),(‘lue’, 15661),(‘lun’, 15659),(‘luo’, 15652),(‘ma’, 15640),(‘mai’, 15631),(‘man’, 15625),(‘mang’, 15454),(‘mao’, 15448),(‘me’, 15436),(‘mei’, 15435),(‘men’, 15419),(‘meng’, 15416),(‘mi’, 15408),(‘mian’, 15394),(‘miao’, 15385),(‘mie’, 15377),(‘min’, 15375),(‘ming’, 15369),(‘miu’, 15363),(‘mo’, 15362),(‘mou’, 15183),(‘mu’, 15180),(‘na’, 15165),(‘nai’, 15158),(‘nan’, 15153),(‘nang’, 15150),(‘nao’, 15149),
(‘ne’, 15144),(‘nei’, 15143),(‘nen’, 15141),(‘neng’, 15140),(‘ni’, 15139),(‘nian’, 15128),(‘niang’, 15121),(‘niao’, 15119),(‘nie’, 15117),(‘nin’, 15110),(‘ning’, 15109),(‘niu’, 14941),(‘nong’, 14937),(‘nu’, 14933),(‘nv’, 14930),(‘nuan’, 14929),(‘nue’, 14928),(‘nuo’, 14926),(‘o’, 14922),(‘ou’, 14921),(‘pa’, 14914),(‘pai’, 14908),(‘pan’, 14902),(‘pang’, 14894),(‘pao’, 14889),(‘pei’, 14882),(‘pen’, 14873),(‘peng’, 14871),(‘pi’, 14857),(‘pian’, 14678),(‘piao’, 14674),(‘pie’, 14670),(‘pin’, 14668),(‘ping’, 14663),(‘po’, 14654),(‘pu’, 14645),(‘qi’, 14630),(‘qia’, 14594),(‘qian’, 14429),(‘qiang’, 14407),(‘qiao’, 14399),(‘qie’, 14384),(‘qin’, 14379),(‘qing’, 14368),(‘qiong’, 14355),(‘qiu’, 14353),(‘qu’, 14345),(‘quan’, 14170),(‘que’, 14159),(‘qun’, 14151),(‘ran’, 14149),(‘rang’, 14145),(‘rao’, 14140),(‘re’, 14137),(‘ren’, 14135),(‘reng’, 14125),(‘ri’, 14123),(‘rong’, 14122),(‘rou’, 14112),(‘ru’, 14109),(‘ruan’, 14099),(‘rui’, 14097),(‘run’, 14094),(‘ruo’, 14092),(‘sa’, 14090),(‘sai’, 14087),(‘san’, 14083),(‘sang’, 13917),(‘sao’, 13914),(‘se’, 13910),(‘sen’, 13907),(‘seng’, 13906),(‘sha’, 13905),(‘shai’, 13896),(‘shan’, 13894),(‘shang’, 13878),(‘shao’, 13870),(‘she’, 13859),(‘shen’, 13847),(‘sheng’, 13831),(‘shi’, 13658),(‘shou’, 13611),(‘shu’, 13601),(‘shua’, 13406),(‘shuai’, 13404),(‘shuan’, 13400),(‘shuang’, 13398),(‘shui’, 13395),(‘shun’, 13391),(‘shuo’, 13387),(‘si’, 13383),(‘song’, 13367),(‘sou’, 13359),(‘su’, 13356),(‘suan’, 13343),(‘sui’, 13340),(‘sun’, 13329),(‘suo’, 13326),(‘ta’, 13318),(‘tai’, 13147),(‘tan’, 13138),(‘tang’, 13120),(‘tao’, 13107),(‘te’, 13096),(‘teng’, 13095),(‘ti’, 13091),(‘tian’, 13076),(‘tiao’, 13068),(‘tie’, 13063),(‘ting’, 13060),(‘tong’, 12888),(‘tou’, 12875),(‘tu’, 12871),(‘tuan’, 12860) ,(‘tui’, 12858),(‘tun’, 12852),(‘tuo’, 12849),(‘wa’, 12838),(‘wai’, 12831),(‘wan’, 12829),(‘wang’, 12812),(‘wei’, 12802),(‘wen’, 12607),(‘weng’, 12597),(‘wo’, 12594),(‘wu’, 12585),(‘xi’, 12556),(‘xia’, 12359),(‘xian’, 12346),(‘xiang’, 12320),(‘xiao’, 12300),(‘xie’, 12120),(‘xin’, 12099),(‘xing’, 12089),(‘xiong’, 12074),(‘xiu’, 12067),(‘xu’, 12058),(‘xuan’, 12039),(‘xue’, 11867),(‘xun’, 11861),(‘ya’, 11847),(‘yan’, 11831),(‘yang’, 11798),(‘yao’, 11781),(‘ye’, 11604),(‘yi’, 11589),(‘yin’, 11536),(‘ying’, 11358),(‘yo’, 11340),(‘yong’, 11339),(‘you’, 11324),(‘yu’, 11303),(‘yuan’, 11097),(‘yue’, 11077),(‘yun’, 11067),(‘za’, 11055),(‘zai’, 11052),(‘zan’, 11045),(‘zang’, 11041),(‘zao’, 11038),(‘ze’, 11024),(‘zei’, 11020),(‘zen’, 11019),(‘zeng’, 11018),(‘zha’, 11014),(‘zhai’, 10838),(‘zhan’, 10832),(‘zhang’, 10815),(‘zhao’, 10800),(‘zhe’, 10790),(‘zhen’, 10780),(‘zheng’, 10764),(‘zhi’, 10587),(‘zhong’, 10544),(‘zhou’, 10533),(‘zhu’, 10519),(‘zhua’, 10331),(‘zhuai’, 10329),(‘zhuan’, 10328),(‘zhuang’, 10322),(‘zhui’, 10315),(‘zhun’, 10309),(‘zhuo’, 10307),(‘zi’, 10296),(‘zong’, 10281),(‘zou’, 10274),(‘zu’, 10270),(‘zuan’, 10262),(‘zui’, 10260),(‘zun’, 10256),(‘zuo’, 10254);

— 创建转换拼音函数
SET GLOBAL log_bin_trust_function_creators=ON;
DROP FUNCTION IF EXISTS to_pinyin;
DELIMITER $
CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
DECLARE mycode INT;
DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
DECLARE lcode INT;

DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
DECLARE rcode INT;

DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
DECLARE lp INT;

SET mycode = 0;
SET lp = 1;

SET NAME = HEX(NAME);

WHILE lp < LENGTH(NAME) DO

    SET tmp_lcode = SUBSTRING(NAME, lp, 2);
    SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED);
    SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
    SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED);
    IF lcode > 128 THEN
        SET mycode =65536 - lcode * 256 - rcode ;
        SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
        SET lp = lp + 4;
    ELSE
        SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
        SET lp = lp + 2;
    END IF;
END WHILE;
RETURN LOWER(mypy);

END;
$
DELIMITER ;

— 建立汉字转换简拼函数
SET GLOBAL log_bin_trust_function_creators=ON;
DROP FUNCTION IF EXISTS to_jianpin;
DELIMITER $
CREATE FUNCTION to_jianpin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
DECLARE mycode INT;
DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
DECLARE lcode INT;

DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
DECLARE rcode INT;

DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
DECLARE lp INT;

SET mycode = 0;
SET lp = 1;

SET NAME = HEX(NAME);

WHILE lp < LENGTH(NAME) DO

    SET tmp_lcode = SUBSTRING(NAME, lp, 2);
    SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED);
    SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
    SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED);
    IF lcode > 128 THEN
        SET mycode =65536 - lcode * 256 - rcode ;
        SELECT CONCAT(mypy,CASE WHEN pin_yin_ REGEXP '^sh|^ch|^zh' THEN SUBSTR(pin_yin_,1,2) ELSE SUBSTR(pin_yin_,1,1) END ) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
        SET lp = lp + 4;
    ELSE
        SET mypy = CONCAT(mypy,CASE WHEN CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)) REGEXP '^sh|^ch|^zh'
                                 then  SUBSTR(CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)),1,2)
                                 ELSE SUBSTR(CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)),1,1) end);
        SET lp = lp + 2;
    END IF;
END WHILE;
RETURN LOWER(mypy);

END;
$
DELIMITER ;

— 实验:
mysql实现汉字换拼音,及汉字转简拼


VPS岛 的文章和资源来自互联网,仅作为参考资料,如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。丨 转载请注明mysql实现汉字换拼音,及汉字转简拼
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址