我的第一个开源项目:PyinConventor。希望大家给些建议

翟志军 发布于 2013/06/06 18:52
阅读 1K+
收藏 8

我想做汉字拼音转换器:将传入汉字,不管字数如何都能准确的将它们转成拼音(带音调的)。

我已经有了自己思路。打个比方我想将“ikanalyzer是一个开源的基于java语言开发的”这句话转成拼音。

那么我是怎样做的呢?

1 分词:将汉字分词。分成:ikanalyzer 是 一个 开源 的 基于 java 语言 开发 的

2 查拼音源:拿到分词结果,从拼音源中查找每一个分词的拼音。结果,你懂的。

3 返回结果。

从我的思路可以看出我的拼音源其实就类似于哈希表,如 一个yigeyige

由于我没有这方面的经验。我不知道我的思路是否正确,是否有更好的办法。

现在我阐述下我的问题:

1 我的思想是否正确?是否有更好的办法?

2 我对汉字与拼音之间的关系的建模:哈希表关系。这样的建模能否满足转换过程的所有场景。

3 我去哪里找拼音源?我想到两种策略:(1)找现成的,(2)在现有的词典上,写一个蜘蛛从网上查,然后自己存到数据库中。(词典我是用盘古的词典)

下面是我搭建的这个库总体框架:拼音数据源和分词器都是接口。因为拼音转换过程中可能会有很多参数,所以我使用构造器的方式来实现PyinConventor。这样就提高可读性。


@Test
public void test() throws IOException {

    //拼音数据源
    File root = new File(ClassLoader.getSystemResource("").getFile());
    InputStream in = new FileInputStream(new File(root, "pinyin.properties"));
    PyinDataSource source = new PropertiesPyinDataSource(in);

    //分词器
    Segmentationer segmentationer = new IKSegmentationer();

    String result = PyinConventor.create(source, segmentationer, "金石为开").withToneMark().generatePinyin();

    assertEquals("jīnshíwèikāi", result);
}


项目地址:http://git.oschina.net/zacker330/pyinconventor


@中山野鬼 @宏哥 @红薯 @kissjava @疯狂的艺术家 





加载中
0
中山野鬼
中山野鬼
这个貌似有吧。而且这个东西,难点在于数据哪来。即便是语义理解,我的认知,目前好像还是靠扩大窗口做匹配来完成。数据你有才好搞。
0
hysjw
hysjw
这个其实挺难的 毕竟不是AI 数据都要靠自己来分析和建立 而且还带音标 这个整体架构和结构就更难了 即使框架建立好 后期的细节也比较复杂 不过还是很支持你 做程序就是要有开源精神才做的好 相信社区的庞大吧 总会有办法的。
0
小木头的冬天
小木头的冬天
个人感觉两个难点:1、多音字 ,2、分词
0
翟志军
翟志军

引用来自“我是大木头”的答案

个人感觉两个难点:1、多音字 ,2、分词

分词用现成的。

多音字问题,我觉得在分词后就不存在了。

翟志军
翟志军
回复 @秀小川 : 嗯嗯。知道了,非常感谢。
秀小川
秀小川
回复 @陈真诚 : "当天"像这种,你分词的结果应该就是"当天",这种就很难区分了!
翟志军
翟志军
回复 @我是大木头 : 有了。IK分词就可以了。
翟志军
翟志军
回复 @秀小川 : 倒掉了 分词后是 倒掉 了, 我从拼音源里查:倒掉,再查:了。这样就不会错了。我不是一个字一个字的查
小木头的冬天
小木头的冬天
@陈真诚 目前还没有较精准的中文分词器吧。
下一页
0
SilenceSu
SilenceSu

pinyin4j
 貌似也是做这个的

SilenceSu
SilenceSu
pinyin4j 我用过还不错、新手仿照别人成熟的项目练练手,成长很快的!
黑狗
黑狗
对的 所以我建议除非是练手 否则别去做别人已经做得比较完善的东西
0
jingshishengxu
jingshishengxu
我还以为已经做出来了呢
0
穿衣服比较麻烦
穿衣服比较麻烦

分词、多音字,尤其是多音字。

目前常见的几个我都用过,没有一个真正带AI元素的,所以努力吧,有市场

0
狮子的魂
狮子的魂

jcseg分词器支持分词结果拼音追加功能,

设置Config.LOAD_CJK_PINYIN = true 即可把分词结果的拼音也追加进去.

每个词条的拼音可以在词库中自定义修改. 

0
尚御博豪
尚御博豪
记得在vba中用过一个提取拼音首字母的方法,可以直接通过ascii还是unicode码,能够直接判断是英文还是汉字,然后再根据这个码的数值判断首字母。不知道这个思路能不能抛砖引玉。
0
林良益
林良益
有个pinyin4j的开源项目,楼主可以参考一下
翟志军
翟志军
多谢提醒。我已经参考了。。。
返回顶部
顶部