CN111881696B - 一种cml到化学盲文的转换系统及方法 - Google Patents

一种cml到化学盲文的转换系统及方法 Download PDF

Info

Publication number
CN111881696B
CN111881696B CN202010749418.8A CN202010749418A CN111881696B CN 111881696 B CN111881696 B CN 111881696B CN 202010749418 A CN202010749418 A CN 202010749418A CN 111881696 B CN111881696 B CN 111881696B
Authority
CN
China
Prior art keywords
node
array
cml
conversion
chemical
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010749418.8A
Other languages
English (en)
Other versions
CN111881696A (zh
Inventor
苏伟
林和
蔡川
许存禄
吴文峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lanzhou University
Original Assignee
Lanzhou University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lanzhou University filed Critical Lanzhou University
Priority to CN202010749418.8A priority Critical patent/CN111881696B/zh
Publication of CN111881696A publication Critical patent/CN111881696A/zh
Application granted granted Critical
Publication of CN111881696B publication Critical patent/CN111881696B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Document Processing Apparatus (AREA)

Abstract

本发明涉及一种CML到化学盲文的转换系统及方法,所述系统至少包括用户界面层和转换逻辑层,所述转换逻辑层配置为:对所述用户界面层接收的CML文件进行预处理;解析预处理后的CML文件并转换为DOM树;对DOM树进行类型划分并转换为化学盲文。

Description

一种CML到化学盲文的转换系统及方法
技术领域
本发明涉及化学盲文的自动翻译技术领域,具体涉及一种CML到化学盲文的转换系统及方法。
背景技术
盲人因其对于现实世界的不可见,可以通过带有触觉的盲文来实现对真实世界的理解。盲文又称为点字或凸字,是在不同材料上由不同的凸点组成。当前常用盲文是由6个点组成的方块,简称“方”,打印或手动书写出来的盲文是凸出来的点表示有效点,左侧从上至下为1点、2点、3点,右侧从上至下依次为4点、5点、6点,如图11所示。
化学标记语言(Chemical Markup Language,CML)是一种基于XML的化学标记语言。XML(eXtensible Markup Language)可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。CML用于在计算机中描述化学分子、化学结构式、光谱等化学数据。CML的制定使得明眼人能更便捷地在计算机中存储和计算化学公式。但是视障者使用计算机获取化学公式信息存在一定的障碍。现有的辅助技术手段能够使得视障者获得计算机上用汉语、英语和其他语言等表达的文本信息,但对于文本中的化学公式信息却无法获得。现有技术通常使用汉语、英语等自然语言转换为盲文ASCII码,然后将盲文ASCII码转换为盲文点字,通过点显器等设备反馈至视障者。盲文ASCII码是计算机中存储和识别盲文的ASCII符号,能够对应转换成相应的盲文点字。
当前,有部分国外学者研究了化学盲文相关的工作。2007年P Kansong等人研究出基于Linux、Windows系统的翻译引擎,能够实现英语、泰语、数学、化学和盲文的相互转换。此外还有Robert Michalski制作的Braille Translator Online翻译系统。但这两种系统使用的都是国外盲文标准,中国盲文与国外盲文的标准不同,Braille TranslationOnline系统还需用户学习与该系统配套的输入法,不仅上手门槛高需要较大的学习成本,而且不易输入化学结构式等复杂的化学公式。此外也要求用户掌握化学盲文书写规则。
因此,现有技术中还不存在针对中国化学盲文规则的化学公式到中国盲文转换系统或方法。但是,化学作为自然科学的一门重要学科,其符号和公式广泛存在各领域的文献资料中,同时也在药品和日用品说明书等领域大量存在。虽然明文中存在较多的化学信息,但由于缺乏相应的辅助工具转换到盲文,所以盲人获取化学盲文信息存在巨大的困难。为了能让盲人、视力障碍群体自由、平等、无障碍地获取、访问化学信息,亟需针对中国化学盲文规则的化学公式到中国盲文转换系统或方法,能够支持分子式、离子式、结构式等化学式到中国盲文的转换。
此外,一方面由于对本领域技术人员的理解存在差异;另一方面由于发明人做出本发明时研究了大量文献和专利,但篇幅所限并未详细罗列所有的细节与内容,然而这绝非本发明不具备这些现有技术的特征,相反本发明已经具备现有技术的所有特征,而且申请人保留在背景技术中增加相关现有技术之权利。
发明内容
针对现有技术之不足,本发明提供了一种CML到化学盲文的转换系统,至少包括用户界面层和转换逻辑层。所述用户界面层用于接收CML文件。所述转换逻辑层配置为:
对所述用户界面层接收的CML文件进行预处理以判定CML文件是否规范;解析预处理后的CML文件并转换为DOM树;对DOM树进行类型划分并根据需求的转换类型将DOM树中的节点存储的化学信息解析为数字信息和符号信息,其中,在将化学信息转换为二维平面公式的情况下,基于所述数字信息和符号信息至少将原子与化学键一一映射到中国盲文。现有技术中,计算机中数学、物理等学科公式均使用某种格式的文本保存,而数学、物理公式到盲文翻译的相关研究均在此基础上进行的。同理,化学公式到中国化学盲文的翻译也可以基于CML格式的文本进行。但是,化学公式有比数学、物理公式更为独特的非线性写法。而且化学公式涉及到原子的数量、排列方式、化合价、同位素等信息,更重要是涉及每个原子与化学键的相关信息以及以上信息彼此的对应关系,因此现有的数学、物理公式到中国盲文的转换方法无法应用于化学公式到中国盲文的转换。本发明的核心的是将CML文本中存储的每个原子与化学键及其它数字信息一一对应盲文化学公式的每个原子及相应的信息。转换线性结构的化学公式时我们使用统计的方式,将每种原子及它的个数使用化学公式常规的书写规则转换为中国化学盲文。而在翻译结构式等非线性化学公式时,使用映射的思想将CML文本的原子与化学键一一映射到中国化学盲文。
根据一种优选实施方式,所述转换逻辑层配置为将转换的化学盲文传输至所述用户界面层。所述用户界面层以用户能够感知的方式将所述化学盲文反馈至用户。
根据一种优选实施方式,所述转换逻辑层配置为对所述用户界面层传输的CML文件验证是否规范化以完成预处理。所述转换逻辑层配置为对规范化的CML文件进行解析从而生成转换为化学盲文的第一反馈结果。所述转换逻辑层配置为基于非规范化的CML文件生成关于错误信息的第二反馈结果。所述转换逻辑层配置为将所述第一反馈结果或第二反馈结果传输至所述用户界面层。
根据一种优选实施方式,所述转换逻辑层配置为将规范化CML文件解析为DOM树。所述转换逻辑层配置为将被解析的规范化CML文件封装成第一节点返回以作为CML文件的入口。所述转换逻辑层配置为通过第二节点集合CML文件所表示的化学信息。所述转换逻辑层配置为基于第二节点集合的CML文件的化学信息判定DOM树类型。所述转换逻辑层配置为基于DOM树类型和所述用户界面层传输的用户选择的转换类型调用第一转换流程或第二转换流程或第三转换流程。
根据一种优选实施方式,在转换类型为一维线性化学公式且CML节点包含第三节点的情况下,所述转换逻辑层配置为调用第一转换流程。在转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况下,所述转换逻辑层配置为调用第二转换流程。在转换类型为结构式且CML节点包含第五节点的情况下,所述转换逻辑层配置为调用第三转换流程。所述第五节点至少包括atomArray子节点和bondArray子节点。
根据一种优选实施方式,所述转换逻辑层配置为至少通过如下步骤执行第一转换流程:基于DOM树的根节点CML节点获取第三节点信息;将所述第三节点信息以Key值和对应的Value值的形式存储在数组中;在存储数组的哈希表中基于数组内的至少一个元素进行排序;遍历排序后的哈希表中每个Key值和对应的Value值,并将Key和Value值添加到同一个字符串中;将字符串转换为化学盲文ASCII码。
根据一种优选实施方式,所述第三节点信息至少包括第一标签、第二标签、第三标签中的一个或几个。第一标签的种类作为Key值,对应的Value值至少包括第一元素、第二元素、第三元素中的一个或几个。第一元素为该种类第一标签出现的次数。第二元素为该种类第一标签对应的第二标签的值之和。第三元素为该种类第一标签对应的第三标签的值之和。优选地,在存储数组的哈希表中基于所述第二元素进行排序。优选地,排序可以是按照第一顺序排序。第一顺序排序是按照第二元素的值从小到大进行排序。
根据一种优选实施方式,在所述转换逻辑层执行第一转换流程将字符串转换为化学盲文ASCII码的情况下,所述转换逻辑层配置为统计字符串中不同的元素以将每个不同元素出现的次数存储于第二数组。所述转换逻辑层配置为将不同元素的类别存储于第三数组。所述转换逻辑层配置为将所述第二数组和第三数组的值转换为盲文ASCII码。
根据一种优选实施方式,所述转换逻辑层配置为至少通过如下步骤执行第二转换流程:基于DOM树的根节点CML节点获取第四节点的信息;基于第四节点获取其第四标签的内容,并将第四标签的内容保存至第四数组中;去除第四数组的两端和中间的空格,并将去除空格后的第四数组转换为盲文ASCII码。
根据一种优选实施方式,所述转换逻辑层配置为至少通过如下步骤执行第三转换流程:基于第五节点获取其标签信息,并标签信息分别存储在表示标签的标签数组和表示坐标的坐标数组中;去除所述坐标数组中重复的元素后进行排序;基于排序后的坐标数组和标签数组构建矩阵;根据坐标信息将第五节点的atom子节点中每个原子的盲文ASCII码赋值于矩阵;计算第五节点的bond子节点中每个化学键的位置以获取此原子在矩阵中的坐标;基于所述矩阵输出相应的盲文ASCII码。
本发明还提供一种CML到化学盲文的转换方法,所述方法至少包括:对录入的CML文件进行预处理以生成规范化CML文件;解析CML文件并转换为DOM树;对DOM树进行类型划分并转换为化学盲文。
附图说明
图1是本发明系统的一种优选实施方式的模块示意图;
图2是本发明方法的一种优选实施方式的步骤流程示意图;
图3是本发明的步骤S100的一种优选实施方式的步骤流程示意图;
图4是本发明的步骤S200的一种优选实施方式的步骤流程示意图;
图5是本发明的步骤S300的一种优选实施方式的步骤流程示意图;
图6是本发明的步骤S310的一种优选实施方式的步骤流程示意图;
图7是本发明的步骤S320的一种优选实施方式的步骤流程示意图;
图8是本发明的步骤S330的一种优选实施方式的步骤流程示意图;
图9是本发明的步骤S340的一种优选实施方式的步骤流程示意图;
图10是本发明的化学符号转换ASCII码算法的步骤流程示意图;
图11是六点盲文示意图;
图12是乙烷的结构式示意图;
图13是乙烷和水的CML代码示意图;
图14是乙烷和水的CML文件对应的DOM树;
图15是盲文ASCII码对应盲文参照表;
图16是C2H6的结构式的中国化学盲文;
图17是C2H6的分子式的中国化学盲文;
图18是H2O的分子式的中国化学盲文。
附图标记列表
100:用户界面层 200:转换逻辑层 110:录入模块 120:选择模块
130:结果预览模块 210:预处理模块 220:解析模块 230:转换模块
具体实施方式
下面结合附图1至18进行详细说明。首先对背景知识和技术术语进行解释。
盲文(Braille)最基本的盲文符号盲文点字,由6个点组成,根据点的填充与否可形成64种变化,即64个点符(盲符)。计算机中也可用盲文ASCII码表示盲文,即64个点符对应64个盲文ASCII码(ASCII字符组成)。盲文ASCII码极大地方便盲文处理,并且是盲人点显器、盲文刻印机等设备的标准输入。
化学盲文:根据我国于2010年发布的《中国盲文数学、物理、化学符号GB/T 18028-2010》,常见的化学符号的写法和使用规则如下:①中国盲文中规定大写字母要加大写号而小写字母则通常省略小写号/>如:Zn的盲文为/>Une的盲文为/>②中国盲文中写数字和元素符号时,其在符号前需加指数方向符,同时用降点位写数,一般省略其结束符;如:碳—12核素/>的盲文为/>的盲文为/>③离子符号中,一般把化合价写在元素右上角,而化合价主要由阿拉伯数字和正、负号组成;盲文中需先写元素符号,其次写右上方标志方向符,最后写数字和正、负号;若正号前有阿拉伯数字,则正号前需添加分隔符,如:硫离子(S2-)的盲文为/>
CML:化学标记语言(Chemical Markup Language,CML)是一种基于XML的化学标记语言。XML(eXtensible Markup Language)可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。CML用于在计算机中描述化学分子、化学结构式、光谱等化学数据。CML的制定使得明眼人能更便捷地在计算机中存储和计算化学式子。但是视障者使用计算机获取化学式子信息存在一定的障碍。
CML语法:本发明主要使用分子规范解析及转换CML。分子规范,顾名思义是用于指定分子有关的化学公式的规范、准则。分子规范主要包括molecule、atomArray、bondArray、formula、property、scalar、label、name、atom、atomParity、bond以及BondStereo等常见元素。分子规范所常用的标签主要有ID、count、atomArray、bondArray、formula、label、name、formalCharge、spinMultiplicity、chirality、spectrum、concise、inline、scalar、dictRef、title、unit、dataType、elementType、x2、y2、x3、y3、z3、isotopeNumber、atomParity、property、order、bondStereo、atomRefs2、atomRefs4等。分子规范中有多种约束,如:①molecule节点必须是CML节点或molecule节点的子节点;②molecule节点必须具备id属性,且id属性值在整个文档范围内的molecule节点间保持唯一;③若某个molecule节点是其它molecule节点的子节点,则它必须有count属性,且此属性值不能为负数;④一个molecule节点不包含子molecule节点时,可包含一个atomArray子节点;⑤一个molecule节点不包含其它molecule节点时,可包含一个bondArray子节点;⑥一个molecule节点可包含多个formula、property、label和name等子节点;⑦atomArray节点必须是molecule或formula节点的子节点,其atomArray元素只是atom节点的容器,且atomArray节点必须包含至少一个atom子节点;⑧bondArray节点必须是molecule节点的子节点,且它是bond节点的容器,必须包含至少一个bond子节点。
DOM:文档对象模型(Document Object Model,DOM)是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口。它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格。文档可以进一步被处理。处理的结果可以加入到当前的页面。DOM可以处理XML、HTML、SVG等可扩展置标语言。在本发明中,CML经过DOM解析可以转换对应的DOM树结构。
DOM解析器:Java中用于解析XML文件时使用的类库,它可以读入基于XML的文件(如:CML),再转成DOM树。同时它包含了遍历DOM树、访问、插入及删除节点的方法。
DOM树:DOM树把CML文件视为一种树结构,通过这棵DOM树可以访问CML中所有的节点,且可以修改或删除相应的内容,也可创建新的元素。
DOM树类型:基于CML语法中的分子规范,可总结出此规范常用的六种DOM树结构。具体如下:
类型1:CML节点的molecule节点仅包括第四节点(formula节点);
类型2:CML节点的molecule节点分别包括name节点、第三节点(atomArray节点)和第四节点(formula节点);
类型3:CML节点的molecule节点分别包括name节点、第三节点(atomArray节点)和第五节点(bondArray节点);
类型4:CML节点的molecule节点分别包括第四节点(formula节点)、第三节点(atomArray节点)和第五节点(bondArray节点);
类型5:CML节点的molecule节点分别包括name节点、第三节点(atomArray节点)、第四节点(formula节点)和第五节点(bondArray节点)。其中第四节点(formula节点)包括至少一个atom节点。第五节点(bondArray节点)包括至少一个bond节点。
类型6:CML节点的molecule节点仅包括三节点(atomArray节点)。三节点(atomArray节点)包括至少一个atom节点。
第一节点:第一节点可以是Document节点。Document节点代表整个XML文件,即代表整个DOM树。可以借助第一节点访问及修改整个DOM树。
第二节点:第二节点可以是NodeList节点。NodeList节点用于存储多个Node节点,并有遍历及修改某个节点的方法。Node节点是用于存储DOM树中的节点。
第三节点:第三节点可以是atomArray节点。atomArray节点可以存储多个atom节点。而atom节点主要用于存储单个原子的写法、坐标、离子系数、同位素系数等信息。
第四节点:第四节点可以是formula节点。formula节点可以存储化学分子式的写法。
第五节点:第五节点可以是bondArray节点。bondArray节点可以存储多个bond节点。而bond节点可以存储化学键两端原子的ID及化学键的类型。
键值对(Key=Value):每个键对应着相应的数值,每个键对应着相应的数值。Key是关键字。Value是值。键值对用于存储数据或内容元素,是一种存储形式。
哈希表(Hash table):也称为散列表,是根据键值对(Key=Value)而直接进行访问的数据结构。也就是说,它通过把键值对映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
基排序:基排序又可以称为基数排序(Radix Sort)。此排序属于“分配式排序”。它是透过键值的部份信息,将要排序的元素分配至某些“桶”中,藉以达到排序的目的。
实施例1
如图2所示,本实施例公开了一种CML到化学盲文的转换方法。在不造成冲突或者矛盾的情况下,其他实施例的优选实施方式的整体和/或部分内容可以作为本实施例的补充。
如图2所示,CML到化学盲文的转换方法,至少包括如下步骤:
S100:对录入的CML文件进行预处理以生成规范化CML文件。
S200:解析CML文件并转换为DOM树。
S300:对DOM树进行类型划分并转换为化学盲文。
优选地,本实施例可以将化一维线性化学公式和二维平面化学公式转换为对应的化学盲文。一维线性化学公式至少包括化学元素、同位素、分子式、离子式等。二维平面化学公式至少包括结构式。
优选地,如图3所示,步骤S100还包括如下步骤:
S110:录入CML文件。优选地,可以手动输入CML代码,进而生成CML文件并录入至本系统。优选地,可以使用中间软件生成CML文件。中间软件可以是Chem4Word、ChemOffice等软件。优选地,还可以接入网络下载CML文件。下载的CML文件可以上传至本系统。优选地,输入转换的类型。由于化学公式的书写方式可以是分子式和结构式,因此用户可以输入想要转换的类型,从而转换为相应的化学表达式。优选地,系统可以将CML文件转换为化学表达式。化学表达式可以是分子式或结构式。优选地,输入转换的类型可以通过变量type来表示。例如,type=0表示转换为分子式。type=1表示转换为结构式。优选地,本实施例以乙烷和水的CML代码为转换实例。图13是乙烷和水的CML代码。为了表述方便,用C2H6表示乙烷。用H2O表示水。优选地,C2H6的结构式示意图如图12所示。
S120:基于录入的CML文件验证CML文件是否规范化。优选地,基于将步骤S110录入的CML文件获取CML文件的内容。使用CML Schema或CML DTD对CML文件的内容进行自动检查以判断是否符合标准。优选地,如果CML文件的内容符合标准,则进行下一步骤。如果CML文件的内容不符合标准,则提示用户检查录入的CML文件,并进行修改。
优选地,图4是步骤S200的步骤流程示意图。步骤S200至少包括如下步骤:
S210:基于录入的CML文件转换为DOM树。优选地,可以通过DOM接口将步骤S100输出的CML文件转换为DOM树。优选地,可以通过DOM解析器的Parse将整个被解析的CML文件封装成第一节点返回。优选地,DOM解析器可以是Java自带的类库。Java自带的类库可以将CML文件直接转换成DOM树。优选地,第一节点可以是Document节点。Document节点是Java的一个接口。可以通过Document节点获取Element节点的相关信息。优选地,示例C2H6和H2O的DOM树如图14所示。优选地,在图14中,molecule节点可存储化学式信息。name节点可以存储分子式名称。atomArray节点可以保存每个原子信息的atom节点。formula节点通常用最简洁的方式存储分子式的信息。而bondArray节点存储保存每个化学键的bond节点。
S220:基于第一节点作为CML文件的入口。通过第二节点集合CML文件所表示的化学信息。优选地,第二节点可以有序集合CML文件所表示的化学信息。优选地,第二节点可以集合CML文件所表示的有用化学信息。优选地,第二节点可以按照第一顺序集合CML文件所表示的化学信息。第一顺序可以是从上往下依次获得CML文件表示的化学信息。优选地,第二节点可以是NodeList节点。NodeList节点是保存Node节点的集合。
优选地,图5是步骤S300的步骤流程示意图,包括如下步骤:
S310:基于第二节点集合的CML文件的化学信息判定DOM树类型。优选地,基于DOM树类型和转换类型调用转换流程。优选地,DOM树中CML节点为根节点。DOM树共包括六种通用类型。不同类型的DOM树中CML节点包含的节点不同。根据不同类型的DOM树中CML节点包含的节点可以转换对应不同类型的化学公式。不同类型的化学公式包括一维线性化学公式和二维平面化学公式。优选地,转换类型至少可以包括化学元素、同位素、分子式、离子式、结构式。优选地,转换流程包括第一转换流程、第二转换流程和第三转换流程。优选地,基于DOM树类型和转换类型调用转换流程的步骤如图6所示,至少包括:
S311:如果转换类型为一维线性化学公式且CML节点包含第三节点的情况下,则调用第一转换流程。优选地,可以用type=0表示转换类型为一维线性化学公式中的分子式。第三节点可以是CML节点的子节点。该第三节点包括atomArray子节点。
S312:如果转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况下,则调用第二转换流程。优选地,第四节点可以是CML节点的子节点。该第四节点包括formula子节点。
S313:如果转换类型为结构式且CML节点包含第五节点的情况下,则调用第三转换流程。优选地,可以用type=1表示转换类型为结构式。第五节点是CML节点的子节点。该第五节点至少包括atomArray子节点和bondArray子节点。
S314:如果不是以上情况,则转换结果为空。例如,当变量type=1时,H2O由于没有atomArray和bondArray节点,即没有第五节点,所以直接退出。
S320:第一转换流程,用于处理转换类型为一维线性化学公式且CML节点包含第三节点的情况。例如,当type=0,表示转换类型为分子式时,C2H6的子节点中包含atomArray子节点。即C2H6包含第三节点。则通过步骤S320将C2H6转换为分子式的化学盲文ASCII码。如图7所示,步骤S320至少包括如下步骤:
S321:基于DOM树的根节点CML节点获取第三节点。基于第三节点获取其子节点信息。例如,第三节点可以是atomArray子节点。第三节点的子节点序列由多个atom节点构成。可以获取atom节点的第一标签、第二标签和第三标签的内容。优选地,第一标签可以是elementType标签。elementType标签用于存储原子名称。第二标签可以是formalCharge标签。formalCharge标签用于存储离子式的离子系数。第三标签可以是isotopeNumber标签。isotopeNumber标签用于存储同位素数。优选地,将第一标签、第二标签和第三标签的内容存储在数组中。在数组中以“Key=Value”键值对的形式对应存储。优选地,数组可以采用第一标签的种类作为Key。例如,可以是elementType标签的种类作为Key。优选地,Key对应的Value至少包括第一元素、第二元素和第三元素。优选地,第一标签的种类出现的次数作为数组的第一元素。例如,第一元素可以是该elementType标签种类出现的次数。优选地,第一标签的种类对应的第二标签的值之和作为数组的第二元素。例如,第二元素可以是elementType标签种类对应的所有formalCharge标签内离子系数的和值。优选地,第一标签的种类对应的第三标签的值之和作为第三元素。例如,第三元素可以是elementType标签种类对应的所有isotopeNumber值的和值。优选地,数组可以存储在哈希表中。如果产生哈希碰撞,对此Key的Value累加即可。
S322:在哈希表中基于第二元素的绝对值进行排序。优选地,按照从小到大的方式进行排序。将排序之后的哈希表中的Key分为左右两部分。左边的是formalCharge标签的值为0的部分。右边的是formalCharge的值不为0的部分。优选地,在此基础上对左边的部分中选取氧元素放在该部分的最右边。然后选取金属元素并放在该部分的最左边。优选地,如果一维线性化学公式不是离子式,其formalCharge标签的值为0。
S323:遍历哈希表中每个Key值和对应的Value,并将Key和Value添加到同一个字符串中。优选地,Value的第一元素直接添加到Key值后。优选地,在添加Value的第二元素或第三元素时,在第二元素或第三元素之前添加第一符号。第一符号可以是“^”。优选地,在添加Value的第二元素或第三元素时,需要添加正负号。正负号添加在数字之后。通过第一符号可以表示第二元素或第三元素是Key的上标。优选地,上标包括左上标。上标包括右上标。
S324:将字符串转换为化学盲文ASCII码。例如,C2H6的第三节点为atomArray。将该第三节点的子节点atom节点的信息分别存入数组中的第一标签和第二标签中。第一标签为:“C”、“C”、“H”、“H”、“H”、“H”、“H”、“H”。对应的盲文分别为:优选地,如果第二标签为空,可以统计第一标签中不同的元素。优选地,可以将第一标签中每个不同元素出现的次数存储于第二数组。第二数组可以是temp数组。将不同元素的类别存储于第三数组。第三数组可以是elemT。优选地,第二数组和第三数组可以将每个原子一一映射到转换的结果中。例如第二数组的值为:“C”、“H”。第三数组的值为:“2”、“6”。优选地,根据中国化学盲文转换规则转换第二数组和第三数组中的值为盲文ASCII码。例如,C2H6的第二数组和第三数组为“_C2H6”。
S330:第二转换流程,用于处理转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况。例如,当type=0,表示转换类型为分子式时,H2O包含第四节点(formula子节点)且不包含第三节点(atomArray子节点)。则通过步骤S330将H2O转换为分子式的化学盲文ASCII码。如图8所示,步骤S330至少包括如下步骤:
S331:基于DOM树的根节点CML节点获取第四节点的内容。优选地,基于第四节点获取其第四标签的内容。将第四标签的内容保存至第四数组中。优选地,第四标签可以是concise标签。concise标签用于以最简洁的方式存储化学公式信息。此标签保存非结构化式子。第四数组可以是字符串conciseString。例如,H2O的formula子节点的第四标签可以是concise标签,将concise标签的内容保存在第四数组之后,结果为“H”、“2”、“O”。
S332:去除第四数组的两端和中间的空格,并基于中国化学盲文规则转换为盲文ASCII码。例如,将字符串conciseString两端和中间的空格去除,然后根据中国化学盲文规则将字符串conciseString中的值转换为盲文ASCII码,如“_H2O”。
S340:第三转换流程,用于处理转换类型为结构式且CML节点包含第五节点的情况。优选地,第五节点至少包括atomArray和bondArray两个子节点。例如,当变量type=1,C2H6的子节点中有atomArray和bondArray子节点。则通过步骤S340将C2H6转换为结构式的化学盲文ASCII码。如图9所示,步骤S340至少包括如下步骤:
S341:基于第五节点获取其标签信息。优选地,将标签信息分别存储在表示标签的标签数组和表示坐标的坐标数组中。优选地,标签数组至少包括atomIdArray数组、atomElementArray数组、bondIdArray数组。坐标数组至少包括atomXArray数组、atomYArray数组、atomRefsArray数组和orderArray数组。
优选地,获取节点atomArray的子节点atom的标签ID、第一标签信息以及坐标信息。优选地,第一标签可以是elementType标签。坐标信息至少包括x2和y2。由于采用矩阵的形式表示,因此以x轴表示矩阵的横向。以y轴表示矩阵的纵向。将子节点atom的标签ID、第一标签信息以及坐标信息分别存储在数组中。优选地,将子节点atom的标签ID存储在数组atomIdArray中。将第一标签信息存储在atomElementArray数组中。将坐标中x2的信息存储在atomXArray数组中。将y2信息存储在atomYArray数组中。例如,C2H6中所有atom子节点的elementType标签信息为“C”、“C”、“H”、“H”、“H”、“H”、“H”、“H”。对应的盲文分别为:
优选地,获得节点bondArray的子节点bond的标签ID、atomRefs2标签、order标签。优选地,atomRefs2标签用于存储化学键两端原子的ID。order标签用于存储化学键的类型。优选地,子节点bond的标签ID存储在bondIdArray数组中。atomRefs2标签的内容存储在atomRefsArray数组中。order标签的内容存储在orderArray数组中。例如:C2H6中所有bond子节点的order标签的信息为“S”、“S”、“S”、“S”、“S”、“S”、“S”。对应的盲文分别为:(水平一价键和垂直一价键的盲文不同)。
S342:优选地,对表示坐标y2的atomYArray数组进行排序。优选地,利用基排序对atomYArray数组进行排序。在atomYArray数组有序的前提下对表示坐标x2的atomXArray数组进行排序。排序可以是按从小到大的顺序。排序也可以是按从大到小的顺序。例如,C2H6的一维排列如表1所示。表1中第一列为atomXArray数组、atomYArray数组的下标。表1中第二列为最初获得的atomXArray数组、atomYArray数组的顺序。表1中第三列为利用基排序从大到小进行排列之后的顺序。
表1 C2H6的一维排列
序号 排序前 排序后
0 a1C a8H
1 a2C a3H
2 a3H a7H
3 a4H a2C
4 a5H a1C
5 a6H a4H
6 a7H a6H
7 a8H a5H
S343:去除atomXArray数组中的重复的元素。将不重复的元素存储于atomXArraySingle数组中。优选地,atomXArray数组中元素为x2。优选地,去除atomYArray数组中重复的元素。将不重复的元素存储于atomYArraySingle数组中。优选地,atomYArray数组中的元素为y2。优选地,对atomXArraySingle数组进行升序排序。对atomYArraySingle数组进行降序排序。
优选地,将atomXArray数组中不重复的元素出现次数存储于x2fdNum数组中。将atomXArray数组中不重复的元素数目存于变量xTotal。优选地,在对atomXArraySingle数组进行排序的情况下,同时对应的x2fdNum数组内值的位置也对应变化。优选地,将atomYArray数组中不重复的元素出现次数存储于y2fdNum数组中。将atomYArray数组中不重复的元素数目存于变量yTotal。在对atomYArraySingle数组进行排序的情况下,同时对应的y2fdNum数组内值的位置也对应变化。
S344:构建矩阵。矩阵可以是二维矩阵。优选地,为表述方便,使用符号canvas[][]表示构建的二维矩阵。该矩阵纵向长度为lengthY。横向长度为lengthX。将矩阵canvas[][]初始化成全元素为“”(两个空格)。优选地,矩阵中可以利用“-1”表示空格。优选地,初始化的canvas[][]如下式所示:
优选地,矩阵canvas[][]内下标“[][]”数字0~99代表atom子节点中atomElementArray数组的下标。101~112代表化学键,其映射关系如表2所示。优选地,在化学结构式的平面中,横向或纵向维度上,每个原子必须至少与一个化学键相连,并且化学键两端都必须与某个原子相连。即每两个表示原子的行之间必须含有化学键将这两行的原子连接起来,每两个表示原子的列之间必须含有化学键将这两列的原子连接起来。因此,可以用/>计算出矩阵canvas[][]横向长度lengthX。m为atomXArraySingle数组的长度。同理可用式子/> 计算出矩阵canvas[][]纵向长度lengthY。n为atomYArraySingle数组的长度。例如,示例C2H6的xTotal=4,yTotal=3。
S345:根据坐标信息将atom子节点中每个原子的盲文ASCII码赋值于矩阵canvas[][]。优选地,基于化学符号转换ASCII码算法将atom子节点中每个原子转换为盲文ASCII码。
优选地,将盲文ASCII码赋值于矩阵canvas[][]的过程如下:
首先遍历atomXArray数组和atomYArray数组。分别判断atomXArray数组和atomYArray数组中的每个元素在数组atomXArraySingle、atomYArraySingle中所处的位置。对x1和x2进行一次乘二运算转换成当前原子在矩阵canvas[][]的下标值。最后根据此次遍历到的数组atomXArray的当前坐标定位到atomElementArray数组中相应的元素。然后,调用化学符号转换ASCII码算法转成盲文ASCII码后赋值给canvas[2*x1][2*x2]元素。遍历的同时把每种元素对应的ID(根据数组下标从atomIdArray数组中获取)作为Key。2*x1和2*x2构成的数组作为Value存储到哈希表中。
S346:计算出bond子节点中每个键的位置。具体为从数组atomRefsArray中获取每个化学键两端对应的原子的标签ID。再根据此标签ID从哈希表中获取此原子在矩阵canvas[][]中的坐标。优选地,具体的对应关系如表2所示。
优选地,如表2所示,化学键两端原子确定后在矩阵canvas[][]中从每个原子所在的位置到另外一个原子所在的位置为止的直线路径上的元素赋值为此化学键的盲文ASCII码。具体为,如果化学键两端的原子处于同一个水平线上,根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,orderArray数组对应的元素值包括S或1、D或2、T或3三种情况。相应的盲文ASCII码为S或1对应“-”。D或2对应“X”。T或3对应“=”。优选地,如果化学键两端的原子处于右上左下的关系,则根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“,I”。D或2对应“,[I”。T或3对应“,[[I”。优选地,如果化学键两端的原子处于左上右下的关系,根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“@5”。D或2对应“@[5”。T或3对应“@[[5”。优选地,如果化学键两端的原子处于垂直一条线上,则根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“_”。D或2对应“_L”。T或3对应“_=”。
表2数字和化学信息映射表
优选地,存储C2H6编号的canvas[][]矩阵如下所示:
优选地,基于上式中的编号转换成相应化学信息,得到存储C2H6的canvas[][]矩阵如下所示:
/>
S347:目前矩阵canvas[][]中已经存储了整个结构式的盲文ASCII码。因此,需要对矩阵canvas进行格式优化。目的为每列的盲文ASCII码都进行左对齐,并且不影响其他列的盲文ASCII码的对齐。优选地,基于列对矩阵进行遍历。默认矩阵canvas[][]中的每个元素占两个字,即元素长度等于2。遍历时会有几种情况:
A、当前元素长度lengthElem等于2或0时,直接跳过;
B、当前元素长度lengthElem小于2且不为空格时,此元素后添加一个空格使其长度等于2;
C、当前元素长度lengthElem大于3时,需判断此元素到它直系右边的元素间的距离lengthTE。优选地,xi是当前元素在矩阵canvas[][]中的x坐标。xj是当前元素右边第一个元素在矩阵中的x坐标。若lengthTE大于lengthElem-2,则根据lengthElem-2的长度对其此元素相邻的右边元素进行去除。即使用此元素lengthElem-2的部分代替其右边的元素(空格)的位置。若lengthTE小于lengthElem-2则,其此元素右边lengthTE长度中的元素变为“”。之后在此列所有元素后添加lengthElem-2-lengthTE个空格。若此元素右边为化学键,则此列所有元素后添加lengthELem-2个空格。
优选地,按照步骤S345至步骤S347遍历矩阵canvas[][]中每个元素。根据表3、表4,输出相应的盲文ASCII码,得到C2H6对应的盲文ASCII码,如下式所示:
优选地,表3为数字和字母对应盲文ASCII码参照表。表4为化学符号对应盲文ASCII码参照表。
表3数字和字母对应盲文ASCII码参照表
数字 0 1 2 3 4 5 6 7 8 9
盲文ASCII码 #J #A #B #C #D #E #F #G #H #I
表4化学符号对应盲文ASCII码参照表
S350:基于CML节点得到的化学盲文ASCII码转换为化学盲文。通过如图15所示的盲文ASCII码对应盲文参照表可以得到如图16至图18所示的化学盲文。优选地,图16为C2H6的结构式的中国化学盲文。图17是C2H6的分子式的中国化学盲文。图18是H2O的分子式中国化学盲文。
优选地,化学符号转换ASCII码算法至少包括如下步骤:
S410:将化学公式字符串拆分为单个字符存入字符数组。字符数组可以用cArray数组表示。
S420:使用start和end两个指针遍历数组cArray。Start指针指向数组的第一个元素。End指针指向数组的第二个元素(若有第二个元素)。同时遍历到的结果会保存到结果字符串resArray中。
优选地,如果数组cArray的长度小于2且此元素是大写字母时,直接在此元素前添加单个拉丁字母大写号在添加单个拉丁字母大写号后一起追加到结果字符串resArray中。否则直接把数组中的元素追加到resArray中。
优选地,如果数组cArray的长度大于等于2,end指针开始遍历。目的是寻找连续大写字母个数。end指针遍历到小写字母就停止遍历。此时若end-start>2且end指针到start指针的字符中包括两个以上大写字母,则数组中start指针到end指针的字符组成的字符串前添加连续拉丁字母大写号end指针指向的元素的前一个大写字母元素前,添加个单个拉丁字母大写号/>从而组成一个字符串。最后把整个字符串直接追加到结果字符串resArray后。
优选地,若end-start=2且end指针到start指针的字符中包括两个大写字母,则数组中start指针到end指针的字符组成的字符串前添加单个拉丁字母大写号end指向的字符前一个大写字母元素前添加个单个拉丁字母大写号/>组成字符串。最后把组成的字符串追加到字符串resArray后。
优选地,若end-start<2且end到start的字符中只包含一个大写字母,则直接在start和end指向的字符组成的字符串前加单个拉丁字母大写号并追加到结果字符串resArray中。之后start指针指向end指针指向的字符位置。end再指向数组中的下个字符,直到遍历完整个数组。
优选地,在整个字符数组的元素添加到字符串的过程中,括号“(”要转成尖括号“<”。括号“)”要转成尖括号“>”。在遍历过程中,每次end指针到start指针指向的字符组成的字符串追加到结果字符串resArray时,检查此字符串中是否包含第一符号“^”。若包含,则把其中的“^”字符转换成字符“.”。同时“^”后边的数字可以根据图4转换成盲文ASCII码。若数字后边有加号则此符号前加逗号作为分隔符。优选地,加号转换成盲文ASCII码“6”。减号则转成盲文ASCII码“-”。
S430:经过以上的遍历,已把字符数组转成了对应的盲文ASCII码。
实施例2
如图1所示,本实施例公开了一种CML到化学盲文的转换系统,在不造成冲突或者矛盾的情况下,其他实施例的优选实施方式的整体和/或部分内容可以作为本实施例的补充。
如图1所示,本实施例公开的CML到化学盲文的转换系统,至少包括用户界面层100和转换逻辑层200。用户界面层100用于用户提供CML录入和翻译结果展示。优选地,用户界面层100还可以为用户提供相应服务的图形化界面。优选地,用户界面层100至少包括录入模块110、选择模块120以及结果预览模块130。优选地,用户界面层100和转换逻辑层200可以通过电子设备实现。优选地,电子设备至少包括处理器、存储器和显示设备。存储器存储处理发出的指令。处理被配置为执行存储器存储的指令。显示器用于显示用户界面层100中相应的图形化服务。显示器可以显示用户界面层100中录入模块110、选择模块120和结果预览模块130。处理器被配置为执行转换逻辑层200所执行的操作。存储器存储用户界面层100和转换逻辑层200内产生的数据和操作指令。优选地,处理器可以是中央处理器(CentralProcessing Unit,CPU),通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application-Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。存储器可以是磁盘、硬盘、光盘、移动硬盘、固态硬盘、闪存等。
优选地,录入模块110用于录入待转换的CML文件。优选地,可以通过手动输入CML代码或者上传CML文件的方式录入待转换的CML文件。优选地,可以使用中间软件生成CML文件。中间软件可以是Chem4Word、ChemOffice等软件。优选地,还可以接入网络下载CML文件。下载的CML文件可以上传至本系统。优选地,录入模块110将录入的CML文件传输至转换逻辑层200。
优选地,选择模块120用于输入转换的类型。由于化学公式的书写方式可以是分子式和结构式,因此用户可以输入想要转换的类型,从而转换为相应的化学表达式。优选地,系统可以将CML文件转换为化学表达式。化学表达式可以是分子式或结构式。优选地,输入转换的类型可以通过变量type来表示。例如,type=0表示转换为分子式。type=1表示转换为结构式。优选地,选择模块120将转换的类型信息传输至转换逻辑层200。
优选地,结果预览模块130用于显示转换的结果。结果预览模块130可下载和打印转换的盲文ASCII码和盲文点字。优选地,结果预览模块130接收转换逻辑层200传输的转换结果。
优选地,转换逻辑层200至少包括预处理模块210、解析模块220和转换模块230。优选地,预处理模块210用于对录入的CML文件进行预处理。优选地,预处理至少包括获取录入的CML文件。预处理还包括验证录入的CML文件是否规范化。优选地,基于录入模块110录入的CML文件获取CML文件的内容。使用CML Schema或CML DTD对CML文件的内容进行自动检查以判断是否符合标准。优选地,如果CML文件的内容符合标准,则进行下一步骤。或者将CML文件预处理后传输至解析模块220。如果CML文件的内容不符合标准,则提示用户检查录入的CML文件,并进行修改。优选地,预处理模块210接收录入模块110传输的CML文件。预处理模块210与解析模块220连接。预处理模块210将预处理后的CML文件传输至解析模块220。优选地,选择模块120可以将转换类型的信息传输至解析模块220或预处理模块210。
优选地,解析模块220解析预处理模块210传输的CML文件,并转换为DOM树。优选地,解析模块220基于预处理模块210传输的CML文件转换为DOM树。优选地,可以通过DOM接口将预处理模块210输出的CML文件转换为DOM树。优选地,DOM接口可以是Java自带的辅助XML文件转换DOM树的接口。优选地,可以通过DOM解析器的Parse将整个被解析的CML文件封装成第一节点返回。优选地,DOM解析器可以是Java自带的类库。Java自带的类库可以将CML文件直接转换成DOM树。优选地,第一节点可以是Document节点。Document节点是Java的一个接口。可以通过Document节点获取Element节点的相关信息。
优选地,解析模块220配置为基于第一节点作为CML文件的入口。通过第二节点集合CML文件所表示的化学信息。优选地,第二节点可以有序集合CML文件所表示的化学信息。优选地,第二节点可以集合CML文件所表示的有用化学信息。优选地,第二节点可以按照第一顺序集合CML文件所表示的化学信息。第一顺序可以是从上往下依次获得CML文件表示的化学信息。优选地,第二节点可以是NodeList节点。NodeList节点是保存Node节点的集合。
优选地,解析模块220将转换的DOM树传输至转换模块230。优选地,转换模块230对解析模块220传输的DOM树进行类型划分并转换为化学盲文。优选地,转换模块230转换的化学盲文传输至结果预览模块130。
优选地,转换模块230配置为基于第二节点集合的CML文件的化学信息判定DOM树类型。优选地,基于解析模块220传输的DOM树类型和选择模块120传输的转换类型调用转换流程。优选地,DOM树中,CML节点为根节点。DOM树共包括六种通用类型。不同类型的DOM树中CML节点包含的节点不同。根据不同类型的DOM树中CML节点包含的节点可以转换对应不同类型的化学公式。不同类型的化学公式包括一维线性化学公式和二维平面化学公式。优选地,转换类型包括一维线性化学公式和结构式。优选地,一维线性化学公式至少包括化学元素、同位素、分子式、离子式。优选地,转换流程包括第一转换流程、第二转换流程和第三转换流程。
优选地,如果转换类型为一维线性化学公式且CML节点包含第三节点的情况下,则调用第一转换流程。优选地,可以用type=0表示转换类型为一维线性化学公式中的分子式。第三节点可以是CML节点的子节点。该第三节点包括atomArray子节点。
优选地,如果转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况下,则调用第二转换流程。优选地,第四节点可以是CML节点的子节点。该第四节点包括formula子节点。
优选地,如果转换类型为结构式且CML节点包含第五节点的情况下,则调用第三转换流程。优选地,可以用type=1表示转换类型为结构式。第五节点是CML节点的子节点。该第五节点至少包括atomArray子节点和bondArray子节点。
优选地,如果不是以上情况,则转换结果为空。例如,当变量type=1时,H2O由于没有atomArray和bondArray节点,即没有第五节点,所以直接退出。
优选地,第一转换流程用于处理转换类型为一维线性化学公式且CML节点包含第三节点的情况。例如,当type=0,表示转换类型为分子式时,C2H6的子节点中包含atomArray子节点。即C2H6包含第三节点。可以通过第一转换流程将C2H6转换为分子式的化学盲文ASCII码。
优选地,第一转换流程配置为执行如下步骤:
1、基于DOM树的根节点CML节点获得第三节点。基于第三节点获取其子节点信息。例如,第三节点可以是atomArray子节点。第三节点的子节点序列由多个atom节点构成。可以获取atom节点的第一标签、第二标签和第三标签的内容。优选地,第一标签可以是elementType标签。elementType标签用于存储原子名称。第二标签可以是formalCharge标签。formalCharge标签用于存储离子式的离子系数。该标签用于实现一维线性化学公式中的离子式的转换。第三标签可以是isotopeNumber标签。isotopeNumber标签用于存储同位素数优选地,将第一标签、第二标签和第三标签的内容存储在数组中。在数组中以“Key=Value”键值对的形式对应存储。优选地,数组可以采用第一标签的种类作为Key。例如,可以是elementType标签的种类作为Key。优选地,Key对应的Value至少包括第一元素、第二元素和第三元素。优选地,第一标签的种类出现的次数作为数组的第一元素。例如,第一元素可以是该elementType标签种类出现的次数。优选地,第一标签的种类对应的第二标签的值之和作为数组的第二元素。例如,第二元素可以是elementType标签种类对应的所有formalCharge标签内离子系数的和值。优选地,第一标签的种类对应的第三标签的值之和作为第三元素。例如,第三元素可以是elementType标签种类对应的所有isotopeNumber值的和值。优选地,数组存储在哈希表中。如果产生哈希碰撞,对此Key的Value累加即可。优选地,第一转换流程在哈希表中基于第二元素的绝对值进行排序。优选地,按照从小到大的方式进行排序。将排序之后的哈希表中的Key分为左右两部分。左边的是formalCharge标签的值为0的部分。右边的是formalCharge的值不为0的部分。优选地,在此基础上对左边的部分中选取氧元素放在该部分的最右边。然后选取金属元素并放在该部分的最左边。优选地,如果一维线性化学公式不是离子式,其formalCharge的值为0。
2、遍历哈希表中每个Key值和对应的Value,并将Key和Value添加到同一个字符串中。优选地,Value的第一元素直接添加到Key值后。优选地,在添加Value的第二元素或第三元素时,在第二元素或第三元素之前添加第一符号。第一符号可以是“^”。优选地,在添加Value的第二元素或第三元素时,需要添加正负号。正负号添加在数字之后。通过第一符号可以表示第二元素或第三元素是Key的上标。优选地,上标包括左上标。上标包括右上标。
3、将字符串转换为化学盲文ASCII码。将化学盲文ASCII符号转换为盲文。例如,C2H6的第三节点为atomArray。将该第三节点的子节点atom节点的信息分别存入数组中的第一标签和第二标签中。第一标签为:“C”、“C”、“H”、“H”、“H”、“H”、“H”、“H”。对应的盲文分别为:优选地,如果第二标签为空,可以统计第一标签中不同的元素。将每个不同元素出现的次数存储于第二数组。第二数组可以是temp数组。将不同元素的类别存储于第三数组。第三数组可以是elemT。例如第二数组的值为:“C”、“H”。第三数组的值为:“2”、“6”。
优选地,根据中国化学盲文转换规则转换第二数组和第三数组中的值为盲文ASCII码。例如,C2H6的第二数组和第三数组为“_C2H6”。
优选地,第二转换流程用于处理转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况。例如,当type=0,表示转换类型为分子式时,H2O包含第四节点(formula子节点)且不包含第三节点(atomArray子节点)。则通过第二转换流程将H2O转换为分子式的化学盲文ASCII码。第二转换流程配置为至少执行如下步骤:
1、基于DOM树的根节点CML节点获取第四节点的内容。优选地,基于第四节点获取其第四标签的内容。将第四标签的内容保存至第四数组中。优选地,第四标签可以是concise标签。concise标签用于以最简洁的方式存储化学公式信息。此标签保存非结构化式子。第四数组可以是字符串conciseString。例如,H2O的formula子节点的第四标签可以是concise标签,将concise的内容保存在第四数组之后,结果为“H”、“2”、“O”。
2、去除第四数组的两端和中间的空格,并基于中国化学盲文规则转换为盲文ASCII码。例如,将字符串conciseString两端和中间的空格去除,然后根据中国化学盲文规则将字符串conciseString中的值转换为盲文ASCII码,如“_H2O”。
优选地,第三转换流程用于处理转换类型为结构式且CML节点包含第五节点的情况。优选地,第五节点至少包括atomArray和bondArray两个子节点。例如,当变量type=1,C2H6的子节点中有atomArray和bondArray子节点。则通过第三转换流程将C2H6转换为结构式的化学盲文ASCII码。第三转换流程配置为至少执行如下步骤:
1、基于第五节点获取其标签信息。优选地,获取atomArray的子节点atom的标签ID、第一标签信息以及坐标信息。优选地,第一标签可以是elementType标签。坐标信息至少包括x2和y2。由于采用矩阵的形式表示,因此以x轴表示矩阵的横向。以y轴表示矩阵的纵向。将子节点atom的标签ID、第一标签信息以及坐标信息分别存储在数组中。优选地,将子节点atom的标签ID存储在数组atomIdArray中。将第一标签信息存储在atomElementArray数组中。将坐标中x2的信息存储在atomXArray数组中。将y2信息存储在atomYArray数组中。例如,C2H6中所有atom子节点的elementType标签信息为“C”、“C”、“H”、“H”、“H”、“H”、“H”、“H”。对应的盲文分别为:
优选地,获得节点bondArray的子节点bond的标签ID、atomRefs2标签、order标签。优选地,atomRefs2标签用于存储化学键两端原子的ID。order标签用于存储化学键的类型。优选地,子节点bond标签ID存储在bondIdArray数组中。atomRefs2标签的内容存储在atomRefsArray数组中。order标签的存储在orderArray数组中。例如:C2H6中所有bond子节点的order标签的信息为“S”、“S”、“S”、“S”、“S”、“S”、“S”。对应的盲文分别为:(水平一价键和垂直一价键的盲文不同)。
3、优选地,对表示坐标y2的atomYArray数组进行排序。优选地,利用基排序对atomYArray数组进行排序。在atomYArray数组有序的前提下对表示坐标x2的atomXArray数组进行排序。排序可以是按从小到大的顺序。排序也可以是按从大到小的顺序。例如,C2H6的一维排列如表1所示.表1中第一列为atomXArray数组、atomYArray数组的下标。表1中第二列为最初获得的atomXArray数组、atomYArray数组的顺序。表1中第三列为利用基排序从大到小进行排列之后的顺序。
4、去除atomXArray数组中的重复的元素。将不重复的元素存储于atomXArraySingle数组中。优选地,atomXArray数组中元素为x2。优选地,去除atomYArray数组中重复的元素。将不重复的元素存储于atomYArraySingle数组中。优选地,atomYArray数组中的元素为y2。优选地,对atomXArraySingle数组进行升序排序。对atomYArraySingle数组进行降序排序。
优选地,将atomXArray数组中不重复的元素出现次数存储于x2fdNum数组中。将atomXArray数组中不重复的元素数目存于变量xTotal。优选地,在对atomXArraySingle数组进行排序的情况下,同时对应的x2fdNum数组内值的位置也对应变化。优选地,将atomYArray数组中不重复的元素出现次数存储于y2fdNum数组中。将atomYArray数组中不重复的元素数目存于变量yTotal。在对atomYArraySingle数组进行排序的情况下,同时对应的y2fdNum数组内值的位置也对应变化。
5、构建矩阵。优选地,矩阵可以是二维矩阵。优选地,为表述方便,使用符号canvas[][]表示构建的二维矩阵。该矩阵纵向长度为lengthY。横向长度为lengthX。将矩阵canvas[][]初始化成全元素为“”(两个空格)。优选地,矩阵中可以利用“-1”表示空格。优选地,初始化的canvas[][]如下式所示:
优选地,矩阵canvas[][]内下标“[][]”数字0~99代表atom子节点中atomElementArray数组的下标。101~112代表化学键,其映射关系如表2所示。优选地,在化学结构式的平面中,横向或纵向维度上,每个原子必须至少与一个化学键相连,并且化学键两端都必须与某个原子相连。即每两个表示原子的行之间必须含有化学键将这两行的原子连接起来,每两个表示原子的列之间必须含有化学键将这两列的原子连接起来。因此,可以用/>计算出矩阵canvas[][]横向长度lengthX。m为atomXArraySingle数组的长度。同理可用式子/> 计算出矩阵canvas[][]纵向长度lengthY。n为atomYArraySingle数组的长度。例如,示例C2H6的xTotal=4,yTotal=3。
6、根据坐标信息将atom子节点中每个原子的盲文ASCII码赋值于矩阵canvas[][]。优选地,基于化学符号转换ASCII码算法将atom子节点中每个原子转换为盲文ASCII码。
优选地,将盲文ASCII码赋值于矩阵canvas[][]的过程如下:
首先遍历atomXArray数组和atomYArray数组。分别判断atomXArray数组和atomYArray数组中的每个元素在数组atomXArraySingle、atomYArraySingle中所处的位置。对x1和x2进行一次乘二运算转换成当前原子在矩阵canvas[][]的下标值。最后根据此次遍历到的数组atomXArray的当前坐标定位到atomElementArray数组中相应的元素。然后,调用化学符号转换ASCII码算法转成盲文ASCII码后赋值给canvas[2*x1][2*x2]元素。遍历的同时把每种元素对应的ID(根据数组下标从atomIdArray中获取)作为Key。2*x1和2*x2构成的数组作为Value存储到哈希表中。
7、计算出bond子节点中每个键的位置。具体为从数组atomRefsArray中获取每个化学键两端对应的原子的标签ID。再根据此标签ID从哈希表中获取此原子在矩阵canvas[][]中的坐标。优选地,具体的对应关系如表2所示。
优选地,如表2所示,化学键两端原子确定后在矩阵canvas[][]中从每个原子所在的位置到另外一个原子所在的位置为止的直线路径上的元素赋值为此化学键的盲文ASCII码。具体为,如果化学键两端的原子处于同一个水平线上,根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,orderArray数组对应的元素值包括S或1、D或2、T或3三种情况。相应的盲文ASCII码为S或1对应“-”。D或2对应“X”。T或3对应“=”。优选地,如果化学键两端的原子处于右上左下的关系,则根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“,I”。D或2对应“,[I”。T或3对应“,[[I”。优选地,如果化学键两端的原子处于左上右下的关系,根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“@5”。D或2对应“@[5”。T或3对应“@[[5”。优选地,如果化学键两端的原子处于垂直一条线上,则根据orderArray数组对应的元素值选择相应的盲文ASCII码。优选地,S或1对应“_”。D或2对应“_L”。T或3对应“_=”。
优选地,存储C2H6编号的canvas[][]矩阵如下所示:
优选地,基于上式中的编号转换成相应化学信息,得到存储C2H6的canvas[][]矩阵如下所示:
8、目前矩阵canvas[][]中已经存储了整个结构式的盲文ASCII码。因此,需要对矩阵canvas进行格式优化。目的为每列的盲文ASCII码都进行左对齐,并且不影响其他列的盲文ASCII码的对齐。优选地,基于列对矩阵进行遍历。默认矩阵canvas[][]中的每个元素占两个字,即元素长度等于2。遍历时会有以下情况:
A、当前元素长度lengthElem等于2或0时,直接跳过;
B、当前元素长度lengthElem小于2且不为空格时,此元素后添加一个空格使其长度等于2;
C、当前元素长度lengthElem大于3时,需判断此元素到它直系右边的元素间的距离lengthTE。优选地,xi是当前元素在矩阵canvas[][]中的x坐标。xj是当前元素右边第一个元素在矩阵中的x坐标。若lengthTE大于lengthElem-2,则根据lengthElem-2的长度对其此元素相邻的右边元素进行去除。即使用此元素lengthElem-2的部分代替其右边的元素(空格)的位置。若lengthTE小于lengthElem-2则,其此元素右边lengthTE长度中的元素变为“”。之后在此列所有元素后添加lengthElem-2-lengthTE个空格。若此元素右边为化学键,则此列所有元素后添加lengthELem-2个空格。
优选地,遍历矩阵canvas[][]中每个元素。根据表3、表4,输出相应的盲文ASCII码,得到C2H6对应的盲文ASCII码,如下式所示:
优选地,表3为数字和字母对应盲文ASCII码参照表。表4为化学符号对应盲文ASCII码参照表。
优选地,基于转换的化学盲文ASCII码转换为化学盲文。通过如图15所示的盲文ASCII码对应盲文参照表可以得到如图16至图18所示的化学盲文。优选地,图16为C2H6的结构式的中国化学盲文。图17是C2H6的分子式的中国化学盲文。图18是H2O的分子式中国化学盲文。
优选地,化学符号转换ASCII码算法至少执行如下步骤:
1、将化学公式字符串拆分为单个字符存入字符数组。字符数组可以用cArray数组表示。
2、使用start和end两个指针遍历数组cArray。Start指针指向数组的第一个元素。End指针指向数组的第二个元素(若有第二个元素)。同时遍历到的结果会保存到结果字符串resArray中。
优选地,如果数组cArray的长度小于2且此元素是大写字母时,直接在此元素前添加单个拉丁字母大写号在添加单个拉丁字母大写号后一起追加到结果字符串resArray中。否则直接把数组中的元素追加到resArray中。
优选地,如果数组cArray的长度大于等于2,end指针开始遍历。目的是寻找连续大写字母个数。end指针遍历到小写字母就停止遍历。此时若end-start>2且end指针到start指针的字符中包括两个以上大写字母,则数组中start指针到end指针的字符组成的字符串前添加连续拉丁字母大写号end指针指向的元素的前一个大写字母元素前,添加个单个拉丁字母大写号/>从而组成一个字符串。最后把整个字符串直接追加到结果字符串resArray后。
优选地,若end-start=2且end指针到start指针的字符中包括两个大写字母,则数组中start指针到end指针的字符组成的字符串前添加单个拉丁字母大写号end指向的字符前一个大写字母元素前添加个单个拉丁字母大写号/>组成字符串。最后把组成的字符串追加到字符串resArray后。
优选地,若end-start<2且end到start的字符中只包含一个大写字母,则直接在start和end指向的字符组成的字符串前加单个拉丁字母大写号并追加到结果字符串resArray中。之后start指针指向end指针指向的字符位置。end再指向数组中的下个字符,直到遍历完整个数组。
优选地,在整个字符数组的元素添加到字符串的过程中,括号“(”要转成尖括号“<”。括号“)”要转成尖括号“>”。在遍历过程中,每次end指针到start指针指向的字符组成的字符串追加到结果字符串resArray时,检查此字符串中是否包含第一符号“^”。若包含,则把其中的“^”字符转换成字符“.”。同时“^”后边的数字根据表3转换成盲文ASCII码。若数字后边有加号则此符号前加逗号作为分隔符。优选地,加号转换成盲文ASCII码“6”。减号则转成盲文ASCII码“-”。
3、经过以上的遍历,已把字符数组转成了对应的盲文ASCII码。
本发明说明书包含多项发明构思,申请人保留根据每项发明构思提出分案申请的权利。本发明说明书包含多项发明构思,诸如“优选地”、“根据一个优选实施方式”或“可选地”均表示相应段落公开了一个独立的构思,申请人保留根据每项发明构思提出分案申请的权利。
需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。

Claims (7)

1.一种CML到化学盲文的转换系统,其特征在于,至少包括用于接收CML文件的用户界面层(100)和转换逻辑层(200),所述转换逻辑层(200)配置为:
对所述用户界面层(100)接收的CML文件进行预处理;
解析预处理后的CML文件并转换为DOM树;
对DOM树进行类型划分并转换为化学盲文;
其中,解析预处理后的CML文件并转换为DOM树,包括:
将被解析的规范化CML文件封装成第一节点返回以作为CML文件的入口,通过第二节点集合CML文件所表示的化学信息;
基于第二节点集合的CML文件的化学信息判定DOM树类型,并基于DOM树类型和所述用户界面层(100)传输的用户选择的转换类型调用第一转换流程或第二转换流程或第三转换流程;其中,在转换类型为一维线性化学公式且CML节点包含第三节点的情况下,所述转换逻辑层(200)配置为调用第一转换流程;在转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况下,所述转换逻辑层(200)配置为调用第二转换流程;在转换类型为结构式且CML节点包含第五节点的情况下,所述转换逻辑层(200)配置为调用第三转换流程;
并且,所述转换逻辑层(200)配置为至少通过如下步骤执行第一转换流程:
基于DOM树的根节点CML节点获取第三节点信息;
将所述第三节点信息以Key值和对应的Value值的形式存储在数组中;
在存储数组的哈希表中基于数组内的至少一个元素进行排序;
遍历排序后的哈希表中每个Key值和对应的Value值,并将Key和Value值添加到同一个字符串中;
将字符串转换为化学盲文ASCII码;
所述转换逻辑层(200)配置为至少通过如下步骤执行第二转换流程:
基于DOM树的根节点CML节点获取第四节点的信息;
基于第四节点获取其第四标签的内容,并将第四标签的内容保存至第四数组中;
去除第四数组的两端和中间的空格,并将去除空格后的第四数组转换为盲文ASCII码;
所述转换逻辑层(200)配置为至少通过如下步骤执行第三转换流程:
基于第五节点获取其标签信息,并标签信息分别存储在表示标签的标签数组和表示坐标的坐标数组中;
去除所述坐标数组中重复的元素后进行排序,并基于排序后的坐标数组和标签数组构建矩阵;
基于所述矩阵输出相应的盲文ASCII码。
2.根据权利要求1所述的转换系统,其特征在于,所述转换逻辑层(200)配置为对所述用户界面层(100)传输的CML文件验证是否规范化以完成预处理,其中,
对规范化的CML文件进行解析从而生成转换为化学盲文的第一反馈结果;
基于非规范化的CML文件生成关于错误信息的第二反馈结果;
将所述第一反馈结果或第二反馈结果传输至所述用户界面层(100)。
3.根据权利要求2所述的转换系统,其特征在于,
所述第五节点至少包括atomArray子节点和bondArray子节点。
4.根据权利要求3所述的转换系统,其特征在于,所述第三节点信息至少包括第一标签、第二标签、第三标签中的一个或几个,其中,
第一标签的种类作为Key值,对应的Value值至少包括第一元素、第二元素、第三元素中的一个或几个,其中,
第一元素为该种类第一标签的出现次数;
第二元素为该种类第一标签对应的第二标签的值之和;
第三元素为该种类第一标签对应的第三标签的值之和。
5.根据权利要求4所述的转换系统,其特征在于,
在所述转换逻辑层(200)执行第一转换流程将字符串转换为化学盲文ASCII码的情况下,
所述转换逻辑层(200)配置为:
统计字符串中不同的元素以将每个不同元素出现的次数存储于第二数组,并将不同元素的类别存储于第三数组;
将所述第二数组和第三数组的值转换为盲文ASCII码。
6.根据权利要求5所述的转换系统,其特征在于,所述去除所述坐标数组中重复的元素后进行排序,并基于排序后的坐标数组和标签数组构建矩阵,包括:
根据坐标信息将第五节点的atom子节点中每个原子的盲文ASCII码赋值于矩阵,
计算第五节点的bond子节点中每个化学键的位置以获取此原子在矩阵中的坐标。
7.一种CML到化学盲文的转换方法,其特征在于,所述方法至少包括:
对录入的CML文件进行预处理以生成规范化CML文件;
解析CML文件并转换为DOM树;
对DOM树进行类型划分并转换为化学盲文;
其中,解析预处理后的CML文件并转换为DOM树,包括:
将被解析的规范化CML文件封装成第一节点返回以作为CML文件的入口,通过第二节点集合CML文件所表示的化学信息;
基于第二节点集合的CML文件的化学信息判定DOM树类型,并基于DOM树类型和用户界面层(100)传输的用户选择的转换类型调用第一转换流程或第二转换流程或第三转换流程;其中,在转换类型为一维线性化学公式且CML节点包含第三节点的情况下调用第一转换流程;在转换类型为一维线性化学公式且CML节点不包含第三节点而包含第四节点的情况下调用第二转换流程;在转换类型为结构式且CML节点包含第五节点的情况下调用第三转换流程;
并且,至少通过如下步骤执行第一转换流程:
基于DOM树的根节点CML节点获取第三节点信息;
将所述第三节点信息以Key值和对应的Value值的形式存储在数组中;
在存储数组的哈希表中基于数组内的至少一个元素进行排序;
遍历排序后的哈希表中每个Key值和对应的Value值,并将Key和Value值添加到同一个字符串中;
将字符串转换为化学盲文ASCII码;
至少通过如下步骤执行第二转换流程:
基于DOM树的根节点CML节点获取第四节点的信息;
基于第四节点获取其第四标签的内容,并将第四标签的内容保存至第四数组中;
去除第四数组的两端和中间的空格,并将去除空格后的第四数组转换为盲文ASCII码;
至少通过如下步骤执行第三转换流程:
基于第五节点获取其标签信息,并标签信息分别存储在表示标签的标签数组和表示坐标的坐标数组中;
去除所述坐标数组中重复的元素后进行排序,并基于排序后的坐标数组和标签数组构建矩阵;
基于所述矩阵输出相应的盲文ASCII码。
CN202010749418.8A 2020-07-31 2020-07-31 一种cml到化学盲文的转换系统及方法 Active CN111881696B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010749418.8A CN111881696B (zh) 2020-07-31 2020-07-31 一种cml到化学盲文的转换系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010749418.8A CN111881696B (zh) 2020-07-31 2020-07-31 一种cml到化学盲文的转换系统及方法

Publications (2)

Publication Number Publication Date
CN111881696A CN111881696A (zh) 2020-11-03
CN111881696B true CN111881696B (zh) 2024-02-23

Family

ID=73205165

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010749418.8A Active CN111881696B (zh) 2020-07-31 2020-07-31 一种cml到化学盲文的转换系统及方法

Country Status (1)

Country Link
CN (1) CN111881696B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007144853A2 (en) * 2006-06-15 2007-12-21 Utstarcom Telecom Co., Ltd Method and apparatus for performing customized paring on a xml document based on application
CN107368474A (zh) * 2017-07-07 2017-11-21 浙江理工大学 一种汉文到盲文的自动高效翻译转换方法
KR101979322B1 (ko) * 2019-01-17 2019-05-15 (주)에이티소프트 전자문서의 점자 변환 시스템
CN110390859A (zh) * 2018-04-19 2019-10-29 兰州大学 一种基于MusicXML乐谱到盲文的转换方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007144853A2 (en) * 2006-06-15 2007-12-21 Utstarcom Telecom Co., Ltd Method and apparatus for performing customized paring on a xml document based on application
CN107368474A (zh) * 2017-07-07 2017-11-21 浙江理工大学 一种汉文到盲文的自动高效翻译转换方法
CN110390859A (zh) * 2018-04-19 2019-10-29 兰州大学 一种基于MusicXML乐谱到盲文的转换方法及系统
KR101979322B1 (ko) * 2019-01-17 2019-05-15 (주)에이티소프트 전자문서의 점자 변환 시스템

Also Published As

Publication number Publication date
CN111881696A (zh) 2020-11-03

Similar Documents

Publication Publication Date Title
US7912846B2 (en) Document processing method, recording medium, and document processing system
US6507856B1 (en) Dynamic business process automation system using XML documents
US7353222B2 (en) System and method for the storage, indexing and retrieval of XML documents using relational databases
Han et al. Wrapping web data into XML
CN108427556B (zh) 一种表单设计解析方法及系统
US20040088320A1 (en) Methods and apparatus for storing hierarchical documents in a relational database
US20070245232A1 (en) Apparatus for Processing Documents That Use a Mark Up Language
US20080134019A1 (en) Processing Data And Documents That Use A Markup Language
US20030074636A1 (en) Enabling easy generation of XML documents from XML specifications
CN111753503B (zh) 一种面向盲人的数学公式编辑方法及装置
CN111737623A (zh) 网页信息提取方法及相关设备
CN108733813A (zh) 面向bbs论坛网页内容的信息提取方法、系统及介质
US20070283246A1 (en) Processing Documents In Multiple Markup Representations
US20060271850A1 (en) Method and apparatus for transforming a printer into an XML printer
US8196033B2 (en) Converting between data sources and XML
EP1830274A1 (en) Server device and name space issuing method
JP4086253B1 (ja) Xml文書の処理方法および処理プログラム
CN101617307B (zh) 编解码设备和方法
JPH11110384A (ja) 構造化文書検索表示方法及び装置
CN111881696B (zh) 一种cml到化学盲文的转换系统及方法
Pluempitiwiriyawej et al. A classification scheme for semantic and schematic heterogeneities in XML data sources
CN113139145B (zh) 页面生成方法、装置、电子设备及可读存储介质
US20210397663A1 (en) Data reduction in a tree data structure for a wireframe
US20090083620A1 (en) Document processing device and document processing method
Gini et al. Automatic generation of documents

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant