diff --git a/gepi/README.md b/gepi/README.md
index 96bae1c5..b95435bf 100644
--- a/gepi/README.md
+++ b/gepi/README.md
@@ -19,8 +19,8 @@ The `production` stage expects that the complete GePI project has been built in
Run the following commands to create a `development` container:
```bash
-DOCKER_BUILDKIT=1 docker build -t gepi:0.11.0 --target development .
-docker run -dp 8080:8080 -v {/path/to/gepi/directory}:/var/gepi/dev -e GEPI_CONFIGURATION= gepi:0.11.0
+DOCKER_BUILDKIT=1 docker build -t gepi:0.11.1 --target development .
+docker run -dp 8080:8080 -v {/path/to/gepi/directory}:/var/gepi/dev -e GEPI_CONFIGURATION= gepi:0.11.1
```
The first command builds an image of the `development` stage. This will also build the `dependencies` stage where all the Java dependencies of the GePI application are downloaded and cached. This will take a while on the first execution but should be faster afterwards thanks to caching.
@@ -38,8 +38,8 @@ To run the `production` container, run
```bash
mvn clean package --projects gepi-webapp --also-make
-DOCKER_BUILDKIT=1 docker build -t gepi:0.11.0 --target production .
-docker run -dp 8080:8080 --name gepi gepi:0.11.0
+DOCKER_BUILDKIT=1 docker build -t gepi:0.11.1 --target production .
+docker run -dp 8080:8080 --name gepi gepi:0.11.1
```
These commands
@@ -68,7 +68,7 @@ gepi.neo4j.bolt.url=bolt://:
A production environment has a few requirements that are of lesser importance during development. This section explains requirements and solutions that may come up during GePI deployment with the Docker container. While detailed explanations come below, the full Docker `run` command we use for deployment looks like the following:
```
-docker run -dp 80:8080 -p 443:8443 -v /host/path/to/certificate.p12:/var/lib/jetty/etc/keystore.p12 -v /host/path/to/configuration.properties:/gepi-webapp-configuration.properties --add-host=host.docker.internal:host-gateway --name gepi -e GEPI_CONFIGURATION=/gepi-webapp-configuration.properties gepi:0.11.0 jetty.sslContext.keyStorePassword=
+docker run -dp 80:8080 -p 443:8443 -v /host/path/to/certificate.p12:/var/lib/jetty/etc/keystore.p12 -v /host/path/to/configuration.properties:/gepi-webapp-configuration.properties --add-host=host.docker.internal:host-gateway --name gepi -e GEPI_CONFIGURATION=/gepi-webapp-configuration.properties gepi:0.11.1 jetty.sslContext.keyStorePassword=
```
Alternatively, the `docker-compose-webapp.yml` file can be used with a few additions.
diff --git a/gepi/docker-compose-webapp.yml b/gepi/docker-compose-webapp.yml
index 24ead3bc..5641c537 100644
--- a/gepi/docker-compose-webapp.yml
+++ b/gepi/docker-compose-webapp.yml
@@ -1,7 +1,7 @@
version: "3.2"
services:
gepi:
- image: gepi:0.11.0
+ image: gepi:0.11.1
container_name: gepi
ports:
- 0.0.0.0:80:8080
diff --git a/gepi/docker-compose-with-es.yml b/gepi/docker-compose-with-es.yml
index 65a68515..ecebd50a 100644
--- a/gepi/docker-compose-with-es.yml
+++ b/gepi/docker-compose-with-es.yml
@@ -1,6 +1,6 @@
services:
gepi:
- image: gepi:0.11.0
+ image: gepi:0.11.1
container_name: gepi
ports:
- 0.0.0.0:80:8080
diff --git a/gepi/gepi-concept-database/pom.xml b/gepi/gepi-concept-database/pom.xml
index 7a4dcc97..317f886f 100644
--- a/gepi/gepi-concept-database/pom.xml
+++ b/gepi/gepi-concept-database/pom.xml
@@ -4,7 +4,7 @@
de.julielab
gepi
- 1.0.0-SNAPSHOT
+ 0.11.1
gepi-concept-database
GePi Concept Database
diff --git a/gepi/gepi-concept-database/src/main/resources/gene-database.xml b/gepi/gepi-concept-database/src/main/resources/gene-database.xml
index b14d9a21..6a34139a 100644
--- a/gepi/gepi-concept-database/src/main/resources/gene-database.xml
+++ b/gepi/gepi-concept-database/src/main/resources/gene-database.xml
@@ -5,7 +5,7 @@
http://www.julielab.de/conceptdb/facets/default http://www.julielab.de/conceptdb/facets/defaultfacet-1.1.0.xsd
http://julielab.de/conceptdb/concepts/bioportal http://www.julielab.de/conceptdb/concepts/bioportalconcepts-1.1.0.xsd">
- 0.11.0
+ 0.11.1
http://localhost:7474
diff --git a/gepi/gepi-core/pom.xml b/gepi/gepi-core/pom.xml
index be1efc68..762b5e6e 100644
--- a/gepi/gepi-core/pom.xml
+++ b/gepi/gepi-core/pom.xml
@@ -7,7 +7,7 @@
de.julielab
gepi
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
diff --git a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/data/GepiRequestData.java b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/data/GepiRequestData.java
index 541283e8..c419d6b4 100644
--- a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/data/GepiRequestData.java
+++ b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/data/GepiRequestData.java
@@ -17,13 +17,15 @@ public class GepiRequestData implements Cloneable {
private String paragraphFilterString;
private String filterFieldsConnectionOperator = "AND";
private EnumSet inputMode;
+ private String docId;
private long dataSessionId;
private boolean includeUnary;
private int eventLikelihood;
private String[] taxId;
private String sectionNameFilterString;
private int pageSize = 10;
- public GepiRequestData(List eventTypes, boolean includeUnary, int eventLikelihood, Future listAGePiIds, Future listBGePiIds, String[] taxId, String sentenceFilterString, String paragraphFilterString, String filterFieldsConnectionOperator, String sectionNameFilterString, EnumSet inputMode, long dataSessionId) {
+
+ public GepiRequestData(List eventTypes, boolean includeUnary, int eventLikelihood, Future listAGePiIds, Future listBGePiIds, String[] taxId, String sentenceFilterString, String paragraphFilterString, String filterFieldsConnectionOperator, String sectionNameFilterString, EnumSet inputMode, String docId, long dataSessionId) {
this.includeUnary = includeUnary;
this.eventLikelihood = eventLikelihood;
this.taxId = taxId;
@@ -35,6 +37,7 @@ public GepiRequestData(List eventTypes, boolean includeUnary, int eventL
this.paragraphFilterString = paragraphFilterString;
this.filterFieldsConnectionOperator = filterFieldsConnectionOperator;
this.inputMode = inputMode;
+ this.docId = docId;
this.dataSessionId = dataSessionId;
}
@@ -42,6 +45,10 @@ public GepiRequestData() {
}
+ public String getDocId() {
+ return docId;
+ }
+
public boolean isIncludeUnary() {
return includeUnary;
}
@@ -114,6 +121,7 @@ public GepiRequestData withIncludeUnary(boolean includeUnary) {
this.includeUnary = includeUnary;
return this;
}
+
public GepiRequestData withEventTypes(List eventTypes) {
this.eventTypes = eventTypes;
return this;
@@ -177,6 +185,11 @@ public GepiRequestData withSectionNameFilterString(String sectionNameFilterStrin
return this;
}
+ public GepiRequestData withDocId(String docid) {
+ this.docId = docid;
+ return this;
+ }
+
@Override
public String toString() {
return "GepiRequestData{" +
diff --git a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventQueries.java b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventQueries.java
index 4cf47057..71b37444 100644
--- a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventQueries.java
+++ b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventQueries.java
@@ -90,6 +90,15 @@ public static BoolQuery getClosedQuery(GepiRequestData requestData, Set
taxIdFilterClause.addQuery(taxQuery);
eventQuery.addClause(taxIdFilterClause);
}
+ if (requestData.getDocId() != null && !requestData.getDocId().isBlank()) {
+ final MultiMatchQuery docIdQuery = new MultiMatchQuery();
+ docIdQuery.query = requestData.getDocId();
+ docIdQuery.fields = List.of(FIELD_PMID, FIELD_PMCID);
+ final BoolClause docIdFilterClause = new BoolClause();
+ docIdFilterClause.addQuery(docIdQuery);
+ docIdFilterClause.occur = FILTER;
+ eventQuery.addClause(docIdFilterClause);
+ }
return eventQuery;
}
@@ -155,6 +164,15 @@ public static BoolQuery getOpenQuery(GepiRequestData requestData) throws Interru
taxIdFilterClause.addQuery(taxQuery);
eventQuery.addClause(taxIdFilterClause);
}
+ if (requestData.getDocId() != null && !requestData.getDocId().isBlank()) {
+ final MultiMatchQuery docIdQuery = new MultiMatchQuery();
+ docIdQuery.query = requestData.getDocId();
+ docIdQuery.fields = List.of(FIELD_PMID, FIELD_PMCID);
+ final BoolClause docIdFilterClause = new BoolClause();
+ docIdFilterClause.addQuery(docIdQuery);
+ docIdFilterClause.occur = FILTER;
+ eventQuery.addClause(docIdFilterClause);
+ }
return eventQuery;
}
@@ -169,9 +187,19 @@ private static void addEventLikelihoodFilter(BoolQuery eventQuery, int likelihoo
eventQuery.addClause(likelihoodFilterClause);
}
- public static BoolQuery getFulltextQuery(List eventTypes, int eventLikelihood, String sentenceFilter, String paragraphFilter, String sectionNameFilter, String filterFieldsConnectionOperator, String[] taxIds, boolean includeUnary) {
+ public static BoolQuery getFulltextQuery(GepiRequestData requestData) {
BoolQuery eventQuery = new BoolQuery();
+ final List eventTypes = requestData.getEventTypes();
+ final boolean includeUnary = requestData.isIncludeUnary();
+ final String filterFieldsConnectionOperator = requestData.getFilterFieldsConnectionOperator();
+ final String sentenceFilter = requestData.getSentenceFilterString();
+ final String paragraphFilter = requestData.getParagraphFilterString();
+ final String sectionNameFilter = requestData.getSectionNameFilterString();
+ final int eventLikelihood = requestData.getEventLikelihood();
+ final String[] taxIds = requestData.getTaxId();
+ final String docId = requestData.getDocId();
+
if (eventTypes != null && !eventTypes.isEmpty()) {
TermsQuery eventTypesQuery = new TermsQuery(new ArrayList<>(eventTypes));
eventTypesQuery.field = FIELD_EVENT_ALL_EVENTTYPES;
@@ -216,6 +244,15 @@ public static BoolQuery getFulltextQuery(List eventTypes, int eventLikel
taxIdFilterClause.addQuery(taxQuery);
eventQuery.addClause(taxIdFilterClause);
}
+ if (docId != null && docId.isBlank()) {
+ final MultiMatchQuery docIdQuery = new MultiMatchQuery();
+ docIdQuery.query = docId;
+ docIdQuery.fields = List.of(FIELD_PMID, FIELD_PMCID);
+ final BoolClause docIdFilterClause = new BoolClause();
+ docIdFilterClause.addQuery(docIdQuery);
+ docIdFilterClause.occur = FILTER;
+ eventQuery.addClause(docIdFilterClause);
+ }
return eventQuery;
}
diff --git a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventRetrievalService.java b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventRetrievalService.java
index 22528ca4..0f8c5ab2 100644
--- a/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventRetrievalService.java
+++ b/gepi/gepi-core/src/main/java/de/julielab/gepi/core/retrieval/services/EventRetrievalService.java
@@ -415,7 +415,7 @@ private HighlightCommand getHighlightCommand(String hlTerm, String hlClass, Stri
public CompletableFuture getFulltextFilteredEvents(GepiRequestData requestData, int from, int numRows, boolean forCharts) {
log.debug("Returning async result");
return CompletableFuture.supplyAsync(() -> {
- BoolQuery eventQuery = EventQueries.getFulltextQuery(requestData.getEventTypes(), requestData.getEventLikelihood(), requestData.getSentenceFilterString(), requestData.getParagraphFilterString(), requestData.getSectionNameFilterString(), requestData.getFilterFieldsConnectionOperator(), requestData.getTaxId(), requestData.isIncludeUnary());
+ BoolQuery eventQuery = EventQueries.getFulltextQuery(requestData);
boolean downloadAll = forCharts || numRows == Integer.MAX_VALUE;
diff --git a/gepi/gepi-indexing/gepi-indexing-base/pom.xml b/gepi/gepi-indexing/gepi-indexing-base/pom.xml
index fb2e1f4b..056e7b37 100644
--- a/gepi/gepi-indexing/gepi-indexing-base/pom.xml
+++ b/gepi/gepi-indexing/gepi-indexing-base/pom.xml
@@ -5,7 +5,7 @@
gepi-indexing
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
4.0.0
diff --git a/gepi/gepi-indexing/gepi-indexing-debug/pom.xml b/gepi/gepi-indexing/gepi-indexing-debug/pom.xml
index 0e69be32..76425162 100644
--- a/gepi/gepi-indexing/gepi-indexing-debug/pom.xml
+++ b/gepi/gepi-indexing/gepi-indexing-debug/pom.xml
@@ -5,7 +5,7 @@
gepi-indexing
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
4.0.0
@@ -15,7 +15,7 @@
de.julielab
gepi-indexing-base
- 1.0.0-SNAPSHOT
+ 0.11.1
\ No newline at end of file
diff --git a/gepi/gepi-indexing/gepi-indexing-pmc/pom.xml b/gepi/gepi-indexing/gepi-indexing-pmc/pom.xml
index 54338526..94a0cc26 100644
--- a/gepi/gepi-indexing/gepi-indexing-pmc/pom.xml
+++ b/gepi/gepi-indexing/gepi-indexing-pmc/pom.xml
@@ -5,7 +5,7 @@
gepi-indexing
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
4.0.0
@@ -15,7 +15,7 @@
de.julielab
gepi-indexing-base
- 1.0.0-SNAPSHOT
+ 0.11.1
diff --git a/gepi/gepi-indexing/gepi-indexing-pubmed/pom.xml b/gepi/gepi-indexing/gepi-indexing-pubmed/pom.xml
index 3e73ab59..1bfbee9c 100644
--- a/gepi/gepi-indexing/gepi-indexing-pubmed/pom.xml
+++ b/gepi/gepi-indexing/gepi-indexing-pubmed/pom.xml
@@ -5,7 +5,7 @@
gepi-indexing
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
4.0.0
@@ -15,7 +15,7 @@
de.julielab
gepi-indexing-base
- 1.0.0-SNAPSHOT
+ 0.11.1
diff --git a/gepi/gepi-indexing/gepi-indexing-testdata/pom.xml b/gepi/gepi-indexing/gepi-indexing-testdata/pom.xml
index 3d88805a..d3fc2754 100644
--- a/gepi/gepi-indexing/gepi-indexing-testdata/pom.xml
+++ b/gepi/gepi-indexing/gepi-indexing-testdata/pom.xml
@@ -5,7 +5,7 @@
gepi-indexing
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
4.0.0
@@ -15,7 +15,7 @@
de.julielab
gepi-indexing-base
- 1.0.0-SNAPSHOT
+ 0.11.1
diff --git a/gepi/gepi-indexing/pom.xml b/gepi/gepi-indexing/pom.xml
index 04095ffa..8a3b64d7 100644
--- a/gepi/gepi-indexing/pom.xml
+++ b/gepi/gepi-indexing/pom.xml
@@ -5,7 +5,7 @@
gepi
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
pom
diff --git a/gepi/gepi-test-data/pom.xml b/gepi/gepi-test-data/pom.xml
index 2d55bce8..0fae6afd 100644
--- a/gepi/gepi-test-data/pom.xml
+++ b/gepi/gepi-test-data/pom.xml
@@ -5,7 +5,7 @@
gepi
de.julielab
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
4.0.0
diff --git a/gepi/gepi-webapp/pom.xml b/gepi/gepi-webapp/pom.xml
index f38aa13a..47093781 100644
--- a/gepi/gepi-webapp/pom.xml
+++ b/gepi/gepi-webapp/pom.xml
@@ -224,7 +224,7 @@ of testing facilities designed for use with TestNG (http://testng.org/), so it's
de.julielab
gepi
- 1.0.0-SNAPSHOT
+ 0.11.1
../pom.xml
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/EventPagesDataSource.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/EventPagesDataSource.java
index 7f5e1077..05389b1f 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/EventPagesDataSource.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/EventPagesDataSource.java
@@ -3,10 +3,10 @@
import de.julielab.gepi.core.retrieval.data.Argument;
import de.julielab.gepi.core.retrieval.data.Event;
import de.julielab.gepi.core.retrieval.data.EventRetrievalResult;
+import de.julielab.gepi.core.retrieval.data.GepiRequestData;
import de.julielab.gepi.core.retrieval.services.EventRetrievalService;
import de.julielab.gepi.core.retrieval.services.IEventRetrievalService;
import de.julielab.gepi.core.services.IGeneIdService;
-import de.julielab.gepi.webapp.data.FilteredGepiRequestData;
import org.apache.tapestry5.grid.GridDataSource;
import org.apache.tapestry5.grid.SortConstraint;
import org.slf4j.Logger;
@@ -22,13 +22,13 @@
public class EventPagesDataSource implements GridDataSource {
private final IEventRetrievalService eventRetrievalService;
- private final FilteredGepiRequestData requestData;
+ private final GepiRequestData requestData;
private IGeneIdService geneIdService;
private Logger log;
private Future events;
private int start;
- public EventPagesDataSource(Logger log, Future events, IEventRetrievalService eventRetrievalService, IGeneIdService geneIdService, FilteredGepiRequestData requestData) {
+ public EventPagesDataSource(Logger log, Future events, IEventRetrievalService eventRetrievalService, IGeneIdService geneIdService, GepiRequestData requestData) {
this.log = log;
this.events = events;
this.eventRetrievalService = eventRetrievalService;
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/GepiInput.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/GepiInput.java
index f5d933bd..77bcec31 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/GepiInput.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/GepiInput.java
@@ -1,21 +1,19 @@
package de.julielab.gepi.webapp.components;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.Future;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
import de.julielab.gepi.core.retrieval.data.*;
import de.julielab.gepi.core.retrieval.services.IAggregatedEventsRetrievalService;
+import de.julielab.gepi.core.retrieval.services.IEventRetrievalService;
import de.julielab.gepi.core.services.IGePiDataService;
-import de.julielab.gepi.core.retrieval.data.GepiRequestData;
+import de.julielab.gepi.core.services.IGeneIdService;
import de.julielab.gepi.core.services.IdType;
import de.julielab.gepi.webapp.base.TabPersistentField;
import de.julielab.gepi.webapp.data.EventTypes;
import de.julielab.gepi.webapp.data.GepiQueryParameters;
-import org.apache.tapestry5.*;
+import de.julielab.gepi.webapp.pages.Index;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.PersistenceConstants;
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.annotations.*;
import org.apache.tapestry5.commons.Messages;
import org.apache.tapestry5.commons.services.TypeCoercer;
@@ -27,14 +25,20 @@
import org.apache.tapestry5.services.ApplicationStateManager;
import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;
-
-import de.julielab.gepi.core.retrieval.services.IEventRetrievalService;
-import de.julielab.gepi.core.services.IGeneIdService;
-import de.julielab.gepi.webapp.pages.Index;
import org.apache.tapestry5.util.EnumSelectModel;
import org.apache.tapestry5.util.EnumValueEncoder;
import org.slf4j.Logger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Future;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
@Import(stylesheet = {"context:css-components/gepiinput.css"})
public class GepiInput {
@@ -175,6 +179,8 @@ public class GepiInput {
*/
@Parameter
private GepiRequestData requestData;
+ // could be made a input form element; currently only here for direct links, e.g. from the help pages
+ private String docId;
// void onActivate(EventContext eventContext) {
// if (reset) {
@@ -193,6 +199,7 @@ public void reset() {
sentenceFilterString = "";
paragraphFilterString = "";
sectionNameFilterString = "";
+ docId = "";
}
public ValueEncoder getEventTypeEncoder() {
@@ -244,6 +251,8 @@ public void executeSearch(GepiQueryParameters queryParameters, long dataSessionI
this.filterFieldsConnectionOperator = queryParameters.getFilterFieldsConnectionOperator();
this.sectionNameFilterString = queryParameters.getSectionNameFilterString();
this.dataSessionId = dataSessionId;
+ this.includeUnary = queryParameters.isIncludeUnary();
+ this.docId = queryParameters.getDocid();
executeSearch();
}
@@ -274,7 +283,7 @@ public void executeSearch() {
else
inputMode = EnumSet.of(InputMode.FULLTEXT_QUERY);
}
- requestData = new GepiRequestData(selectedEventTypeNames, includeUnary, eventLikelihood, listAGePiIds, listBGePiIds, taxId != null ? taxId.split("\\s*,\\s*") : null, sentenceFilterString, paragraphFilterString, filterFieldsConnectionOperator, sectionNameFilterString, inputMode, dataSessionId);
+ requestData = new GepiRequestData(selectedEventTypeNames, includeUnary, eventLikelihood, listAGePiIds, listBGePiIds, taxId != null ? taxId.split("\\s*,\\s*") : null, sentenceFilterString, paragraphFilterString, filterFieldsConnectionOperator, sectionNameFilterString, inputMode, docId, dataSessionId);
log.debug("Fetching events from ElasticSearch");
// if ((filterString != null && !filterString.isBlank())) {
Future pagedEsResult = eventRetrievalService.getEvents(requestData, 0, TableResultWidget.ROWS_PER_PAGE, false);
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/TableResultWidget.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/TableResultWidget.java
index b0c9166e..2e21dfed 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/TableResultWidget.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/components/TableResultWidget.java
@@ -12,7 +12,6 @@
import de.julielab.gepi.webapp.EventPagesDataSource;
import de.julielab.gepi.webapp.base.TabPersistentField;
import de.julielab.gepi.webapp.data.EventTypes;
-import de.julielab.gepi.webapp.data.FilteredGepiRequestData;
import de.julielab.java.utilities.FileUtilities;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.StreamResponse;
@@ -186,9 +185,9 @@ public Object parseObject(String source, ParsePosition pos) {
// }
// }
public EventPagesDataSource getEventSource() {
- FilteredGepiRequestData filteredRequest = new FilteredGepiRequestData(requestData);
- filteredRequest.setEventTypeFilter(filterEventType);
- return new EventPagesDataSource(loggerSource.getLogger(EventPagesDataSource.class), dataService.getData(requestData.getDataSessionId()).getPagedResult(), eventRetrievalService, geneIdService, filteredRequest);
+// FilteredGepiRequestData filteredRequest = new FilteredGepiRequestData(requestData);
+// filteredRequest.setEventTypeFilter(filterEventType);
+ return new EventPagesDataSource(loggerSource.getLogger(EventPagesDataSource.class), dataService.getData(requestData.getDataSessionId()).getPagedResult(), eventRetrievalService, geneIdService, requestData);
}
void onUpdateTableData() {
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/FilteredGepiRequestData.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/FilteredGepiRequestData.java
index 66ea33b3..36eddbc4 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/FilteredGepiRequestData.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/FilteredGepiRequestData.java
@@ -70,7 +70,7 @@ public void setArg2IdFilter(String arg2IdFilter) {
private String arg2IdFilter;
public FilteredGepiRequestData(GepiRequestData requestData) {
- super(requestData.getEventTypes(), requestData.isIncludeUnary(), requestData.getEventLikelihood(), requestData.getListAGePiIds(),requestData.getListBGePiIds(), requestData.getTaxId(), requestData.getSentenceFilterString(), requestData.getParagraphFilterString(), requestData.getFilterFieldsConnectionOperator(), requestData.getSectionNameFilterString(), requestData.getInputMode(), requestData.getDataSessionId());
+ super(requestData.getEventTypes(), requestData.isIncludeUnary(), requestData.getEventLikelihood(), requestData.getListAGePiIds(),requestData.getListBGePiIds(), requestData.getTaxId(), requestData.getSentenceFilterString(), requestData.getParagraphFilterString(), requestData.getFilterFieldsConnectionOperator(), requestData.getSectionNameFilterString(), requestData.getInputMode(), requestData.getDocId(), requestData.getDataSessionId());
}
}
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/GepiQueryParameters.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/GepiQueryParameters.java
index 9245a392..9beb9856 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/GepiQueryParameters.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/data/GepiQueryParameters.java
@@ -12,13 +12,17 @@
public class GepiQueryParameters {
public static final String LISTA = "lista";
public static final String LISTB = "listb";
- public static final String TAXID = "taxid";
+ public static final String ALIST = "alist";
+ public static final String BLIST = "blist";
+ public static final String TAXID = "taxids";
public static final String EVENTTYPES = "eventtypes";
public static final String FACTUALITY = "factuality";
public static final String FILTERFIELDSCONNECTIONOPERATOR = "filterfieldsconnectionoperator";
public static final String SENTENCEFILTER = "sentencefilter";
public static final String PARAGRAPHFILTER = "paragraphfilter";
public static final String SECTIONNAMEFILTER = "sectionnamefilter";
+ public static final String INCLUDE_UNARY = "includeunary";
+ public static final String DOCID = "docid";
private String listATextAreaValue;
private String listBTextAreaValue;
private String taxId;
@@ -28,6 +32,8 @@ public class GepiQueryParameters {
private String sentenceFilterString;
private String paragraphFilterString;
private String sectionNameFilterString;
+ private String docid;
+ private boolean includeUnary;
private boolean formdata;
public GepiQueryParameters(Request request) {
@@ -36,7 +42,7 @@ public GepiQueryParameters(Request request) {
public boolean isValidRequest() {
// we don't want to intercept requests coming from the input form
- return !formdata && (!StringUtils.isBlank(listATextAreaValue) || !StringUtils.isBlank(sentenceFilterString) || !StringUtils.isBlank(paragraphFilterString) || !StringUtils.isBlank(sectionNameFilterString));
+ return !formdata && (!StringUtils.isBlank(listATextAreaValue) || !StringUtils.isBlank(sentenceFilterString) || !StringUtils.isBlank(paragraphFilterString) || !StringUtils.isBlank(sectionNameFilterString) || !StringUtils.isBlank(docid));
}
public String getListATextAreaValue() {
@@ -75,40 +81,77 @@ public String getSectionNameFilterString() {
return sectionNameFilterString;
}
+ public String getDocid() {
+ return docid;
+ }
+
+ public void setDocid(String docid) {
+ this.docid = docid;
+ }
+
+ public boolean isIncludeUnary() {
+ return includeUnary;
+ }
+
private void readParameters(Request request) {
- listATextAreaValue = request.getParameter(LISTA);
- if (listATextAreaValue != null)
- listATextAreaValue = Arrays.stream(listATextAreaValue.split("[\n,]")).collect(Collectors.joining("\n"));
- listBTextAreaValue = request.getParameter(LISTB);
- if (listBTextAreaValue != null)
- listBTextAreaValue = Arrays.stream(listBTextAreaValue.split("[\n,]")).collect(Collectors.joining("\n"));
- taxId = request.getParameter(TAXID);
- selectedEventTypes = new ArrayList<>(EnumSet.allOf(EventTypes.class));
- final String eventTypesString = request.getParameter(EVENTTYPES);
- if (!StringUtils.isBlank(eventTypesString)) {
- selectedEventTypes.clear();
- final String[] eventTypes = eventTypesString.split(",");
- for (String eventType : eventTypes) {
- for (EventTypes type : EventTypes.values()) {
- if (eventType.equalsIgnoreCase(type.name()))
- selectedEventTypes.add(type);
+ formdata = request.getParameter("t:formdata") != null;
+ // If the request comes from the input form, this GepiQueryParameters query is invalid anyway.
+ // We only use it for rest-like queries entered into the browser address bar directly
+ if (!formdata) {
+ listATextAreaValue = request.getParameter(LISTA);
+ if (listATextAreaValue == null)
+ listATextAreaValue = request.getParameter(ALIST);
+ if (listATextAreaValue != null)
+ listATextAreaValue = Arrays.stream(listATextAreaValue.split("[\n,]")).map(this::decodeUrlEncoding).collect(Collectors.joining("\n"));
+ listBTextAreaValue = request.getParameter(LISTB);
+ if (listBTextAreaValue == null)
+ listBTextAreaValue = request.getParameter(BLIST);
+ if (listBTextAreaValue != null)
+ listBTextAreaValue = Arrays.stream(listBTextAreaValue.split("[\n,]")).map(this::decodeUrlEncoding).collect(Collectors.joining("\n"));
+ taxId = request.getParameter(TAXID);
+ selectedEventTypes = new ArrayList<>(EnumSet.allOf(EventTypes.class));
+ final String eventTypesString = request.getParameter(EVENTTYPES);
+ if (!StringUtils.isBlank(eventTypesString)) {
+ selectedEventTypes.clear();
+ final String[] eventTypes = eventTypesString.split(",");
+ for (String eventType : eventTypes) {
+ for (EventTypes type : EventTypes.values()) {
+ if (eventType.equalsIgnoreCase(type.name()))
+ selectedEventTypes.add(type);
+ }
}
}
+ eventLikelihood = 1;
+ try {
+ eventLikelihood = Integer.parseInt(request.getParameter(FACTUALITY));
+ } catch (NumberFormatException e) {
+ // not given or not a number
+ }
+ filterFieldsConnectionOperator = request.getParameter(FILTERFIELDSCONNECTIONOPERATOR);
+ if (filterFieldsConnectionOperator == null)
+ filterFieldsConnectionOperator = "AND";
+ else
+ filterFieldsConnectionOperator = filterFieldsConnectionOperator.toUpperCase();
+ sentenceFilterString = request.getParameter(SENTENCEFILTER);
+ if (sentenceFilterString != null)
+ sentenceFilterString = decodeUrlEncoding(sentenceFilterString);
+ paragraphFilterString = request.getParameter(PARAGRAPHFILTER);
+ if (paragraphFilterString != null)
+ paragraphFilterString = decodeUrlEncoding(sentenceFilterString);
+ sectionNameFilterString = request.getParameter(SECTIONNAMEFILTER);
+ if (sectionNameFilterString != null)
+ sectionNameFilterString = decodeUrlEncoding(sectionNameFilterString);
+ docid = request.getParameter(DOCID);
+ includeUnary = Boolean.parseBoolean(request.getParameter(INCLUDE_UNARY));
}
- eventLikelihood = 1;
- try {
- eventLikelihood = Integer.parseInt(request.getParameter(FACTUALITY));
- } catch (NumberFormatException e) {
- // not given or not a number
- }
- filterFieldsConnectionOperator = request.getParameter(FILTERFIELDSCONNECTIONOPERATOR);
- if (filterFieldsConnectionOperator == null)
- filterFieldsConnectionOperator = "AND";
- else
- filterFieldsConnectionOperator = filterFieldsConnectionOperator.toUpperCase();
- sentenceFilterString = request.getParameter(SENTENCEFILTER);
- paragraphFilterString = request.getParameter(PARAGRAPHFILTER);
- sectionNameFilterString = request.getParameter(SECTIONNAMEFILTER);
- formdata = request.getParameter("t:formdata") != null;
+ }
+
+ private String decodeUrlEncoding(String encodedString) {
+ return encodedString.replaceAll("\\$002520", " ")
+ .replaceAll("\\$00253[Aa]", ":")
+ .replaceAll("\\$00252[Cc]", ",")
+ .replaceAll("\\$002522", "\"")
+ .replaceAll("\\$007[Cc]", "|")
+ .replaceAll("\\$002[Bb]","+");
}
}
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/pages/Help.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/pages/Help.java
index eb094507..6b090749 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/pages/Help.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/pages/Help.java
@@ -3,6 +3,7 @@
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;
+
@Import(stylesheet = {"context:css-pages/help.css"})
public class Help {
@@ -11,5 +12,6 @@ public class Help {
public void afterRender() {
// javaScriptSupport.require("gepi/pages/help").invoke("setupScrollSpy");
+ javaScriptSupport.require("gepi/base").invoke("setuptooltips");
}
}
diff --git a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/services/AppModule.java b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/services/AppModule.java
index 831412f2..0fbe9e7c 100644
--- a/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/services/AppModule.java
+++ b/gepi/gepi-webapp/src/main/java/de/julielab/gepi/webapp/services/AppModule.java
@@ -53,7 +53,7 @@ public static void contributeFactoryDefaults(
// The application version is primarily useful as it appears in
// any exception reports (HTML or textual).
- configuration.override(SymbolConstants.APPLICATION_VERSION, "0.11.0-beta");
+ configuration.override(SymbolConstants.APPLICATION_VERSION, "0.11.1");
// Avoid Ajax-requests waiting for each other. This would make asynchronous lading of
// dashboard elements impossible
configuration.override(SymbolConstants.SESSION_LOCKING_ENABLED, false);
diff --git a/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/FAQ.tml b/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/FAQ.tml
index cd4d6f17..9a310156 100644
--- a/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/FAQ.tml
+++ b/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/FAQ.tml
@@ -51,7 +51,12 @@
Why do I receive interactions with genes I did not query for
- Either wanted: Search for PRKAA1 includes
+ queries for families, complexes and gene groups return their parts or members, just like GO terms
+
+ Why do full-text query or filter results highlight words that do not seem to match a query term?
+
+ For full-text queries GePI expands abbreviation. Consider the abbreviation cyclic mechanical stress (CMS), used for example in PMC2654047. It is introduced at the beginning of the document and then used throughout the text. Thus, when the query stress would only work on the first occurrence of the term when the long form is given. To allow matches for all the other places, too, we internally expand abbreviations to make such matches possible.
+ Show this example in GePI
Is GePI open source?
diff --git a/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/Help.tml b/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/Help.tml
index 629f46e7..9e780305 100644
--- a/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/Help.tml
+++ b/gepi/gepi-webapp/src/main/resources/de/julielab/gepi/webapp/pages/Help.tml
@@ -17,7 +17,7 @@
The focus lies on interactions that involve genes, gene products, families, complexes and
groups of genes. For the purpose of this service, no difference is made between genes and
- their products. Text mining algorithms are employed to search the text of documents from
+ their products. Biomedical Natural Language Processing (BioNLP) algorithms are employed to scan the text of documents from
PubMed and the PubMed Central open access subset for mentions of interactions between these
types of
entities. Recognized interactions contain gene expression, phosphorylation, positive and
@@ -26,41 +26,32 @@
- In this study, we examined whether gp41-induced
-
-
- IL-10
-
- up-regulation
- is mediated by the previously described
- synergistic activation of cAMP and
- NF-kappaB pathways.
+ Fibroblast growth factor-1 (FGF-1) enhances
+ IL-2 production and nuclear translocation of NF-kappaB in FGF receptor-bearing Jurkat T cells.
- contains the protein mentions gp41 and IL-10 and the protein complex NFkappaB. Between those, several events
+ contains the gene/protein mentions Fibroblast growth factor-1, FGF-1, IL-2, the protein complex NFkappaB and the FGF receptor family. Between some of those, several events
describe the up-regulation of
- IL-10
+ IL-1
- , indicated by the words induced,
- up-regulation
- , mediated and activation.
- For this service, the gene/protein names are recognized and regulation events are extracted.
- Focus on the gene/protein entities is given. Thus, although there are multiple regulations
- mentioned, the interaction is simplified to a single GePI database item that records the
- entities and the interaction/event types: gp41 and IL-10
- and (up-)regulation. This is an example of a binary interaction between two proteins. Events can refer to a single entity and, thus, be unary. Frequent examples are phosphorylation events when the cause of the activation is either not mentioned or is not an entity in the scope of GePI. Consider the example
+ , indicated by the words enhances and production.
+ FGF-1 is a short form of Fibroblast growth factor-1. In such cases the interaction with the short form is omitted from the database to avoid duplication.
+ For this service, the gene/protein names are recognized and molecular events are extracted from the document text.
+ Interactions that include multiple events are simplified to a single GePI database item that records the
+ entities and the interaction/event types: Fibroblast growth factor-1 and IL-2
+ , (up-)regulation and gene expression. This is an example of a binary interaction between two entities. Events can refer to a single entity and, thus, be unary. Frequent examples are phosphorylation events when the cause of the activation is either not mentioned or is not an entity in the scope of GePI. Consider the example
@@ -76,6 +67,7 @@
target="_blank">
PMID9794375
+ Show in GePI
where the phosophorylation of an entity is discussed without the mention of another entity.
@@ -104,60 +96,80 @@
database |
prefix |
- example |
+ exampleShow in GePI |
NCBI Gene |
gene |
- gene:2475 |
+ gene:2475 |
Ensembl |
ens |
- ens:ENSG00000198793 |
+ ens:ENSG00000198793 |
HGNC Gene |
hgnc |
- hgnc:HGNC:3942 |
+ hgnc:HGNC:3942 |
UniProtKB |
up |
- up:P42345 , up:MTOR_HUMAN |
+ up:P42345 , up:MTOR_HUMAN |
HGNC Gene Group |
hgncg |
- hgncg:1900 |
+ hgncg:1900 |
FamPlex |
fplx |
- fplx:AMPK |
+ fplx:AMPK |
Gene Ontology |
go |
- go:GO:0016301 |
+ go:GO:0016301 |
Search types
- Open search. When List A is specified but List B is not, this is called an open search because the set of possible interaction partners is left open. The result will contain interactions that have an item of List A as one interaction partner and any other interaction partner. No events will be returned where both interaction partners belong to List A. If this should be allowed, a closed search can be performed where List A and List B are set to the same list of identifiers.
+
+
Open Search
When List A is specified but List B is not, this is called an open search because the set of possible interaction partners is left open. The result will contain interactions that have an item of List A as one interaction partner and any other interaction partner. No events will be returned where both interaction partners belong to List A. If this should be allowed, a closed search can be performed where List A and List B are set to the same list of identifiers.
+
+
+
+ Show in GePI
+
+
- Closed search. When List A and List B are provided, this is called a closed search because a closed set of interaction partners has been defined. Result interactions will always contain one interaction partner from List A and one from List B. Entries are allowed to exist in both lists. No events will be returned that contain the same gene as both interaction partners.
+
Closed Search
+ When List A and List B are provided, this is called a closed search because a closed set of interaction partners has been defined. Result interactions will always contain one interaction partner from List A and one from List B. Entries are allowed to exist in both lists. No events will be returned that contain the same gene as both interaction partners.
+
+
+
+ Show in GePI
+
+
-
- Full-text search. It is possible to omit the specification of List A and List B completely if at least one of the three full-text filter fields is specified. The result will contain the interactions that appeared in the sentences or paragraphs that match the respective full-text query. Basic boolean operators are possible, for example +
is used for AND
, the pipe symbol |
signifies a boolean OR
and quotes "..."
denote an phrase expression that groups words togther, e.g. "MAPK pathway" | "MAPK signaling"
searches for MAPK pathway OR MAPK signaling
where the text is required to contain the exact phrases. The query syntax is specified in the ElasticSearch Simple Query String Query with all operators enabled.
+
+
Full-text Search
+ It is possible to omit the specification of List A and List B completely if at least one of the three full-text filter fields is specified. The result will contain the interactions that appeared in the sentences or paragraphs that match the respective full-text query. Basic boolean operators are possible, for example +
is used for AND
, the pipe symbol |
signifies a boolean OR
and quotes "..."
denote an phrase expression that groups words togther, e.g. "MAPK pathway" | "MAPK signaling"
searches for MAPK pathway OR MAPK signaling
where the text is required to contain the exact phrases. The query syntax is specified in the ElasticSearch Simple Query String Query with all operators enabled.
+ When both sentence and paragraph filters are specified, the way to combine both filters can be selected using the button between the input fields. "AND" means that an interaction must match both filters to be included in the result, "OR" includes all interactions that match either filter.
+
+
+ Show in GePI
+
The section heading search aims at interactions mentioned within sections whose headings match the specified query. All interactions in the database store the names of the sections or subsections they are contained in. As an example, consider the following section structure.
@@ -169,38 +181,31 @@
[...]
- BMP-6 induces phosphorylation of Smad1/5/8
-
- [...]
-
- BMP-6 induces upregulation of Id1
+ The defence collagens C1q and MBL interact with BMP-1 and mTLL-1
+
+ [...]
+
+ BMP-1/C1q co-localization in tissue inflammation
- Next, we wanted to explore whether the
- BMP-6
-
- induced
-
- phosphorylation
- of
- Smad 1/5/8
- also could induce transcriptional changes of target genes.
+ To test the possibility of an interaction of C1q with BMP-1 in physiological conditions, we investigated the expression of these two proteins in human skin sections by immunofluorescence.
- The interaction between BMP-6 and Smas 1/5/8 is mentioned in the Results subsection named BMP-6 induces upregulation of Id1 of PMC1134658. The database entry for this interaction stores all headings and titles up to the document title:
+ The interaction between C1q and BMP-1 is mentioned in the Results subsection named BMP-1/C1q co-localization in tissue inflammation of PMC5717261. The database entry for this interaction stores all headings and titles that include the interaction - or each other - up to the document title:
- - BMP-6 induces upregulation of Id1 subsection heading
+ - BMP-1/C1q co-localization in tissue inflammation subsection heading
- Results section heading
- - BMP-6 inhibits growth of mature human B cells; induction of Smad phosphorylation and upregulation of Id1 article title
+ - Interaction of Complement Defence Collagens C1q and Mannose-Binding Lectin with BMP-1/Tolloid-like Proteinases article title
- Of note, the subheading BMP-6 induces phosphorylation of Smad1/5/8 is not included in the list because it does not contain the interaction but exists on the same section sub-level as BMP-6 induces upregulation of Id1.
+ Of note, the subheading The defence collagens C1q and MBL interact with BMP-1 and mTLL-1 is not included in the list because it is not part of the section-chain from interaction to article title but exists on the same section sub-level as Defence collagens are neither substrates nor inhibitors of soluble BMP-1 that includes the interaction.
Filter types
@@ -208,44 +213,76 @@
These filters cannot constitute searches of their own but exist to solely to restrict the search defined by the methods described above.
- Taxonomy filter.A comma-separated list of NCBI Taxonomy IDs may be provided to filter on the interaction partners.
+ For each filter type presented below, an example is given. After clicking an example link on opening the new browser tab, you may fetch the input panel by the handle to the left of page to see how the filter is used with the input form.
+
The filter examples consist of two links each, one for a reference search without the filter and one search with the enabled filter for comparison. Please be patient and wait for each search to complete before you hit another link. The web application has a single session state and would return the same - the latest - result for both searches if different links are hit too quickly one after another.
+
+
+
Taxonomy filter
+ A comma-separated list of NCBI Taxonomy IDs may be provided to filter on the interaction partners.
NCBI Gene entries are always assigned a exactly one taxonomy ID. The GePI text processing pipeline also assigns species to protein families
based on the species discussed in the respective document. The species are stored as taxonomy IDs in the interaction database and
also used for species filter purposes. In case no species is mentioned at all - which commonly happens in PubMed abstracts - the human
taxonomy ID 9606 is assigned as this the most frequent organism discussed in PubMed.
+
+
+
+ Show without filter
+
+
+
+ Show with filter
+
+
+
+
+
Interaction types filter
+ By default, interactions of all types are included into a search result. This selection can be reduced to focus on specific interaction types, e.g. binding events regarding the input gene lists.
+
+
+
+ Show without filtery
+
+
+
+ Show with filter
+
+
- Interaction types filter. By default, interactions of all types are included into a search result. This selection can be reduced to focus on specific interaction types, e.g. phosphorylation events regarding the input gene lists.
+
Inclusion of single gene events
+ The interaction extraction algorithm frequently finds molecular event descriptions that refer to a single gene without further interaction partners as described in Purpose of this Web site.
+ These unary events are excluded from the search results by default. They will be included if the button is activated.
+
+
+
+ Show without filter
+
+
+
+ Show with filter
+
+
- Inclusion of single gene events. The interaction extraction algorithm frequently finds molecular event descriptions that refer to a single gene without further interaction partners as described in Purpose of this Web site.
- These unary events are excluded from the search results by default. They will be included if the button is activated.
-
- Factuality level filter. Reports of molecular interactions may include words or phrases to express a restriction on factuality of an interaction description meaning that the described interaction might or might not have been observed. Consider the following example.
+
Factuality level filter
+ Reports of molecular interactions may include words or phrases to express a restriction on factuality of an interaction description meaning that the described interaction might or might not have been observed. Consider the following example.
- Next, we wanted to explore whether the
- BMP-6
-
- induced
-
- phosphorylation
- of
- Smad 1/5/8
- also could induce transcriptional changes of target genes.
+ To test the possibility of an interaction of C1q with BMP-1 in physiological conditions, we investigated the expression of these two proteins in human skin sections by immunofluorescence.
- The words explore and whether express at this specific position in text that the interaction between BMP-6 and Smad 1/5/6 is not reported
+ The word possibility expresses at this specific position in text that the interaction between C1q and BMP-1 is not reported
as a fact but stands to be investigated. To control the degree of factuality of returned interactions, GePI offers six filter levels.
@@ -275,10 +312,31 @@
The selection of a factuality item filters interactions to be assigned the selected or a higher - more assertive - factuality level. Thus, selecting moderate will allow interactions
with moderate, high and assertion factuality levels to be included in the result. Thus, the default
selection lies on negation which does not impose any factuality restriction.
+
+
+
+ Show without filter
+
+
+
+ Show with filter
+
+
- full-text filters. The full-text fields can be used to start a search on their own or they can serve as a filter for the results of specified A-List and B-List genes. Then, only interactions will be returned that adhere
- to the gene list specification and also match the provided full-text filters. See full-text search for information about the exact full-text query mechanisms.
+
Full-text filters
+ The full-text fields can be used to start a search on their own or they can serve as a filter for the results of specified A-List and B-List genes. Then, only interactions will be returned that adhere
+ to the gene list specification and also match the provided full-text filters. See full-text search for information about the exact full-text query mechanisms.
+
+
+
+ Show without filter
+
+
+
+ Show with filter
+
+
Output Dashboard
@@ -411,7 +469,7 @@
It shows the interaction partner symbols and IDs as recognized during automated literature processing
via natural language processing (NLP) techniques, their actual text string in the document,
- their factuality rating and the sentence from the
+ their factuality rating and the sentence from the
document that contains the description of the interaction. If a full-text filter was
set on paragraph level, a portion of the paragraph containing the filter query is also given.
@@ -444,8 +502,22 @@
Input Specification
@@ -483,7 +555,6 @@
-
@@ -494,5 +565,4 @@