zoukankan      html  css  js  c++  java
  • [编程心得]用python取汉字首字母

    近日给兄弟公司编写一个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])#返回的结果中有多音词 ,只取第一个


     

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

    本文版权归舍得英语魔法学苑所有,欢迎转载,转载请注明作者和出处。谢谢!
    作者:
    舍得
    首发:
    舍得@学习力博客

  • 相关阅读:
    蛇形填数(算法竞赛入门经典)
    35. Search Insert Position(LeetCode)
    70. Climbing Stairs(LeetCode)
    循环结构程序设计(算法竞赛入门经典)课后题
    阶乘之和(算法竞赛入门经典)[求余问题]
    有关int范围的例题(算法竞赛入门经典)
    矩阵行成列,列成行
    543. Diameter of Binary Tree(LeetCode)
    415. Add Strings(LeetCode)
    121. Best Time to Buy and Sell Stock(LeetCode)
  • 原文地址:https://www.cnblogs.com/emagic/p/2396333.html
Copyright © 2011-2022 走看看