大创项目学习日志(二)——汉字转拼音软件的选择与尝试

       我希望,至少我们的孙儿孙女这一代能够两条腿走路,既能用汉字写,也能用拼音字母写,听报告作笔记,用拼音字母写,会比汉字写得快。如果可能,还能用上拼音字母的打字机。这样该是多么幸福呢!我并不幻想,在不远的将来,就可以废除汉字(方块字);然而即使在百年之内或在百年之后还要用汉字,让我们的子孙的一代能用‘两条腿走路’又有什么不好呢?

——茅盾


现在在哪里

在这里插入图片描述
       拼音声韵分析是项目的第二步,这方面的内容不仅可以在智能生成诗词方面使用,还可以在押韵检测,平仄对仗检测等子功能里用到。现阶段仍然是从网上收集整理前辈们已经做好的这方面的软件。谢谢前辈们的付出。



1.pypinyin——强大的Python汉字拼音转换工具

       pypinyin是一个强大的python汉字转拼音工具并且在github上完全开源。它根据词组智能匹配最正确的拼音,支持多音字,有简单的繁体,注音支持,并且支持多种不同拼音/注音风格。除此之外还具有自定义拼音库和自定义拼音字典等功能。

       pypinyin的github项目地址为:https://github.com/mozillazg/python-pinyin

       下载安装后,根据r_coder博主的博客Python3 将汉语转换为汉语拼音编写demo进行测试。

       测试demo如下:

import pypinyin

def hp(word):
    s = ''
    for i in pypinyin.pinyin(word,style=pypinyin.NORMAL):
        s += ''.join(i)
    return s

def hp2(word):
    s = ''
    for i in pypinyin.pinyin(word):
        s = s + ''.join(i)+" "
    return s

if __name__ == "__main__":
    print(hp("春江潮水连海平,海上明月共潮生"))
    print(hp2("春江潮水连海平,海上明月共潮生"))


       输出结果如下:

在这里插入图片描述
       可以看出,基本可以满足将汉字转换为拼音的功能要求。对于诗词的押韵平仄分析来说我认为已经足够了。

2.pinyin4j——经典的汉字转拼音java包

       官方介绍中,pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,但它的实际功能远远不止于此。它提供了汉字拼音转换部分的大部分功能,而且十分便于使用。

       pinyin4j的官网地址是http://pinyin4j.sourceforge.net/,但可惜的是,和大多数java开源包一样,pinyin4j的作者很久没有对其进行更新了。现在我们可以从官网下载最新的2.5版本进行使用(值得一提的是该软件包从1.0版本到2.5版本只花费了3个月,而自从2006年2.5版本推出之后再没更新过)。

       pinyin4j下载开后在lib子文件夹中可以找到pinyin4j-2.5.0.jar包,有趣的是,这个jar包是可以直接双击运行的。界面如下所示:
在这里插入图片描述

       点击Convert to Pinyin按钮,程序就会将input Chinese文本框中的汉字转换为不同形式的拼音并输出在相应的文本框中。

在这里插入图片描述

       尝试完这个自带的功能后,我们还是将这个jar导入java项目中编写demo进行测试。这里使用hfhwfw博主的博客pinyin4j入门教程中的demo进行测试。

       测试代码和博主博客中一模一样,此处就不粘贴了。测试结果如下:

在这里插入图片描述

       效果诚然不错,还能识别出英文。

       在测试过程中出了个小bug,就是总是会出现中文乱码的问题。这个问题出现的原因很可能是因为eclipse使用的编辑语言格式是默认的gbk而非utf8。解决方法可以参考这篇百度经验:怎样修改eclipse的默认字符集和修改中文乱码

3.JPinyin——pinyin4j的优化升级版(但好像英年早逝了)

       JPinyin在pinyin4j的基础上进行了优化,具有了更优良的性能,也因此得到了很多人的喜爱。

       听起来好像十分美好,但问题在于——现在JPinyin官网的github网址已经没有了。。。

       但秉持着多试一试各种工具的心态,我还是在github上搜索了JPinyin并从搜索结果中选择了一个进行下载。下载网址:https://github.com/qzw1210/jpinyin(其实我现在不太确定是不是这个了,当时忘了存网址)

       下载开之后发现,JPinyin真是无愧轻量之名,没有进行打包的它src文件夹里只有简简单单的六个.java源文件就实现了所有功能。

在这里插入图片描述

       既然只有六个文件我也就不打包了,直接全部复制到项目中运行好了。

       但是只复制文件是不行的,汉字转拼音工具一定会有一个类似字典这样的文件存在,从而可以使汉字可以依据某种规则进行转换。JPinyin的字典文件在main/resource/data文件夹下。

在这里插入图片描述

       我们将这3个字典文件也复制到项目中。项目结构如下(其中ChangeToPinyinJP.java是自己写的测试类)

在这里插入图片描述

       但这是还是会出问题,因为这是字典文件的相对路径会变掉,运行时就会出现找不到文件的错误。我们阅读一下六个java的代码,可以找到路径是记录在PinyinResource.java中的,我们修改一下这个类的最后3个成员函数。

protected static Map<String, String> getPinyinResource() {
        //return getResource(newClassPathReader("/data/pinyin.dict"));
     return getResource(newClassPathReader("pinyin.dict"));
    }

protected static Map<String, String> getMutilPinyinResource() {
        //return getResource(newClassPathReader("/data/mutil_pinyin.dict"));
     return getResource(newClassPathReader("mutil_pinyin.dict"));
    }

protected static Map<String, String> getChineseResource() {
        //return getResource(newClassPathReader("/data/chinese.dict"));
     return getResource(newClassPathReader("chinese.dict"));
    }

       这样就把路径改成了我们项目中正确的相对路径。我们就可以编写测试类进行测试了。

       测试类编写参考刘达人博主的博客JAVA实现汉字转换为拼音 pinyin4j/JPinyin,但是为了让程序更好的展现JPinyin的功能,对public static void main函数进行修改:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  ChangeToPinyinJP a = new ChangeToPinyinJP(); 
  String str = "晴川历历汉阳树,芳草萋萋鹦鹉洲。";
  System.out.println("有声调字符串:"+a.changeToMarkPinYin(str));
  System.out.println("数字声调:"+a.changeToNumberPinYin(str));
  System.out.println("不带声调字符串:"+a.changeToTonePinYin(str));
  System.out.println("拼音首字母字符串:"+a.changeToGetShortPinYin(str));
  System.out.println("张是多音字吗?"+a.checkPinYin('张'));
  System.out.println("朝是多音字吗?"+a.checkPinYin('朝'));
  String str2 = a.changeToTraditional(str);
  System.out.println("转换为繁体字:"+str2);
  String str3 = a.changeToSimplified(str2);
  System.out.println("再转换为简体字:"+str3);
 }

       观察测试结果
在这里插入图片描述

       诚然不错。

后记

  1. 多音字的拼音转换相关内容并没有去尝试,之后应根据项目实际需要决定是否需要在这方面进行更深入研究。可参考资料:Java 汉字转拼音(完美支持解决多音字)
  2. 平仄相关规则,韵律相关规则需要进一步进行语言学方面的研究。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值