用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里的数据结构以及函数内部参数的传递方法,实际上是不难的,因为其中并没有太多烧脑的技巧。

所以,无论是在前期的文章中,还是现在的视频课程里,我一再强调这几个很重要的内容:

  1. 重要!很重要!非常重要!理解PQ里的数据结构(一、总体结构)

  2. 重要!很重要!非常重要!理解PQ里的数据结构(二、行列引用)

  3. 重要!很重要!非常重要!理解PQ里的数据结构(三、跨行引用)

  4. 重要!很重要!非常重要!理解PQ里的数据结构(四、根据内容定位及筛选行)

  5. 重要!很重要!非常重要!理解PQ里的数据结构(五、跨查询的表引用)

- 汉字拼音对照文件下载链接 -

https://share.weiyun.com/5nIUWI2

(0)

相关推荐