Metamap Java Api 使用教程

原创 2016年05月30日 12:38:33
Metamap(简称mm)是一个用于识别文本中包含的一体化医学语言系统概念的工具。
官网地址:https://mmtx.nlm.nih.gov/

mm java api允许通过java程序调用mm的映射引擎,进入mm java api页面(https://mmtx.nlm.nih.gov/JavaApi.shtml

使用mm java api之前需要下载以下工具包:
1)MetaMap Full download
The full version of MetaMap must be downloaded from MetaMap Full Download and installed before installing the Java API distribution.  
2)Java Runtime Environment (JRE) 1.8 or later
Java Runtime Environment (JRE 1.8) or later is the minimum required environment for running the API. Java is available from the "Developer Resources for Java Technology" website (http://www.java.com/).

获取mm java api使用文档:
There is brief documentation on Using the MetaMap Java API and JavaDoc Documentation for the MetaMap Java API

mm java api版本信息:
1)linux 2016  2014  2013v2  2013
2)windowXP/7  2014  2013v2  2013
3)Mac OS/X 2016  2014  2013v2  2013 v1

安装和调用过程:
根据操作系统的类型,下载相应版本的mm full和mm java api安装包
下载前需要注册一个UMLS账号,账号需要审核,审核时间大约为一天,审核通过后即可登录进行下载。

选择window对应的版本,下载得到两个安装包


将两个安装包解压到同一个根目录下,我选择的是D盘,解压后得到两个文件夹


1)安装mm full
运行D:\public_mm_win32_main_2014\public_mm中的install matemap.bat,弹出窗口

点击 next
如果没有自动匹配jre的路径,在browse中选择jre的安装路径即可,点击next

至此MetaMap安装成功

2)启动 mmserver
启动mmserver之前需要先启动taggerserver
启动方法:运行D:\public_mm_win32_main_2014\public_mm\bin中的skrmedpostctl_start.bat,运行结果如下

启动mmserver
启动方法:在D盘目录下启动命令行窗口(shift+右键→在此处打开命令窗口),弹出命令窗口

第一次输入命令行时,会报错,但是第二次输入相同的命令行,mmserver启动成功(原因不明)

3)在java程序中调用mm server
在eclipse中新建工程,在library中导入下面两个jar包

编写程序(代码如下图),调用mm server,程序正常运行,调用成功。

packageorg.irlab.yxh.test;
importjava.util.List;
importgov.nih.nlm.nls.metamap.Ev;
importgov.nih.nlm.nls.metamap.Mapping;
importgov.nih.nlm.nls.metamap.MetaMapApi;
importgov.nih.nlm.nls.metamap.MetaMapApiImpl;
importgov.nih.nlm.nls.metamap.Negation;
importgov.nih.nlm.nls.metamap.PCM;
importgov.nih.nlm.nls.metamap.Result;
importgov.nih.nlm.nls.metamap.Utterance;

publicclassMetaMapDemo {

      publicstaticvoidmain(String[] args) throws Exception{           
            Stringinput = "high blood pressure"; //待映射文本
            MetaMapApiapi = newMetaMapApiImpl();
            System.out.println("api instanciated");  //api实例化      
            List<Result>resultList = api.processCitationsFromString(input);            
            Resultresult = resultList.get(0);
            List<Negation>negations = result.getNegationList();            
           for(Negation negation : negations){
                  System.out.println("conceptposition:"+negation.getConceptPositionList());
                  System.out.println("concept pairs:"+negation.getConceptPairList());
                  System.out.println("trigger positions: "+negation.getTriggerPositionList());
                  System.out.println("trigger: "+negation.getTrigger());
                  System.out.println("type: "+negation.getType());
            }
            
           for(Utterance utterance : result .getUtteranceList()) {
                  System.out.println("Utterance:");
                  System.out.println("  Id: "+ utterance.getId());
                  System.out.println("  Utterance text: "+ utterance.getString());
                  System.out.println("  Position: "+ utterance.getPosition());
                        for(PCM pcm : utterance .getPCMList()) {
                              System.out.println("Mappings:");
                              for(Mapping map : pcm .getMappingList()) {
                                    System.out.println("Phrase:");
                                    System.out.println("  Map Score: "+ map.getScore());
                                    for(Ev mapEv : map .getEvList()) {
                                          System.out.println("  Score: "+ mapEv.getScore());
                                          System.out.println("  Concept Id: "+ mapEv.getConceptId());
                                          System.out.println("  Concept Name: "+ mapEv.getConceptName());
                                          System.out.println("  Preferred Name: "+ mapEv.getPreferredName());
                                          System.out.println("  Matched Words: "+ mapEv.getMatchedWords());
                                          System.out.println("  Semantic Types: "+ mapEv.getSemanticTypes());
                                          System.out.println("  MatchMap: "+ mapEv.getMatchMap());
                                          System.out.println("  MatchMap alt. repr.: "+ mapEv.getMatchMapList());
                                          System.out.println("  is Head?: "+ mapEv.isHead());
                                          System.out.println("  is Overmatch?: "+ mapEv.isOvermatch());
                                          System.out.println("  Sources: "+ mapEv.getSources());
                                          System.out.println("  Positional Info: "+ mapEv.getPositionalInfo());
                                    }
                        }
                  }
            }
            
      }
      
}

输出的结果:
api instanciated
Utterance:
  Id: 00000000.tx.1
  Utterance text: high blood pressure
  Position: (0, 19)
Mappings:
Phrase:
  Map Score: -1000
  Score: -1000
  Concept Id: C0020538
  Concept Name: Blood Pressure, High
  Preferred Name: Hypertensive disease
  Matched Words: [high, blood, pressure]
  Semantic Types: [dsyn]
  MatchMap: [[[1, 3], [1, 3], 0]]
  MatchMap alt. repr.: [[[phrase start: 1, phrase end: 3], [concept start: 1, concept end: 3], lexical variation: 0]]
  is Head?: true
  is Overmatch?: false
  Sources: [AOD, MSH, MTH, NCI, NLMSubSyn, OMIM, SNM, SNMI, SNOMEDCT_US]
  Positional Info: [(0, 19)]
Phrase:
  Map Score: -1000
  Score: -1000
  Concept Id: C2926615
  Concept Name: High blood pressure
  Preferred Name: Ever told by doctor or nurse that you have high blood pressure:Finding:Point in time:^Patient:Ordinal
  Matched Words: [high, blood, pressure]
  Semantic Types: [clna]
  MatchMap: [[[1, 3], [1, 3], 0]]
  MatchMap alt. repr.: [[[phrase start: 1, phrase end: 3], [concept start: 1, concept end: 3], lexical variation: 0]]
  is Head?: true
  is Overmatch?: false
  Sources: [LNC, NLMSubSyn]
  Positional Info: [(0, 19)]

至此MetaMap Java API调用成功!

相关文章推荐

java开发过程中如何使用API?

java开发过程中如何使用API?   对于新手来说,在java开发过程中经常会遇到一些自己不知道、不了解、不熟悉的类,这时候API无异于一个用户指南,只要照着上面需要的东西填写就可以了,下面就是...

JAVA中API的各种应用

常用 API:处理数字 Java 语言中,已经提供了大量的类库供程序开发者使用,这些类库是 Java 语言提供的、已经写好的、 用来实现常见的和通用的功能的类的集合,我们称之为“应用程序编程接口(...

java api文档的阅读技巧

java的api文档的阅读技巧:  Java的API文档是SDK说明文件的一部分,是具体告诉你上述内容的使用方法的文档,是Java程序开发的最好帮手。当你从Sun Microsystems公司的网站h...
  • a910626
  • a910626
  • 2012年09月23日 09:09
  • 15824

JAVA 调用地图API

要使用百度地图的api就要先建立连接,调用百度地图的API,然后调用的百度地图接口会返回相应的信息,对于返回的数据不能直接读取,而需通过数据流获取,下面为从网上找的连接及读取的代码: public s...

Java API 下载和查看方法

对于java而言,API文档详细说明了Java中常用类和方法的功能,开发者可以通过查阅API文档,调用应用程序接口(API)来编程。API文档的下载网址http://www.oracle.com/te...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

API文档使用方法

API的理解以及java API文档使用方法,学多点以备后患

【Web API系列教程】1.1 — ASP.NET Web API入门

前言HTTP不仅仅服务于web页面,同时也是构建暴露服务和数据的API的强大平台。HTTP有着简单、灵活和无处不在的特点。你能想到的几乎所有平台都包含有一个HTTP库,所以HTTP服务可以遍及广泛的客...
  • NoMasp
  • NoMasp
  • 2016年02月24日 18:48
  • 9352

webApi文档好帮手-apidoc使用教程

在开发后台接口的过程中,我们肯定要提供一份api接口文档给终端app。 目前大多数的app的接口请求应该都是http+json的方式。 但是一直苦于做不出份漂亮的api文档,用word写,也太丑了。。...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Metamap Java Api 使用教程
举报原因:
原因补充:

(最多只允许输入30个字)