Skip to content

Commit

Permalink
Add a scigraph based clinical text annotation module.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jose authored and Joe C committed Jun 12, 2016
1 parent c678d4c commit 8713b55
Show file tree
Hide file tree
Showing 28 changed files with 2,054 additions and 10 deletions.
5 changes: 4 additions & 1 deletion api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>org.phenotips</groupId>
<artifactId>clinical-text-analysis-extension</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.3-SNAPSHOT</version>
</parent>
<artifactId>clinical-text-analysis-extension-api</artifactId>
<name>PhenoTips - Clinical Text Analysis - Java API</name>
Expand Down Expand Up @@ -104,4 +104,7 @@
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<coverage.instructionRatio>0.16</coverage.instructionRatio>
</properties>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,19 @@ public class TermAnnotation implements Comparable<TermAnnotation>

private final VocabularyTerm mTerm;

/**
* The sentence this term annotation appears in.
*/
private String sentence;

/**
* The start of this annotation within the sentence.
*/
private long startInSentence;

/**
* The end of this annotation within the sentence.
*/
private long endInSentence;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public interface TermAnnotationService
* @version $Id$
* @since 1.0M1
*/
public class AnnotationException extends Exception
class AnnotationException extends Exception
{
/**
* Constructs a new AnnotationException with the specified detail message.
Expand All @@ -56,5 +56,16 @@ public AnnotationException(String message)
{
super(message);
}

/**
* Constructs a new AnnotationException with the specified detail message and cause.
*
* @param message the detail message
* @param cause the cause
*/
public AnnotationException(String message, Exception cause)
{
super(message, cause);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
/**
* Takes in lists of term annotations, as well as the text they appear in and
* assigns sentences to them from the text.
*
* @version $Id$
*/
public class TermAnnotationSentenceDetector
{
Expand All @@ -45,7 +47,9 @@ public void detectSentences(List<TermAnnotation> annotations, String text)
while (currentSentence != BreakIterator.DONE && currentAnnotation < annotations.size()) {
TermAnnotation annotation = annotations.get(currentAnnotation);
int nextSentence = sentences.next();
/* next() pushes the iterator forward, so bring it back */
sentences.previous();
/* Does this annotation fall within the current sentence? */
if (annotation.getStartPos() >= currentSentence && annotation.getStartPos() < nextSentence) {
long start = annotation.getStartPos() - currentSentence;
long end = annotation.getEndPos() - currentSentence;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
public class TermAnnotationScriptService implements ScriptService
{
@Inject
@Named("biolark")
@Named("genericREST")
private TermAnnotationService service;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@

public class TermAnnotationSentenceDetectorTest
{

private TermAnnotationSentenceDetector client;

/* This is where you miss heredocs. */
Expand Down Expand Up @@ -64,6 +63,9 @@ public class TermAnnotationSentenceDetectorTest
SENTENCE3 = TEXT.substring(343);
}

/**
* Test that we're able to have one annotation per sentence.
*/
@Test
public void testBasic()
{
Expand Down
147 changes: 147 additions & 0 deletions generic-rest/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>

<!--
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
-->

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.phenotips</groupId>
<artifactId>clinical-text-analysis-extension</artifactId>
<version>1.3-SNAPSHOT</version>
</parent>
<artifactId>clinical-text-analysis-extension-generic-rest</artifactId>
<name>PhenoTips - Clinical Text Analysis - Generic REST implementation for the Java APIs</name>
<repositories>
<repository>
<id>CRBS</id>
<name>CRBS Maven Repo</name>
<url>http://maven.crbs.ucsd.edu/nexus/content/repositories/NIF-snapshot/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-component-api</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.xwiki.platform</groupId>
<artifactId>xwiki-platform-bridge</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>org.xwiki.platform</groupId>
<artifactId>xwiki-platform-extension-distribution</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>org.xwiki.platform</groupId>
<artifactId>xwiki-platform-model</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>org.xwiki.platform</groupId>
<artifactId>xwiki-platform-oldcore</artifactId>
<version>${xwiki.version}</version>
<exclusions>
<exclusion>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.xwiki.platform</groupId>
<artifactId>xwiki-platform-query-manager</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-context</artifactId>
<version>${xwiki.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>clinical-text-analysis-extension-api</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>phenotips-constants</artifactId>
<version>${phenotips.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>vocabularies-api</artifactId>
<version>${phenotips.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.xwiki.commons</groupId>
<artifactId>xwiki-commons-tool-test-component</artifactId>
<version>${xwiki.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.8</version>
</dependency>

<!-- Scigraph dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<!-- TODO: What's the best way to get the proper version? -->
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>fluent-hc</artifactId>
<version>4.4.1</version>
</dependency>
</dependencies>
<properties>
<coverage.instructionRatio>0.16</coverage.instructionRatio>
</properties>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
*/
package org.phenotips.textanalysis.internal;

import org.xwiki.component.annotation.Role;

import java.io.InputStream;
import java.util.Map;

/**
* Interacts with an annotation REST API endpoint, with methods as defined in {@link GenericRESTAnnotationService}.
*
* @version $Id$
*/
@Role
public interface AnnotationAPI
{
/**
* Execute a post request to the method given, taking content to be the json body of the request.
* @param method the method
* @param content the content, to be interpreted as containing a json object
* @return the response
* @throws ServiceException if there's an error accessing the method
*/
InputStream postJson(String method, InputStream content) throws ServiceException;

/**
* Post the form given to the method given.
* @param method the method
* @param params the form parameters
* @return the response
* @throws ServiceException if there's an error accessing the method
*/
InputStream postForm(String method, Map<String, String> params) throws ServiceException;

/**
* Send an empty post to the method given.
* @param method the method
* @return the response
* @throws ServiceException if there's an error accessing the method
*/
InputStream postEmpty(String method) throws ServiceException;

/**
* Send an empty get to the method given.
* @param method the method
* @return the response
* @throws ServiceException if there's an error accessing the method
*/
InputStream getEmpty(String method) throws ServiceException;

/**
* An exception returned by SciGraph.
*
* @version $Id$
*/
class ServiceException extends Exception
{
/**
* CTOR.
* @param message the message
*/
public ServiceException(String message)
{
super(message);
}

/**
* CTOR with cause.
* @param message the message
* @param cause the cause.
*/
public ServiceException(String message, Exception cause)
{
super(message, cause);
}
}
}
Loading

0 comments on commit 8713b55

Please sign in to comment.