论坛首页 编程语言技术论坛

一个简单的姓名拼音匹配

浏览 8120 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-19   最后修改:2011-01-19
# 一个简单的姓名拼音匹配
#
# 姓名一般是由两三个汉字组成,选其顺序且连续的拼音缩略的组合就算匹配成功。
#
require 'chinese_pinyin'
@name = "成吉思汗"
pinyins = Pinyin.t(@name).split

# 把姓名生成对应的拼音数组
array = []
pinyins.each_with_index do |han, index|
  array[index] = []
  han.size.times {|num| array[index] << han[0..(num - 1)] }
end

as = []
array.size.times do |x|
  sub_array = []

  # 第一趟生成姓名拼音缩略的所有满足顺序且连续的组合
  array.each_with_index do |ele, i|
    ni = i + x
    sub_array << array[i..ni] if array[ni]
  end

  # 第二趟把每个组合各自归并
  sub_array.each do |arr|
    while arr.size > 1
      sub_as = []
      arr[0].each {|a1| arr[1].each {|a2| sub_as << ( a1 + a2 ) } }
      arr[0..1] = [sub_as]
    end
    as << arr
    puts arr.join(' ')
  end

end

as.flatten.join(',')

# Ruby标准库里的abbr.rb是排除两个英文单词的共同缩略,见http://ruby-doc.org/stdlib/libdoc/abbrev/rdoc/classes/Abbrev.html
   发表时间:2011-01-27  
迪达拉哥哥~~~
0 请登录后投票
   发表时间:2011-02-08  
楼上的肯定是火影看多了,签定完毕
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics