用Power Query实现汉字转拼音——两个方法,一个简单,一个效率高
- 汉字转拼音问题 -
其实,这个问题就是对每个字找到它的拼音,然后合并起来的问题——当然,这个不能解决多音字的问题。
那么,首先,我们得找到汉字拼音对照表,下面是我找到的一个(下载链接见文末):
- 【一】简单直观解法 -
- 1 -
导入文本文件
- 2 -
按逗号将文本文件拆分到行
做成对照表
也可以直接做成Excel表导入
- 3 -
拆解出汉字列
- 4 -
拆解出拼音列
- 5 -
对需要转换的汉字写转换公式
或将汉字分列成表后做合并查询
= Text.Combine(
List.Transform(
Text.ToList(待转换汉字),
(c)=>Table.SelectRows(
对照,
(t)=>t[汉字]=c
){0}[拼音]
),
" "
)
思路:
1)将待转换汉字拆成列表;
2)通过List.Transform函数实现对汉字列表的转换(通过Table.SelectRows函数针对每个汉字到对照表里找对应的拼音);
3)对转换好的拼音用Text.Combine函数再加空格连到一起。
-【二】直接筛选替换法 -
方法【一】的过程相对比较常规,比较适合一步步的进行操作,然后写一个相对简单的公式来完成。但总体来说步骤比较多,而且效率比较低(即使将对照表进行缓存,运行仍比较慢)。所以,考虑换个解法。
- 1 -
直接读文本内容并拆成列表缓存
lst = List.Buffer(
Text.Split(
Text.FromBinary(
File.Contents("D:\汉字拼音对照.txt"),
936
),
","
)
)
思路:
1)从文本文件中读取内容;
2)用Text.Split函数将文本内容按逗号拆成列表;
3)用函数List.Buffer将列表缓存。
- 2 -
写公式直接从列表中筛选
在结果中直接替换掉汉字
拼音 = Text.Combine(
List.Transform(
Text.ToList(待转换汉字),
(c)=>Text.Replace(
List.Select(
lst,
(s)=>Text.StartsWith(s,c)
){0},
c,
""
)
),
" "
)
思路:
1)用Text.ToList将待转换的汉字拆成列表;
2)用List.Transform函数对汉字列表进行转换(通过List.Select函数筛选出汉字拼音对照列表中开头为需要转换汉字的内容,并用Text.Replace函数删除该汉字);
3)用Text.Combine函数将拼音合并。
- 再哆嗦一下 -
这些公式因为通过换行缩进处理,所以看起来很长很复杂,但是,如果理解了Power Query里的数据结构以及函数内部参数的传递方法,实际上是不难的,因为其中并没有太多烧脑的技巧。
所以,无论是在前期的文章中,还是现在的视频课程里,我一再强调这几个很重要的内容:
- 汉字拼音对照文件下载链接 -
https://share.weiyun.com/5nIUWI2