如何从化学公式中提取信息

13个视图(30天)
帕特里克·克纳普
帕特里克·克纳普 2011年8月12日
回答: phenan082023年1月26日
你好所有的,我想一个化学公式分解成其成分。例如:二氧化硅含量=我想带弦的二氧化硅和解析,我知道我有1和2个氧硅。我想这对于更复杂的化合物,说‘C22H10N2O5聚酰亚胺。所以我需要处理大写和小写字母,和1或2位数。任何帮助将非常感激。
帕特

答案(4)

Fangjun江
Fangjun江 2011年8月12日
使用的组合isstrprop()和正则表达式()可能会有所帮助。你需要提供更多的例子和解释什么是你想要的。
str =“C22H10N2O5”
num = regexp (str,“\ d +”,“匹配”)
isstrprop (str,“α”)
isstrprop (str,“数字”)
isstrprop (str,“上”)
一个解决办法:
str =“C22H10PuCrN2O5”;
[EleList、垃圾,EleEnd] = regexp (str, (“(”,“一个”:“Z”,'][',“一个”:“z”,“?”),“匹配”);
(Num NumStart] = regexp (str,“\ d +”,“匹配”);
NumList = 1(大小(EleList));
指数= ismember (EleEnd + 1, NumStart);
NumList(指数)= cellfun (@str2num Num);
3评论
保罗席尔瓦
保罗席尔瓦 2011年8月12日
看看你会发现网上的任何元素周期表,所有符号都应该有

登录置评。


保罗席尔瓦
保罗席尔瓦 2011年8月12日
这不容易做到,例如不是所有的公式都有成分隔开一个数字,你也需要所有可能的成分列表中,这样你就可以确定在任何公式和后检查是否有很多后每个选民。
请搜索 文件交换 ,你可能会幸运,找到它已经由人完成的。
1评论
凯利卡尼
凯利卡尼 2011年8月12日
好,假设他不是处理这些U * *元素周期表的上端,然后所有的元素包括一个大写字母或资本和小写字母。所以它应该很容易挑选出来。你总是会基本公式,或者会安排结构(即Si (OH) 4,还是SiO4H4 ?)

登录置评。


帕特里克·克纳普
帕特里克·克纳普 2011年8月12日
我想出来。谢谢你的帮助Fangjun !
str =二氧化硅的;
num = regexp (str,“\ d +”,“匹配”);%包含数字的单元阵列
D = isstrprop (str,“数字”);%逻辑数组给号码的位置
U = isstrprop (str,“上”);%的逻辑给大写阿尔法的位置
L = isstrprop (str,“低”);%的逻辑给小写阿尔法的位置
NumElem = (U)之和;%的大写α= =的元素数量的公式
公式=结构(“元素”{},“数量”,{});%初始化输出
% %循环公式提取量
n = 1;
num_counter = 1;
我= 1:NumElem
如果U (n)
如果L U (n) & & (n + 1)
公式(i)。元素= str (n: n + 1);
n = n + 2;
如果~ D (n)
公式(i)。数量= 1;
elseifD (n)
公式(i)。数量= str2num (num {num_counter});% #好< * ST2NM >
n = n +长度(num {num_counter});
num_counter = num_counter + 1;
结束
elseifU (n) & & ~ L (n + 1)
公式(i)。元素= str (n);
n = n + 1;
如果D (n)
公式(i)。数量= str2num (num {num_counter});
n = n +长度(num {num_counter});
num_counter = num_counter + 1;
elseif~ D (n)
公式(i)。数量= 1;
结束
结束
其他的
n = n + 1;
结束
结束
1评论
Fangjun江
Fangjun江 2011年8月12日
好了!我忍不住想出一个no-loop解决方案。看到我的更新答案。

登录置评。


phenan08
phenan08 2023年1月26日
如果它能帮助,我写一个公式字符串解析器来确定分子的组成、元素的元素。
可以使用semi-developped公式,脚本返回4输出:原始的分子式,成分表(不同元素的数量),平均MW和单一同位素的质量。

类别

找到更多的在化学帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!