Chinese Dialect Convert(开源中文方言分词转换器)

hiphopmatt 12年前
          随着《轩辕剑》的热播,里面的男主角陈靖仇以“偶像剧方言王子”的称号红遍全国,他那标准的陕西汉中方言戳中了观众的笑点,方言逐渐被人们接受,并以各种表现形式展现在艺术的舞台上,为大家带来欢乐。同时,全国各地也正在加大建立有声数据库保护地方方言的进度。   <p>       教育部副部长、国家语委主任李卫红介绍,中国语言资源有声数据库将全面科学地描写、展示中国少数民族语言和汉语方言的面貌,保护民族语言文化遗产。该库的最大的特点是<span style="font-family:Times New Roman;">“</span><span style="font-family:宋体;">有声</span><span style="font-family:Times New Roman;">”,</span><span style="font-family:宋体;">将实地采集真实语音并建立真实语音及其转写文本的语料库。</span></p>    <p><span style="font-family:宋体;">   "</span><span style="font-family:宋体;">语言资源有声数据库将记录</span><span style="font-family:Times New Roman;">21</span><span style="font-family:宋体;">世纪中国人说话的样子,在</span><span style="font-family:Times New Roman;">50</span><span style="font-family:宋体;">年、</span><span style="font-family:Times New Roman;">100</span><span style="font-family:宋体;">年后让子子孙孙听到。</span><span style="font-family:Times New Roman;">”</span><span style="font-family:宋体;">国家语委副主任、教育部语信司司长李宇明说。</span></p>    <p>       那么既然我们能够大力开发中文翻译为英文的软件,又为何不为保护国家文化遗产开发一款普通话转方言的分词翻译软件呢。Chinese dialect convert<span style="font-family:宋体;">是一款基于方言分词翻译的软件,软件实现的核心就是基于方言分词库的最大粒度分词器。下面我将详细介绍</span><span style="font-family:Times New Roman;">Chinese dialect convert </span><span style="font-family:宋体;">软件各部分结构和实现。</span></p>    <p><span style="font-family:宋体;">   <img alt="" src="http://my.csdn.net/uploads/201207/12/1342072013_9034.jpg" /></span></p>    <p><span style="font-family:宋体;">                                         </span>图<span style="font-family:Times New Roman;">1 </span><span style="font-family:宋体;">软件整体流程介绍</span><span style="font-family:宋体;"> <br /> </span></p>    <p><span style="font-size:12px;"><strong>方言分词器</strong></span></p>    <p>   方言分词器是基于<span style="font-family:Times New Roman;">IK analyzer</span><span style="font-family:宋体;">实现的,同时也对其做了相应的修改。方言分词器是采用基于词库的中文最大分词技术,进行词语切分。词库存储采用与</span><span style="font-family:Times New Roman;">IK</span><span style="font-family:宋体;">相同结构,即数组加哈希表。句子进行词元切分采用正向最大粒度切分,取基于方言词库的最大匹配词为词元,当然在不同语境下切分的粒度应该是不定的,但是为了简单起见,这里一律按最大匹配分词处理。</span></p>    <p>ConfigurationDialect <span style="font-family:宋体;">类:主要负责各种方言分词器的实例化,以及单例模式词典的初始化启动。</span></p>    <p>LanDictionary <span style="font-family:宋体;">类 :方言词典的加载,以及扩展词典的加载。</span></p>    <p>ShanXiSegmenter<span style="font-family:宋体;">类:实现了陕西方言分词,主要基于陕西方言词典进行正向最大切分</span></p>    <p>ShanXiSegmenter<span style="font-family:宋体;">类:实现了四川方言分词,主要基于四川方言词典进行正向最大切分</span></p>    <p><img alt="" src="http://my.csdn.net/uploads/201207/12/1342072166_4031.jpg" />          </p>    <p>                                                                                              图<span style="font-family:Times New Roman;">2 </span><span style="font-family:宋体;">词典存储结构</span><br />           </p>    <p>      词典中存放着可以进行方言分词转换的普通话词元,存储结构中当数组中元素大于<span style="font-family:Times New Roman;">3</span><span style="font-family:宋体;">时采用哈希表存储。</span></p>    <p><span style="font-size:12px;"><strong>IK<span style="font-family:宋体;">分词器</span></strong></span></p>    <p>   保留<span style="font-family:Times New Roman;">IK</span><span style="font-family:宋体;">分词器已有结构和类。</span></p>    <p>IKanalyzerSeg <span style="font-family:宋体;">类:提供</span><span style="font-family:Times New Roman;">IK</span><span style="font-family:宋体;">分词的接口,未匹配词使用</span><span style="font-family:Times New Roman;">IK</span><span style="font-family:宋体;">进行分词。这里</span><span style="font-family:Times New Roman;">IK</span><span style="font-family:宋体;">分词器如何进行中文分词不作介绍。</span></p>    <p><span style="font-size:12px;"><strong>数据库设计</strong></span></p>    <p>由于方言种类繁多,如果所有都存放在内存中显然是不可能的,将可以进行方言分词转换的普通话词库存放于内存中,用于句子的中文分词,但将该普通话词语对应的方言,以及用于相似度匹配的<span style="font-family:Times New Roman;">md5</span><span style="font-family:宋体;">值,和关键字存放于数据库之中,在翻译过程中需要查询数据库中每种方言对应的表来获得结果。(字符集为</span><span style="font-family:Times New Roman;">utf8</span><span style="font-family:宋体;">格式)</span></p>          <img alt="" src="http://my.csdn.net/uploads/201207/12/1342074357_6150.jpg" />                               <p>                                                                                 图<span style="font-family:Times New Roman;">3 </span><span style="font-family:宋体;">数据库方言表结构</span></p>    <p><span style="font-size:12px;"><strong>结果收集器</strong></span></p>    <p>        结果收集器主要就是对数据库查询接口的一个封装,直接提供对外统一接口,只需要输入对应的普通话句子或者词元,就能获得方言翻译结果,以及未匹配词语的相似词优先级队列,可以选取每个在数据库中存在的相似词补充基于词库翻译的局限性。</p>    <p>如:词库中只有“妈妈”一词,但是用户输入句子是母亲或者娘,其实是一个概念,但是词库未全部收录这些词,就需要进行相似词搜索,首先根据知网词库获得<span style="font-family:Times New Roman;">"</span><span style="font-family:宋体;">妈妈</span><span style="font-family:Times New Roman;">"</span><span style="font-family:宋体;">一词的概念,对前三个概念分别进行</span><span style="font-family:Times New Roman;">md5</span><span style="font-family:宋体;">值提取并合并,然后利用合并的</span><span style="font-family:Times New Roman;">md5</span><span style="font-family:宋体;">值模糊查询数据库,目的在于获得含有相同概念的词元,并计算查询词与这些具有相同概念的相似词之间的相似度,并对每个未翻译普通话词元建立其对应的相似词优先级队列。</span></p>    <p><span style="font-family:宋体;">                      <img alt="" src="http://my.csdn.net/uploads/201207/12/1342074466_4177.jpg" /><br /> </span></p>                                                                       <p>                                                                          图<span style="font-family:Times New Roman;">4</span><span style="font-family:宋体;">结果收集器整理流程</span></p>    <p></p>    <p><span style="font-size:12px;"><strong>重要辅助类</strong></span></p>    <p><em>原始文件提取类</em>:<span style="font-family:Times New Roman;">ExtractFile</span><span style="font-family:宋体;">类,根据提供的方言和普通话对应文件,建立数据库。</span></p>    <p>主要功能:<span style="font-family:Times New Roman;">1 </span><span style="font-family:宋体;">提取方言及其对应普通话 </span><span style="font-family:Times New Roman;">2 </span><span style="font-family:宋体;">提取普通话关键词 </span><span style="font-family:Times New Roman;">3 </span><span style="font-family:宋体;">查询知网概念集,提取该普通话对应的前</span><span style="font-family:Times New Roman;">3</span><span style="font-family:宋体;">个概念集,若不满则提取所有概念集,并对每个概念集进行</span><span style="font-family:Times New Roman;">md5</span><span style="font-family:宋体;">值提取,合并这几个</span><span style="font-family:Times New Roman;">md5</span><span style="font-family:宋体;">值,用于后面的相似词模糊查询</span></p>    <p>原始文件格式:最好为  <span style="background:#ffffff;">方言</span><span style="background:#ffffff;">-</span><span style="background:#ffffff;">普通话</span><span style="background:#ffffff;"> </span></p>    <p><span style="background:#ffffff;"><em>数据库连接辅助类</em></span><strong><span style="background:#ffffff;">:</span></strong>ConnectionHelper<span style="font-family:宋体;">类,提供数据库驱动加载,连接建立的辅助工作</span></p>    <p>数据库采用的是<span style="font-family:Times New Roman;">mysql-5.5.20-win32</span><span style="font-family:宋体;">版本,采用</span><span style="font-family:Times New Roman;">jdbc</span><span style="font-family:宋体;">连接数据</span></p>    <p>    由于能力有限,处于摸索阶段,这款开源的中文方言分词软件设计和实现上面还有很多可以改进,同时我想随着词库的扩展,以及普通话转方言语义研究的深入,合理的将普通话转换为对应的方言语句还是有可能的。我也希望作为一款开源的软件,大家能够互相交流,共同完善这款方言转换软件,使它的结构更加合理,翻译更加准确,词库更加完备,为国家文化遗产的保留共享我们<span style="font-family:Times New Roman;">ITer</span><span style="font-family:宋体;">的一份力量。</span></p>    <p>在此感谢<span style="font-family:Times New Roman;">IK analyzer</span><span style="font-family:宋体;">的作者,以及基于知网语义相似度的计算作者,和北航的一位同学实现的词语相似度计算的开源程序库,我才能结合他们的程序和思想来初步实现自己对于方言转换器这款软件的设计和实现。</span></p>    <p><span style="font-size:12px;"><strong>附录:</strong></span></p>    <p>该软件<span style="font-family:Times New Roman;">sourceforge</span><span style="font-family:宋体;">地址: </span><span style="color:#000000;"><a href="/misc/goto?guid=4958522026248502579">https://sourceforge.net/projects/chinese-dialect/</a></span></p>    <p>该软件 <span style="font-family:Times New Roman;">oschina</span><span style="font-family:宋体;">地址: </span><span style="color:#333333;"><a href="/misc/goto?guid=4958522026337258671">http://www.oschina.net/p/chinese-dialect/edit</a></span></p>    <p>我的邮件地址 : <span style="color:#333333;"><a href="/misc/goto?guid=4958522026431093091">handsomestone@gmail.com</a></span></p>