基于 Java 的词映射(语义)应用程序

Posted

技术标签:

【中文标题】基于 Java 的词映射(语义)应用程序【英文标题】:Java based Word mapping (semantic) application 【发布时间】:2013-02-05 09:19:47 【问题描述】:

我想开发一个基于 Java 的应用程序来将同义词映射到唯一的代码或单词。例如,在医学术语中,heart attackcardiac 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 的词映射(语义)应用程序的主要内容,如果未能解决你的问题,请参考以下文章

二、词向量和语义

在语义上对文档中的词进行无监督聚类

Machine Translation仅由单语数据生成双语词典

网络安全界基于知识的识别和映射提出网络空间资源分类明细

投稿 | 机器如何理解语言—中文分词技术

词向量:GloVe