Compare commits
21 Commits
master
...
4.438.0-RE
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d022b1a5c9 | ||
|
|
dd545daeb7 | ||
|
|
ef06d45efe | ||
|
|
bd97e60e0f | ||
|
|
8126e7f81e | ||
|
|
af347de8a3 | ||
|
|
dfd958466e | ||
|
|
ac384f0636 | ||
|
|
29d25d432c | ||
|
|
3a9bd3958e | ||
|
|
104496c3cc | ||
|
|
16b4910ffb | ||
|
|
a93049cd41 | ||
|
|
a36aa0c047 | ||
|
|
ca9dcc8550 | ||
|
|
7bb97c1027 | ||
|
|
27b5a1afcd | ||
|
|
d34921acd8 | ||
|
|
3429563079 | ||
|
|
00d83f58fd | ||
|
|
035756678f |
@ -377,7 +377,6 @@ public class DocumentTree {
|
||||
}
|
||||
|
||||
entity.computeRelations();
|
||||
entity.notifyEntityInserted();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ public class TextEntity implements IEntity {
|
||||
|
||||
TextRange textRange;
|
||||
@Builder.Default
|
||||
Set<TextRange> duplicateTextRanges = new HashSet<>();
|
||||
List<TextRange> duplicateTextRanges = new ArrayList<>();
|
||||
String type; // TODO: make final once ManualChangesApplicationService::recategorize is deleted
|
||||
final EntityType entityType;
|
||||
|
||||
@ -215,20 +215,22 @@ public class TextEntity implements IEntity {
|
||||
return textEntity.contains(this);
|
||||
}
|
||||
|
||||
|
||||
public boolean contains(TextEntity textEntity) {
|
||||
|
||||
if (this.textRange.contains(textEntity.getTextRange())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Set<TextRange> textEntityDuplicateRanges = textEntity.getDuplicateTextRanges();
|
||||
|
||||
for (TextRange duplicateTextRange : this.duplicateTextRanges) {
|
||||
List<TextRange> textEntityDuplicateRanges = textEntity.getDuplicateTextRanges();
|
||||
// use optimized indexed loops for extra performance boost
|
||||
for (int i = 0, duplicateTextRangesSize = duplicateTextRanges.size(); i < duplicateTextRangesSize; i++) {
|
||||
TextRange duplicateTextRange = duplicateTextRanges.get(i);
|
||||
if (duplicateTextRange.contains(textEntity.getTextRange())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (TextRange otherRange : textEntityDuplicateRanges) {
|
||||
for (int j = 0, textEntityDuplicateRangesSize = textEntityDuplicateRanges.size(); j < textEntityDuplicateRangesSize; j++) {
|
||||
TextRange otherRange = textEntityDuplicateRanges.get(j);
|
||||
if (duplicateTextRange.contains(otherRange)) {
|
||||
return true;
|
||||
}
|
||||
@ -239,7 +241,6 @@ public class TextEntity implements IEntity {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean intersects(TextEntity textEntity) {
|
||||
|
||||
return this.textRange.intersects(textEntity.getTextRange()) //
|
||||
|
||||
@ -16,7 +16,7 @@ val layoutParserVersion = "0.193.0"
|
||||
val jacksonVersion = "2.15.2"
|
||||
val droolsVersion = "9.44.0.Final"
|
||||
val pdfBoxVersion = "3.0.0"
|
||||
val persistenceServiceVersion = "2.641.0"
|
||||
val persistenceServiceVersion = "2.639.0"
|
||||
val llmServiceVersion = "1.20.0-RED10072.2"
|
||||
val springBootStarterVersion = "3.1.5"
|
||||
val springCloudVersion = "4.0.4"
|
||||
@ -77,8 +77,8 @@ dependencies {
|
||||
implementation("org.apache.tomcat:tomcat-websocket:${tomcatVersion}")
|
||||
implementation("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}")
|
||||
|
||||
implementation("org.liquibase:liquibase-core:4.29.2") // Needed to be set explicit, otherwise spring dependency management sets it to 4.20.0
|
||||
implementation("org.liquibase.ext:liquibase-mongodb:4.29.2")
|
||||
implementation("org.liquibase:liquibase-core:4.30.0") // Needed to be set explicit, otherwise spring dependency management sets it to 4.20.0
|
||||
implementation("org.apache.commons:commons-lang3:3.13.0") // Needed for liquibase 4.30.0
|
||||
|
||||
implementation("net.logstash.logback:logstash-logback-encoder:7.4")
|
||||
api("ch.qos.logback:logback-classic")
|
||||
|
||||
@ -81,6 +81,7 @@ public class ManualChangesApplicationService {
|
||||
public void resizeEntityAndReinsert(TextEntity entityToBeResized, ManualResizeRedaction manualResizeRedaction) {
|
||||
|
||||
entityToBeResized.notifyEntityRemoved();
|
||||
entityToBeResized.removeFromGraph();
|
||||
|
||||
PositionOnPage positionOnPageToBeResized = entityToBeResized.getPositionsOnPagePerPage()
|
||||
.stream()
|
||||
@ -155,7 +156,7 @@ public class ManualChangesApplicationService {
|
||||
entityToBeResized.setTextRange(closestEntity.getTextRange());
|
||||
entityToBeResized.setTextAfter(closestEntity.getTextAfter());
|
||||
entityToBeResized.setTextBefore(closestEntity.getTextBefore());
|
||||
entityToBeResized.setDuplicateTextRanges(new HashSet<>(closestEntity.getDuplicateTextRanges()));
|
||||
entityToBeResized.setDuplicateTextRanges(new ArrayList<>(closestEntity.getDuplicateTextRanges()));
|
||||
entityToBeResized.setValue(closestEntity.getValue());
|
||||
entityToBeResized.setPages(newIntersectingPages);
|
||||
}
|
||||
|
||||
@ -985,18 +985,17 @@ public class EntityCreationService {
|
||||
return Optional.empty(); // Entity has been recategorized and should not be created at all.
|
||||
}
|
||||
TextEntity existingEntity = optionalTextEntity.get();
|
||||
if (existingEntity.getTextRange().equals(trimmedTextRange)) {
|
||||
if (existingEntity.getTextRange().equals(textRange)) {
|
||||
return optionalTextEntity; // exactly the same entity, return directly
|
||||
}
|
||||
if (!existingEntity.resized()) {
|
||||
addDuplicateEntityToGraph(existingEntity, trimmedTextRange, node);
|
||||
addDuplicateEntityToGraph(existingEntity, textRange, node);
|
||||
return optionalTextEntity; // If Entity has not been resized, insert as duplicate at appropriate position
|
||||
}
|
||||
return Optional.empty(); // Entity has been resized, if there are duplicates they should be treated there
|
||||
}
|
||||
|
||||
addListenerToEntity(entity);
|
||||
node.getDocumentTree().addEntityToGraph(entity);
|
||||
insertToKieSession(entity);
|
||||
|
||||
entity.addEngines(engines);
|
||||
|
||||
@ -1422,8 +1421,8 @@ public class EntityCreationService {
|
||||
.ifPresent(e -> addDuplicateEntityToGraph(e, entity.getTextRange(), node));
|
||||
|
||||
} else {
|
||||
addListenerToEntity(entity);
|
||||
documentTree.addEntityToGraph(entity);
|
||||
insertToKieSession(entity);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1475,13 +1474,18 @@ public class EntityCreationService {
|
||||
}
|
||||
|
||||
|
||||
private void addListenerToEntity(TextEntity textEntity) {
|
||||
|
||||
|
||||
/**
|
||||
* Inserts a text entity into the kieSession for further processing.
|
||||
*
|
||||
* @param textEntity The merged text entity to insert.
|
||||
*/
|
||||
public void insertToKieSession(TextEntity textEntity) {
|
||||
|
||||
if(kieSessionUpdater != null) {
|
||||
textEntity.addEntityEventListener(kieSessionUpdater);
|
||||
kieSessionUpdater.insert(textEntity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -14,15 +14,12 @@ import org.springframework.stereotype.Service;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedRedactions;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.BaseAnnotation;
|
||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval;
|
||||
import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings;
|
||||
import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode;
|
||||
import com.iqser.red.service.redaction.v1.server.service.DictionaryService;
|
||||
import com.iqser.red.service.redaction.v1.server.service.EntityFindingUtility;
|
||||
@ -44,14 +41,9 @@ public class EntityFromPrecursorCreationService {
|
||||
RedactionServiceSettings settings;
|
||||
|
||||
|
||||
public List<PrecursorEntity> createEntitiesIfFoundAndReturnNotFoundEntries(ManualRedactions manualRedactions, Document document, String dossierTemplateId) {
|
||||
public List<PrecursorEntity> createEntitiesIfFoundAndReturnNotFoundEntries(ManualRedactions manualRedactions, SemanticNode node, String dossierTemplateId) {
|
||||
|
||||
Set<Integer> pageNumbers = document.getPages()
|
||||
.stream()
|
||||
.map(Page::getNumber)
|
||||
.collect(Collectors.toSet());
|
||||
Set<IdRemoval> idRemovals = manualRedactions.getIdsToRemove();
|
||||
|
||||
List<PrecursorEntity> manualEntities = manualRedactions.getEntriesToAdd()
|
||||
.stream()
|
||||
.filter(BaseAnnotation::isLocal)
|
||||
@ -60,10 +52,6 @@ public class EntityFromPrecursorCreationService {
|
||||
.filter(idRemoval -> idRemoval.getRequestDate().isAfter(manualRedactionEntry.getRequestDate()))
|
||||
.findAny()//
|
||||
.isEmpty())
|
||||
.filter(manualRedactionEntry -> manualRedactionEntry.getPositions()
|
||||
.stream()
|
||||
.map(Rectangle::getPage)
|
||||
.allMatch(pageNumbers::contains))
|
||||
.map(manualRedactionEntry -> //
|
||||
PrecursorEntity.fromManualRedactionEntry(manualRedactionEntry, dictionaryService.isHint(manualRedactionEntry.getType(), dossierTemplateId)))
|
||||
.peek(manualEntity -> {
|
||||
@ -74,7 +62,7 @@ public class EntityFromPrecursorCreationService {
|
||||
}
|
||||
})
|
||||
.toList();
|
||||
return toTextEntity(manualEntities, document);
|
||||
return toTextEntity(manualEntities, node);
|
||||
}
|
||||
|
||||
|
||||
@ -152,7 +140,7 @@ public class EntityFromPrecursorCreationService {
|
||||
}
|
||||
correctEntity.setDeepestFullyContainingNode(closestEntity.getDeepestFullyContainingNode());
|
||||
correctEntity.setIntersectingNodes(new ArrayList<>(closestEntity.getIntersectingNodes()));
|
||||
correctEntity.setDuplicateTextRanges(new HashSet<>(closestEntity.getDuplicateTextRanges()));
|
||||
correctEntity.setDuplicateTextRanges(new ArrayList<>(closestEntity.getDuplicateTextRanges()));
|
||||
correctEntity.setPages(new HashSet<>(closestEntity.getPages()));
|
||||
|
||||
correctEntity.setValue(closestEntity.getValue());
|
||||
|
||||
@ -28,7 +28,7 @@ import com.iqser.red.service.redaction.v1.server.logger.RulesLogger;
|
||||
import com.iqser.red.service.redaction.v1.server.logger.TrackingAgendaEventListener;
|
||||
import com.iqser.red.service.redaction.v1.server.model.NerEntities;
|
||||
import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.IEntity;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image;
|
||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode;
|
||||
@ -121,17 +121,14 @@ public class EntityDroolsExecutionService {
|
||||
.flatMap(SemanticNode::streamAllSubNodes)
|
||||
.forEach(semanticNode -> {
|
||||
if (semanticNode instanceof Image image) {
|
||||
image.addEntityEventListener(kieSessionUpdater);
|
||||
image.notifyEntityInserted();
|
||||
kieSessionUpdater.insert(image);
|
||||
} else {
|
||||
kieSession.insert(semanticNode);
|
||||
}
|
||||
});
|
||||
|
||||
for (TextEntity textEntity : document.getEntities()) {
|
||||
textEntity.addEntityEventListener(kieSessionUpdater);
|
||||
textEntity.notifyEntityInserted();
|
||||
}
|
||||
document.getEntities()
|
||||
.forEach(kieSessionUpdater::insert);
|
||||
|
||||
document.getPages()
|
||||
.forEach(kieSession::insert);
|
||||
|
||||
@ -24,6 +24,13 @@ public class KieSessionUpdater implements EntityEventListener {
|
||||
KieSession kieSession;
|
||||
|
||||
|
||||
public void insert(IEntity entity) {
|
||||
|
||||
entity.addEntityEventListener(this);
|
||||
onEntityInserted(entity);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onEntityInserted(IEntity entity) {
|
||||
|
||||
|
||||
@ -25,8 +25,7 @@ fforesight:
|
||||
ignored-endpoints: [ '/redaction-gateway-v1', '/actuator/health/**',"/api/rules-logging/rulesocket","/api/rules-logging/rulesocket/**", '/redaction-gateway-v1/async/download/with-ott/**',
|
||||
'/internal-api/**', '/redaction-gateway-v1/docs/swagger-ui', '/rules/test',
|
||||
'/redaction-gateway-v1/docs/**','/redaction-gateway-v1/docs',
|
||||
'/api', '/api/','/api/docs/**','/api/docs','/api/docs/swagger-ui',
|
||||
'/actuator/prometheus' ]
|
||||
'/api', '/api/','/api/docs/**','/api/docs','/api/docs/swagger-ui' ]
|
||||
|
||||
spring:
|
||||
application:
|
||||
|
||||
@ -1584,23 +1584,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.7
|
||||
rule "X.7.0: Remove all images"
|
||||
salience 512
|
||||
|
||||
@ -243,7 +243,7 @@ public abstract class AbstractRedactionIntegrationTest {
|
||||
public static void init() {
|
||||
|
||||
synchronized (PDFNet.class) {
|
||||
PDFNet.initialize("demo:admin@knecon.com:7ed45ca80200000000c1e1765b94afccf5bbc0cb8582fd932c602e286a");
|
||||
PDFNet.initialize("demo:1650351709282:7bd235e003000000004ec28a6743e1163a085e2115de2536ab6e2cfe5a");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -169,7 +169,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
public static void init() {
|
||||
|
||||
synchronized (PDFNet.class) {
|
||||
PDFNet.initialize("demo:admin@knecon.com:7ed45ca80200000000c1e1765b94afccf5bbc0cb8582fd932c602e286a");
|
||||
PDFNet.initialize("demo:1650351709282:7bd235e003000000004ec28a6743e1163a085e2115de2536ab6e2cfe5a");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -261,6 +261,7 @@ public class DocumineFloraTest extends AbstractRedactionIntegrationTest {
|
||||
}
|
||||
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
public void testDoseMortalityExtraction() {
|
||||
|
||||
|
||||
@ -1315,7 +1315,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -1385,23 +1384,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -2079,7 +2079,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -2149,23 +2148,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -1451,7 +1451,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -1521,23 +1520,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.7
|
||||
rule "X.7.0: Remove all images"
|
||||
salience 512
|
||||
|
||||
@ -1042,7 +1042,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -1112,23 +1111,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -363,7 +363,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -433,23 +432,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -1408,23 +1408,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -423,7 +423,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -493,23 +492,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -513,7 +513,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -583,23 +582,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -396,6 +396,38 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE"
|
||||
$contained.remove("X.2.0", "remove Entity of type ENTITY when contained by FALSE_POSITIVE");
|
||||
end
|
||||
|
||||
rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE"
|
||||
salience 64
|
||||
when
|
||||
$containment: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
$container.entityType == EntityType.FALSE_POSITIVE,
|
||||
$container.active(),
|
||||
$contained.entityType == EntityType.ENTITY,
|
||||
$contained.type() == $container.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.2.0", "remove Entity of type ENTITY when contained by FALSE_POSITIVE");
|
||||
end
|
||||
|
||||
rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
salience 64
|
||||
when
|
||||
$containment: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
$container.entityType == EntityType.FALSE_POSITIVE,
|
||||
$container.active(),
|
||||
$contained.entityType == EntityType.HINT,
|
||||
$contained.type() == $container.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.2.1", "remove Entity of type HINT when contained by FALSE_POSITIVE");
|
||||
end
|
||||
|
||||
rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
salience 64
|
||||
when
|
||||
@ -413,7 +445,6 @@ rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE"
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.3
|
||||
rule "X.3.0: Remove RECOMMENDATION Contained by FALSE_RECOMMENDATION"
|
||||
salience 64
|
||||
when
|
||||
@ -483,23 +514,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -995,23 +995,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -2187,23 +2187,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.6
|
||||
rule "X.6.0: Remove Lower Rank Entity Contained by ENTITY or HINT"
|
||||
salience 32
|
||||
|
||||
@ -1589,23 +1589,6 @@ rule "X.5.1: Remove Entity of type RECOMMENDATION when contained by RECOMMENDATI
|
||||
end
|
||||
|
||||
|
||||
rule "X.5.2: Remove Entity of type RECOMMENDATION when contained by ENTITY of same type"
|
||||
salience 256
|
||||
when
|
||||
$intersection: Containment(
|
||||
$container: container,
|
||||
$contained: contained,
|
||||
($container.entityType == EntityType.ENTITY || $container.entityType == EntityType.HINT),
|
||||
!$container.removed(),
|
||||
$contained.entityType == EntityType.RECOMMENDATION,
|
||||
$container.type() == $contained.type(),
|
||||
!$contained.hasManualChanges()
|
||||
)
|
||||
then
|
||||
$contained.remove("X.5.2", "remove Entity of type RECOMMENDATION when contained by ENTITY of same type");
|
||||
end
|
||||
|
||||
|
||||
// Rule unit: X.7
|
||||
rule "X.7.0: Remove all images"
|
||||
salience 512
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user