[perl]字符串转拼音首字母(支持多音字)

实现的思路是,查表找到该字的所有读音,然后取首字母.

代码:

while (<DATA>) {
  chomp;
  my ($head, $all) = /^(.{3})(.*)$/;
  $all =~ s/^\s+//;

  ### 只保留无音标号的首字母
  sub toshorter {
    my $str = $_[0];

    $str =~ s/ā|á|ǎ|à/a/g;
    $str =~ s/ē|é|ě|è/e/g;
    $str =~ s/ō|ó|ǒ|ò/o/g;

    $str =~ s/^([a-z]).*$/\1/;

    return $str;
  };

  my @tmp;

  for (split ‘,‘, $all) {
    push @tmp, toshorter($_);
  }

  $all = join ‘,‘, @tmp;

  ###

  $pytable{$head} = $all;
}

sub getheadstr {
  my @str = $_[0] =~ /.{3}/g;
  my @res;

  sub loop {
    my ($no, $head) = @_;

    for (split ‘,‘, $pytable{$str[$no]}) {
      if ($no == $#str) {
        push @res, $head . ‘‘ . $_;
      } else {
        loop($no + 1, $head . ‘‘ . $_);
      }
    }
  }

  loop(0, "");

  return join ‘ ‘, grep { ++$count{ $_ } < 2; } @res;
}

print getheadstr("乐筠");

__DATA__
此处数据为我的上一篇博文的内容,省略

数据在此

时间: 2024-08-13 22:30:42

[perl]字符串转拼音首字母(支持多音字)的相关文章

MySQL通过函数获取字符串汉字拼音首字母大写字符串

DELIMITER $$ DROP FUNCTION IF EXISTS `Fun_GetPY`$$ CREATE FUNCTION `HIS`.`Fun_GetPY` (in_string VARCHAR(21845)) RETURNS VARCHAR(21845) CHARSET utf8 BEGIN #截取字符串,每次做截取后的字符串存放在该变量中,初始为函数参数in_string值 DECLARE tmp_str VARCHAR(21845) CHARSET gbk DEFAULT ''

js汉语转拼音(全拼、首字母、拼音首字母)

新建js文件first_alphabet.js 1 // JavaScript Document 2 // 汉字拼音首字母列表 本列表包含了20902个汉字,用于配合 ToChineseSpell 3 //函数使用,本表收录的字符的Unicode编码范围为19968至40869, XDesigner 整理 4 var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSC" + 5 "DQLDYLYBSSJGYZZJJFKCC

按拼音首字母排序

<?php $temp = array(); // 按拼音首字母排序 foreach($res as $key=>$val){ $index = $this->sortByPinyin($val['note_name']); $temp[$index][] = $val; //先用中间变量数组,根据字母A B C..装着集合在一起的 } $list = array(); foreach($temp as $k=>$v){ $list[$k]['index'] = $k; $list

【Solr】 solr对拼音搜索和拼音首字母搜索的支持

问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段.合并的一个字段.  (拼音和拼音首字母,可以通过pinyin4j.jar.将想要进行拼音搜索的字段进行拼音转换.) 2.对输入的参数判断是否是拼音,(可以通过将传人的值转换为 utf-8 形式,如果转换后的字符串长度大于原来的字符串的长度,那么就不是拼音.否则就进行拼

奔五的人学iOS:用swift实现获取拼音首字母,支持取一句话中每字拼音首字母

在最近一项目中,遇到获取拼音首字母的问题,查找了一下网上的方法,没有找到合适好用的,于是自己研究了一下,写了以下方法,欢迎交流,希望对各位有帮助. // // PYFirst.swift // 获取拼音首字母,支持取一句话中每字拼音首字母 // Created by 周蜜([email protected]) on 2015/6/1(儿童节). // Copyright (c) 2015年 www.miw.cn. All rights reserved. // import Foundation

获取整条字符串所有汉字拼音首字母的函数

不错的函数 拿来用用 function pinyin_long($zh){ //获取整条字符串所有汉字拼音首字母 $zh=gainChinese($zh,100);//提取中文 $ret = ""; $s1 = iconv("UTF-8","gb2312", $zh); $s2 = iconv("gb2312","UTF-8", $s1); if($s2 == $zh){$zh = $s1;} for($i

JS获取中文拼音首字母,并通过拼音首字母高速查找页面内的中文内容

实现效果: 图一: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVzdGNzX2Ru/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" /> 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字.所以alert对话框中显示的是多种读音的组合. 怎样实现? 怎样实现通过拼音首字母高速查找页面内的中文内容呢? 过程原

JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容

实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的中文内容呢? 过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系:然后监听键盘事件,当用户按下键盘时,根据键值得到按下的是哪个字母,然后遍历索引中是否存在相同的拼音首字母: 这里还实现了根据字母组合来查找的功能,原理是这样的:当用户按键时,

java获取汉字拼音首字母 --转载

在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @date 2004-02-19 注:只支持GB2312字符集中的汉字 */ public final class ChineseCharToEn { priv