基于 Java 的词映射(语义)应用程序
Posted
技术标签:
【中文标题】基于 Java 的词映射(语义)应用程序【英文标题】:Java based Word mapping (semantic) application 【发布时间】:2013-02-05 09:19:47 【问题描述】:我想开发一个基于 Java 的应用程序来将同义词映射到唯一的代码或单词。例如,在医学术语中,heart attack
或 cardiac arrest
等词的含义相同。所以我想建立一个数据库(不需要是一个 RDBMS)来存储这样的映射。以后必须添加/修改或删除此类映射。
主要目标是开发一个应用程序以将实体语义映射到一起。
我的输入就像一个两三个词的短语,它会被映射到一个标准代码。例如 心脏病发作 和 心脏骤停 映射到疾病代码 HA50122445。明天,如果我发现一个新短语说myo heartflammation,我想将其映射到代码HA50122445
我看了Apache Lucene,但它是用于文本挖掘,基于搜索关键字的优先级。我的要求有点类似于Wordnet。 Wordnet 数据库是否可编辑或可修改?我的研究说不。这样对吗 ?
如果您能指导我,那将非常有帮助。谢谢
【问题讨论】:
您是否对如何开发疾病本体感兴趣,其中相同条件的不同名称映射到相同的值,或者对如何存储这样的本体感兴趣。 是的,如果我考虑条件并使用条件预测哪种疾病,本体会是一个选择。这里的想法是将报告的死亡原因映射到标准代码。所以你从几个开始慢慢地增长数据库。这是一种同义词映射或叙词表。 【参考方案1】:您可能想查看UMLS metathesaurus 和MetaMap。前者是“一个包含数百万个生物医学和健康相关概念的大型、多用途、多语言的词库”。那必须有一些标识符。您可以以此为基础建立您的“数据库”,因为随着时间的推移自己构建它将会非常费力。后者是一个自然语言处理工具包,它扫描文本、发现医学概念并将它们映射到 UMLS 词库中的条目。
免责声明:我没有使用过这些资源。我的团队为客户构建了类似的资源,但没有免费提供,因此我不推荐它们。
【讨论】:
总之,我一直在寻找这样的东西。我们可以在 UMLS metathesaurus 之上修改或构建吗?【参考方案2】:查看 Brat Rapid Annotation Tool
http://brat.nlplab.org/index.html
它可以让您注释文档,指出两个不同的短语实际上是同一事物,并将这些实体指向规范参考。
它将数据存储在平面文件中。您甚至可以使用斯坦福大学的 CoreNLP 来学习变异(如心脏病发作或“心肌梗塞”)并将它们识别为同一事物。
Wordnet 是可下载的,您可以随时在下载的版本中添加新信息。
【讨论】:
【参考方案3】: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 或其他可以为您提供这些映射的键值数据库。
【讨论】:
【参考方案4】:RDBMS 是最好的解决方案。只需选择一个。嵌入式示例:HSQLDB。但是任何 mysql 或 postgre 都应该适合。
【讨论】:
我刚刚查找了wordnet,在我看来,wordnet 与其说是数据库,不如说是一个应用程序,它包含的数据库中已经包含了相当多的数据。可能是引擎盖下的 RDBMS。可能不会。这绝对不是你要找的。虽然它的概念对你来说可能很有趣。以上是关于基于 Java 的词映射(语义)应用程序的主要内容,如果未能解决你的问题,请参考以下文章