- 汉字转拼音问题 -

        其实,这个问题就是对每个字找到它的拼音,然后合并起来的问题——当然,这个不能解决多音字的问题。

        那么,首先,我们得找到汉字拼音对照表,下面是我找到的一个(下载链接见文末):

- 【一】简单直观解法 -

- 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里的数据结构(五、跨查询的表引用)