Приложение для сопоставления слов (семантическое) на основе Java

Я хочу разработать приложение на основе Java для сопоставления синонимов с уникальным кодом или словом. Например, в медицинских терминах слова heart attack или cardiac arrest и т. д. означают одно и то же. Итак, я хочу создать базу данных (не обязательно RDBMS) для хранения таких сопоставлений. Такие сопоставления должны быть добавлены/изменены или удалены позже.

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

Мой ввод будет похож на фразу из двух или трех слов, и он будет сопоставлен со стандартным кодом. например, сердечный приступ и остановка сердца сопоставлены с кодом заболевания HA50122445. Завтра, если я найду новую фразу, например воспаление миокарда, я хочу сопоставить ее с кодом HA50122445.

Я просмотрел Apache Lucene, но он предназначен для интеллектуального анализа текста с приоритетом на основе ключевых слов поиска. Мои требования похожи на Wordnet. Является ли база данных Wordnet редактируемой или модифицируемой? Мои исследования говорят, что нет. Это правильно ?

Было бы очень полезно, если бы вы могли направить меня. Спасибо


person Jay    schedule 20.02.2013    source источник
comment
Вас интересует, как разработать онтологию болезней, где разные названия одного и того же состояния соответствуют одному и тому же значению, или как можно хранить такую ​​онтологию.   -  person mbatchkarov    schedule 20.02.2013
comment
Да, онтология была бы выбором, если бы я рассматривал условия и использовал условия, предсказывающие болезнь. Здесь идея состоит в том, чтобы сопоставить сообщаемую причину смерти со стандартными кодами. Итак, вы начинаете с нескольких и постепенно расширяете базу данных. Это своего рода сопоставление синонимов или тезаурус.   -  person Jay    schedule 21.02.2013


Ответы (4)


Вы можете ознакомиться с метатезаурусом UMLS и MetaMap. Первый представляет собой «большой, многоцелевой и многоязычный тезаурус, который содержит миллионы биомедицинских и связанных со здоровьем понятий». В нем должны быть какие-то идентификаторы. Вы можете основывать свою «базу данных» на этом, потому что создание ее самостоятельно с течением времени будет чрезвычайно трудоемким. Последний представляет собой набор инструментов для обработки естественного языка, который сканирует текст, обнаруживает медицинские концепции и сопоставляет их с записями в тезаурусе UMLS.

Отказ от ответственности: я не использовал ни один из этих ресурсов. Моя команда создала аналогичные ресурсы для клиента, но их нет в свободном доступе, поэтому я их не рекомендую.

person mbatchkarov    schedule 20.02.2013
comment
В общем, я искал что-то подобное. Можем ли мы изменить или дополнить метатезаурус UMLS? - person Jay; 21.02.2013

Воспользуйтесь инструментом быстрой аннотации Brat

http://brat.nlplab.org/index.html

Он позволяет вам аннотировать документ, указывать, что две разные фразы на самом деле являются одним и тем же, и указывать эти объекты на каноническую ссылку.

Он хранит данные в плоских файлах. Вы даже можете использовать Стэнфордский CoreNLP для изучения вариантов (таких как сердечный приступ или «инфаркт миокарда») и распознавать их как одно и то же.

Wordnet можно загрузить, и вы всегда можете добавить новую информацию в загруженную версию.

person Neil McGuigan    schedule 20.02.2013

HashMap, синонимы ключей к вашему единственному объекту "HA501225..".

Map<String, String> lookup = new HashMap<>();
lookup.put("Heart Attack", "HA50..");
lookup.put("cardiac arrest", "HA50..");

//lookup is now simple -
lookup.get("Heart Attack") // gives us HA5012..

Простое начальное решение: как только вы столкнетесь с проблемами, оптимизируйте их, как только столкнетесь с проблемами масштабирования или чем-то еще. Возможно, вы могли бы заглянуть в Redis или другую базу данных значений ключей, которая может дать вам эти сопоставления.

person Tom Cammann    schedule 20.02.2013

РСУБД — лучшее решение для этого. Просто выберите один. Встроенный пример: HSQLDB. Но подойдет любой mysql или postgre.

person John Smith    schedule 20.02.2013
comment
Я только что посмотрел wordnet, и мне кажется, что wordnet - это скорее приложение, чем база данных, которая уже имеет довольно много данных в своей включенной базе данных. Под капотом может быть РСУБД. Может не. Это определенно не то, что вы ищете. Хотя его концепции могут быть интересны для вас. - person John Smith; 20.02.2013