近日给兄弟公司编写一个HR管理软件,其中需要用到这样一个功能:当用户在窗口中输入员工姓名时,能够自动取出姓名中的拼音首字母,作为"助记码",以便用于后续的查询。

尝试了几种不同的方案以后,最终参考水木社区中的Roy兄提出的方案,用Python+Sqlite的方式来完成此项工作。

软件环境如下:

Python 3.2.2

PyQt 4.9.1

Sqlite 3

在文件头部需先导入sqlite3:

import sqlite3

 

然后来看getFirstLetter段代码:

   1:      def getFirstLetter(self, text):
   2:          pinyinlist=[]
   3:          for i in range(len(text)):
   4:              hanziSql = 'select pinyin from hanzi where hanzi = "'\
   5:                              + text[i] + '"'
   6:              pinyinlist.append([])
   7:              result = self.execSql(hanziSql)
   8:              for pinyin in result:                    
   9:                  pinyinlist[i].append(pinyin[0][0])#数据库中查到的是整个拼音,用pinyin[0][0]则指定返回首字母
  10:          poslist=[-1]*len(text)
  11:          i=0
  12:          results=[]
  13:          n=0
  14:          while (i>=0):
  15:              poslist[i]=poslist[i]+1
  16:              if (poslist[i]>=len(pinyinlist[i])) :
  17:                  poslist[i]=-1
  18:                  i=i-1
  19:                  continue
  20:              if i==len(text)-1:
  21:                  results.append('')
  22:                  for t in range(len(text)):
  23:                      results[n]=results[n]+pinyinlist[t][poslist[t]]
  24:                  n=n+1
  25:              else :
  26:                  i=i+1
  27:          return results 
 
里面调用到的execSql段代码如下:
   1:      def execSql(self, sql):
   2:          cxn = sqlite3.connect(db)
   3:          cur = cxn.cursor()
   4:          cur.execute(sql)#执行查询
   5:          return cur.fetchall()
   6:          cxn.close()
 
execSql这一段当然可以直接并到getFirstLetter中,不过舍得在其它地方要调用它,所以单独列出.
 
具体使用的方法如下,比如我们要查"舍得学苑"的拼音首字母:

        easyCode = self.getFirstLetter("舍得学苑")
        if len(easyCode) > 0:
            print(easyCode[0])#返回的结果中有多音词 ,只取第一个


 

本文用到的数据库可到这里下载:华为网盘下载
 

本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!

作者:
舍得

首发:
舍得@学习力博客