使用 Python 将普通词典文件转化为 XML.pdf
《使用 Python 将普通词典文件转化为 XML.pdf》由会员分享,可在线阅读,更多相关《使用 Python 将普通词典文件转化为 XML.pdf(11页珍藏版)》请在咨信网上搜索。
1、使用Python将普通词典文件转化为 XML简介许多完善的软件项目已经使用普通文本配置和资源文件很多年了,但没有出现什么重大问题。随着项目的 扩展和复杂性的增加,对更高严谨性和更强适应性的需求也随之增加。通过XML以及使用具体标准的 XML应用程序,您可以得到以下获益:跨项目和跨平台兼容性、稳健性,以及在Unicode等领域的可扩 展性。常用缩略词 HTK:隐马尔可夫模型工具包(Hidden Mar kov Model Tooht)PLS:发音词汇规范(Pr onunc iation Lexic on Spec ific ation)XML:可扩展标记语言(extensible Mar kup
2、 Lang uag e)通过将普通文本文件转化为相关的开源标准,您还可以提高灵活性和可靠性。语音识别工作中的词典就是 本文使用的一个很好的例子。不管您的开源项目是否转而使用XML格式的资源文件,您都可以在不损失 功能的情况下在您的工作中运用XML标准。在本文中,我们将学习如何轻松地在普通文本和Pronunciation Lexicon Specification(PLS)格式之间进行 转换。几个示例展示如何存储PLS格式的自定义词典,并将数据提取为所需的普通文件。回页首示例:词典词典是在语音识别工具中使用的单词列表。它们包含的信息涉及到如何打印或用图形显示单词,它如何使 用音素发音。经常与Hi
3、dden Markov Model Toolkit(HTK)一同使用的词典在语音控制项目中得到广泛使 用(参阅参考资料)。清单1是来自一个VoxForgeHTK词典的一段摘录。清单1.清单1来自一个VoxForge HTK词典的一段摘录agency agency ey j h ih n s iyagenda agenda ax j h eh n d axAGENT AGENT ey j h ih n tAGENTS AGENTS ey j h ih n t sager ager ey g erAGES AGES ey j h ih z如果复制和粘贴本文代码,添加一个制表分隔符建议您直接从源头获
4、取词典。本文用HTML显示,HTML用空格替换制表分隔符。如果您从本文执行复制和粘贴操作,需要用一个制表分隔符替换多个插入的空格(t),否则脚本运行会失败。清单1中的文件包含三个以制表符分隔的字段:一般描述单词的标签 当您希望打印或在屏幕上显示一个单词时围绕单词的方括号(完麦)来自Arpabet集(参阅参考资料)的一系列单一空格分隔的音素,描述单词的读音在上述示例中使用英语发音,多半包含在 American Standard Code for Information Interchange(ASCII)字符中。CMU Sphinx项目以类似的方式(参阅参考资料)将词典(或字典)存储在CMU S
5、phinx上下文中。清 单2给出一段摘录。清单2.来自一个CMU Sphinx词典的一段摘录ag enc y ey jh ah n s iyag enda AH JH EH N D AHag endas AH JH EH N D AH zag ent EY JH AH N Tag ents ey jh ah N T sag er EY JH ER在清单2中只有两个字段:单词/字素及其音素。两个词典示例有一些细微差别:单词和音素是完全不同的类型。音素有一些微妙的差异。对待标点符号(逗号和惊叹号等)的方式稍有不同。您可以在目前下载的PocketSphinx中的cmu07a.dic文件中看到整个字典
6、(参阅参考资料)。由于词典给出特定单词的发音,您可能需要编辑文件以适应特定的人或方言。久而久之就可以在自定义词 典中建立起知识资产了。使用文本编辑器很容易就可以编辑普通文件,但也易于引入错误,比如:使用文 件标准以外的分隔符,插入非ASCII字符,以错误的顺序放置字段,不当地对字段进行排序,在需要的地 方缺少方括号,等等。普通文件还有一点不足之处。在您构建自定义文件时,始终与其他语音项目不兼容。而标准XML格式(比 如PLS)的词典,一旦被两个项目识别到,在两者中都能立即相互兼容。回页首语音词典规范(Pronunciation Lexicon Specification)PLSA有一个简单的基
7、本格式,如清单3所示。清单3.清单3基本PLS格式.phoneme XML描述可包含多个lexeme子元素的root元素lexicon。每个lexeme可以包含多 个grapheme元素和多个phoneme元素。规范允许您覆盖alphabet属性,但不允许您覆 盖xml:lang语言属性。要将词素存储为不同的语言,您非常需要分离PLS词典文件。这个词典中 的默认字母系统是ipa,它是指表示发音的InternaMonal Phonetic Alphabet(IPA)系统(参阅参考资料)。IPA音素表示法是多字节Unicode字符。HTK和Sphinx都使用纯ASCII代码。本文稍后会讨论这个 重
8、要考虑因素。使用PLS规范的优势在于,它添加了更加严谨的结构,能够让您存储更多信息,比如词性和具体字母。词性细节在英语中很重要,因为一些拼写起来相同的单词(同形异义词)发音不同,具体视语法角色而定。例如,perfect在作为形容词和作为动词时发音不同,因为重音在不同的地方。属性中存储的额外信息能够 让您根据需要从整个文件提取特定记录。使用这一方法,您可以在多个phoneme元素中搜索一个特定 的字母。将PLS词典看作是一个词典信息数据库,从中您可以提取与所使用的语音工具相关的详细信息。清单 4是一个PLS格式的示例。清单4.清单4 一个PLS格式的单词ag enc yey j h ih n s
9、 iyEY jh AH N S lY清单4中的示例仅存储一个可能有两个音素表示的单词。您可以使用alphabet属性过滤出其中一 个phoneme字符串。lexeme元素显示noun的role属性。这里面虽然信息量大,但在本例 中是冗余的,因为该单词仅作为一个名词使用,没有复杂的发音情况。通过并排放置两个不同来源的phoneme表示,您己经可以分辨出细微的差别了。该信息在解决语音识 别问题方面会很有帮助。CMU Sphinx和HTK都不能直接使用PLS词典,但是HTK工具包的simon(参阅参考资料)前端可 以。如果您直接使用HTK或Sphinx,一定要确保可以轻松实现普通文件和PLS之间的来
10、回转换,而不 丢失任何信息。以下几节展示如何使用Python实现普通文件与PLS之间的来回转换。假定您在普通词典文件中有自定 义信息。回页首转化为PLS清单5中的代码使用Python,但是您可以通过许多其他方式完成相同的工作。(例如,参阅参考资料中 有关 Extensible Stylesheet Language Transformations(XSLT)的 developerWorks 教程)。有些人希望 使用可在每一小步检查XML稳健性的库,获得更多有关问题出处的即时反馈,特别是当源文件较大且易 于包含错误和不一致性时。下面的示例将检查留到最后一步,这意味着一定的置信水平,表示普通文件状
11、 态良好。清单5.清单5转化为PLSfr om elementtr ee.ElementTr ee impor t par seimpor t str ing as strimpor t sysimpor t c g n#c al1 with#python flat2pls.py vox#or#python flat2pls.py spx#if len(sys.ar g v)=2:sr c=sys.ar g vlelse:exit(wr ong ar g s)#outfi1e=mylex+s r c+.plspr int out is+outfi1eout=open(outfile,w)out
12、.wr ite(n,)#now the 1exemesif sr c=vox:f=open(vf.lex,r)for line in f:line=s tr.s tr ip(line)wor d=s tr.s plitfli n e,t)#g r=str.s tr ip(wor d l,)g r=c g i.esc ape(wor d0)out.wr ite(n n+g r+n+wor d2+n)else:#sr c is sphinxf=open(c mu.dic,r)for line in f:line=s tr.s tr ip(line)wor d=s tr.s plit(lin e,t
13、)g r=c g i.esc ape(wor d0)out.wr i te(n n+g r+n+wor dl+r)#ended lexemesout.wr ite(nn)out.c lose()#now c hec k the output is oktr ee=par sefoutfi1e)lexi c on=tr ee.g etr oot()mylexc ount=0for 1exeme in 1exic on:mylexc ount+=1pr int Found%(number)d 1exemes%number:mylexc ount清单5首先从XML解析库elementtree和一些支
14、持的库导入模块(参阅参考资料)开始。导入 不同版本上的ElementTree会涉及到稍微不同的语法,具体取决于您安装模块的方式。示例代码来自 openSUSE,其中模块是从源头安装的,但Ubuntu可能需要fromxml.etree.ElementTree import parseo 模块 str 支持一些字符串操作,sys 提 供给您对文件的访问权限,且cgi提供处理XML数据所必要的一个非常重要的转义例程。代码打算获 取一个命令行界面(CLI)参数,告诉它是否要从CMU Sphinx格式或HTK/VoxForge转换。然后示例代 码打开输出文件,并编写适合PLS的XML序言。由于在此阶段您
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 Python 将普通词典文件转化为 XML 普通 词典 文件 转化
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【曲****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【曲****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。