博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MaxCompute UDF系列之拼音转换
阅读量:6474 次
发布时间:2019-06-23

本文共 2510 字,大约阅读时间需要 8 分钟。

汉字转换拼音在日常开发中是个很常见的问题。例如我们伟大的12306,在地名中输入“WH”,就会出现“武汉”“芜湖”“威海”等地名,输入“WUHU”就会出现“芜湖”。

我们在MaxCompute开发中也会遇到此类问题,今天为大家提供一个拼音转换的UDF,下载地址见附件。

效果如下:

e367275e9550537409d5307b79b8ed2e2785900d

ba7c4ca53342963ed412b9e2a73a24aa0c0d644a

MaxCompute UDF代码如下:

package com.yinlin.udf.dev;import com.aliyun.odps.udf.UDF;import net.sourceforge.pinyin4j.PinyinHelper;  import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;  import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;  import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;  import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;  import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;    public class pinyin extends UDF {           public String evaluate(String inputString,String xtype) {                  HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();          format.setCaseType(HanyuPinyinCaseType.LOWERCASE);          format.setToneType(HanyuPinyinToneType.WITHOUT_TONE );          format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);          if (inputString == null) inputString = "";        char[] input = inputString.trim().toCharArray();          StringBuffer output = new StringBuffer("");          try {              for (int i = 0; i < input.length; i++) {                  if (Character.toString(input[i]).matches("[\u4E00-\u9FA5]+")) {                      String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);                    if (temp != null & xtype.equals("1")){                        output.append(temp[0]);                    }                    if (temp != null  & xtype.equals("2")){                        char[] ctemp=temp[0].toCharArray();                        output.append(ctemp[0]);                    }                    //output.append(" ");                } else                      output.append(Character.toString(input[i]));              }          } catch (BadHanyuPinyinOutputFormatCombination e) {              e.printStackTrace();          }          return output.toString();      }}

注意:依赖拼音pinyin4j.jar;

使用方法:

1、通过Eclipse将pinyin.java编译成Jar包。

2、通过大数据开发套件,上传资源pinyin4j.jar和pinyin_udf.jar;

5727399b276ab2cbfbfaa4d7e4050ac27aa3e4f1

3、通过大数据开发套件,引用第二步上传的pinyin4j.jar和pinyin_udf.jar资源,注册pinyin函数;a04e688ed9d448b458e23ce06f3a0bbe7bc5d6ca

4、通过大数据开发套件新建SQL脚本,输入SQL函数进行测试。

--创建虚拟表,插入一条记录CREATE TABLE IF NOT EXISTS dual (id STRING);insert into table dual select '1' from (select count(1) from dual) t;---pinyin 汉字转拼音,参数'1'为全拼,参数'2'为首字母select pinyin('隐林','2') from yinlin_demo.dual limit 1;

到此为止,实验完成。

常见问题

Q:无结果?

我们在创建虚拟dual表的时候,一定要保证表中有数据。

Q:无法找到pinyin函数?

利用大数据开发套件注册pinyin函数的时候需要包名+类名,否则会找不到类。

bba01b493e1c5d904e882b1c380673c6ebe49a98

转载地址:http://fttko.baihongyu.com/

你可能感兴趣的文章
vue绑定内联样式
查看>>
SQL2000 和 SQL2005下行列转换示例
查看>>
WebService的两种方式SOAP和REST比较
查看>>
JAVA多线程和并发基础面试问答(转载)
查看>>
Spring中基于Java的配置@Configuration和@Bean用法
查看>>
替换字符串中的空格
查看>>
代码组(3) 属性
查看>>
从还有一个角度看大数据量处理利器:布隆过滤器
查看>>
【转】基于溢出的入侵
查看>>
WF4实现工作流驳回流转模型的几种设计方案
查看>>
编写高效的C#图像处理程序(3) Rgb=>Lab,图像缺陷检测的例子
查看>>
[LeetCode]Binary Tree Preorder Traversal
查看>>
UIScrollView 滑动复位
查看>>
Eclipse里几个常用视图的ID
查看>>
busybox filesystem add ldd function
查看>>
【maven】 maven的setting.xml文件的详解
查看>>
[LeetCode] Shortest Palindrome
查看>>
OWIN的理解和实践(二) – Host和Server的开发
查看>>
JS中的prototype
查看>>
浅谈C#中一种类插件系统编写的简单方法(插件间、插件宿主间本身不需要通信)...
查看>>