Преобразование химической формулы в ее имя iupac - PullRequest
0 голосов
/ 01 января 2019

У меня есть периодическая таблица, которую я кодировал в Java, и я работаю над созданием простых соединений (только бинарных соединений) и возвращаю информацию о них, но у меня возникают проблемы с превращением химической формулы в название IUPAC.Я настроил его так, чтобы человек мог щелкнуть элемент периодической таблицы, а затем щелкнуть другой элемент, а затем всплыло окно, отображающее возможные соединения, которые могут быть созданы из этих двух элементов.Эти соединения будут отображаться в виде химических формул, таких как CO2 или CH4.Я хочу иметь возможность преобразовать химическую формулу соединения, которое кто-то выбрал, в имя iupac, чтобы оно могло отображаться вместе с другой информацией.

Я пытался использовать набор для разработки химии, но честно говоря,Я не имею представления о том, как его использовать, и даже если это применимо для решения моей проблемы.Это заставляет меня вставлять типы облигаций вручную, что кажется на тонну больше работы, чем я должен был бы торговаться.

Например: CO2 будет выделять двуокись углерода, а CH4 - метан.

Ответы [ 3 ]

0 голосов
/ 01 января 2019

Это заставляет меня вставлять типы облигаций вручную, что кажется на тонну больше работы, чем я должен был бы торговаться.

Это неизбежно.Названия ИЮПАК основаны на структурных свойствах соединения, а не на его формуле.Большинство нетривиальных химических формул будет иметь множество возможных структурных изомеров - например, C 5 H 12 - это формула для n -пентана, метилбутана и 2,2-диметилпропан.Невозможно выбрать одно из этих имен, не зная сначала структуры.

В качестве альтернативы вы можете рассмотреть возможность написания инструмента для преобразования из структурной формулы (например, в SMILES формат) в имена ИЮПАК.Это тоже не тривиальная задача, но по крайней мере выполнимо алгоритмически.

0 голосов
/ 01 января 2019

Потребуется (действительно) много времени, чтобы запрограммировать API, который использует номенклатуру IUPAC.Однако существует способ получить правильное химическое название для химической формулы, которое не требует от вас затрачивания целой жизни на создание API.Это действительно грязный обходной путь, но он работает.Вы можете использовать библиотеку JSoup для поиска химического названия по на этом сайте .Он отправляет HTTP-запрос на публикацию, анализирует результаты и возвращает массив строк с результатами поиска.Это действительно грязно и, вероятно, считается грешным для большинства программистов, но это работает.

public static String[] searchIUPACName(String chemicalFormula) throws IOException {
    org.jsoup.nodes.Document doc = org.jsoup.Jsoup.connect("http://www.endmemo.com/chem/chemsearch.php")
            .data("Search", "Search").data("name", chemicalFormula).data("sel", "f").post();
    org.jsoup.select.Elements elements = doc.getElementById("note").getElementsByClass("cmline");
    if (elements.isEmpty())
        return new String[] { "No results" };
    String[] names = new String[elements.size() - 1];
    for (int i = 1; i < elements.size(); i++) {
        names[i - 1] = elements.get(i).getElementsByClass("cmname").get(0).getElementsByTag("a").get(0).text();
    }
    return names;
}

Однако, как сказал duskwuff, названия IUPAC основаны на структурных свойствах соединения, а не на его формуле.Таким образом, вы можете получить химическое название, но это не обязательно правильное название IUPAC.

0 голосов
/ 01 января 2019

Похоже, вам нужна база данных:

create table compound ( 
    first_chemical VARCHAR,
    first_amount INT,
    second_chemical VARCHAR,
    second_amount INT,
    name VARCHAR
)

и используйте ее как

INSERT INTO compound VALUES('H', 2, 'O', 1, 'Water')

Тогда вы можете сделать что-то вроде

SELECT * FROM compound WHERE first_element = ? AND second_element = ?
...