搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  GB2312汉字拼音对照表(6727字).txt
资料下载链接地址: https://bbs.pinggu.org/a-1495908.html
附件大小:
在工作中遇到了要把汉字转换为对应拼音的需求,因为整个工程是用SAS写的,所以也用SAS写了个宏来完成这个任务
代码如下,输入的是表格中的汉字字符串变量,输出的是转换得到的对应的拼音,用空格分隔(或不分隔)
用的方法是逐一取出单个汉字,并用哈希在汉字拼音对照表中找到对应的拼音

存在的问题是多音字没法解决,估计这要用到分词以及词语和拼音的对照表
另外不知道这方法用到较大的数据时速度怎么样,也不知道还有其他的方法没有
希望众多高高手提出改进建议,谢谢!


  1. %macro TransHanziToPinyinForTable(SourceTable,TargetTable,InputVar,OutputVar,Delimiter);
  2. /**********************************************************************/
  3. /* 此宏用于将指定变量中的汉字转换为对应的拼音。其中,SourceTable是原*/
  4. /* 始表格;TargetTable是结果表格;InputVar是需要转换的目标变量,仅能*/
  5. /* 设置一个,可包含除汉字外的英文字母、数字和其他字符;OutputVar是转*/
  6. /* 换得到的结果变量;Delimiter是用来分隔拼音的分隔符,若不需要分隔可*/
  7. /* 设为空。注意,Delimiter的设置如下,注意需要加引号: */
  8. /* 逗号分隔 delimiter = ',' */
  9. /* 空隔分隔 delimiter = ' ' */
  10. /* 下划线分隔delimiter = '_' */
  11. /* */
  12. /* 最终指定变量中的汉字转换为对应的拼音,并保存至结果表格中。 */
  13. /* */
  14. /* Created on 2014.2.27 */
  15. /* Modified on 2014.2.27 */
  16. /**********************************************************************/
  17. /* 第一步:导入汉字拼音对照表 */
  18. proc import datafile="F:\GB2312汉字拼音对照表(6727字).txt"
  19. out=RHTPFT_HanziToPinyin
  20. dbms=dlm
  21. replace;
  22. guessingrows=2000;
  23. delimiter=' ';
  24. getnames=No;
  25. run;
  26. data RHTPFT_HanziToPinyin;
  27. set RHTPFT_HanziToPinyin;
  28. rename VAR1=RHTPFT_Hanzi;
  29. rename VAR2=RHTPFT_Pinyin;
  30. drop VAR3 VAR4 VAR5;
  31. run;
  32. /* 第二步:得到输入变量的长度,由此计算出输出变量的长度 */
  33. proc contents data=&SourceTable out=RHTPFT_VarList noprint;
  34. run;
  35. proc sql noprint;
  36. select LENGTH*5 into :RHTPFT_LengthOfInputVar
  37. from RHTPFT_VarList
  38. where UPCASE(NAME) EQ %UPCASE("&InputVar");
  39. quit;
  40. /* 第三步:将汉字文件名转为拼音 */
  41. data &TargetTable(drop=RHTPFT_Hanzi RHTPFT_Pinyin RHTPFT_i);
  42. length RHTPFT_Hanzi $2 RHTPFT_Pinyin $6;
  43. if _N_ EQ 1 then do;
  44. declare hash h(dataset: 'RHTPFT_HanziToPinyin');
  45. h.defineKey('RHTPFT_Hanzi');
  46. h.defineData('RHTPFT_Pinyin');
  47. h.defineDone();
  48. end;
  49. set &SourceTable;
  50. length &OutputVar $&RHTPFT_LengthOfInputVar..;
  51. do RHTPFT_i=1 to KLENGTH(&InputVar);
  52. RHTPFT_Hanzi=KSUBSTR(&InputVar,RHTPFT_i,1);
  53. %if &Delimiter EQ %STR() %then %do;
  54. if h.find() EQ 0 then &OutputVar.=CATS(&OutputVar,RHTPFT_Pinyin);
  55. else &OutputVar.=CATS(&OutputVar,RHTPFT_Hanzi);
  56. %end;
  57. %else %do;
  58. if h.find() EQ 0 then &OutputVar.=CATX(&Delimiter,&OutputVar,RHTPFT_Pinyin);
  59. else &OutputVar.=CATS(&OutputVar,RHTPFT_Hanzi);
  60. %end;
  61. end;
  62. run;
  63. /* 删除不必要的表格 */
  64. proc datasets lib=work nolist;
  65. delete RHTPFT_:;
  66. quit;
  67. %mend;

  68. %macro Demo();
  69. %let SourceTable=FundCodeList;
  70. %let TargetTable=FundCodeList1;
  71. %let InputVar=Fund_Name;
  72. %let OutputVar=Fund_Name_Pinyin;
  73. %let Delimiter=' ';
  74. %TransHanziToPinyinForTable(&SourceTable,&TargetTable,&InputVar,&OutputVar,&Delimiter);
  75. %mend;
复制代码



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

GMT+8, 2025-12-24 21:54