Avoid ConcurrentModificationException
This commit is contained in:
parent
3f69030b03
commit
c21ad9155c
@ -307,12 +307,17 @@ public class Section {
|
|||||||
|
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
String match = matcher.group().trim();
|
String match = matcher.group().trim();
|
||||||
if (match.length() >= 3) {
|
if (match.length() >= 3 && !dictionaryService.getDictionary(type)
|
||||||
if(!dictionaryService.getDictionary(type).getEntries().contains(match) && !dictionaryService.getDictionary(RECOMMENDATION_PREFIX + type).getEntries().contains(match)) {
|
.getEntries()
|
||||||
dictionaryService.addToLocalDictionary(RECOMMENDATION_PREFIX + type, match);
|
.contains(match) && !dictionaryService.getDictionary(RECOMMENDATION_PREFIX + type)
|
||||||
}
|
.getEntries()
|
||||||
|
.contains(match)) {
|
||||||
|
dictionaryService.addToLocalDictionary(RECOMMENDATION_PREFIX + type, match);
|
||||||
String lastname = match.split(" ")[0];
|
String lastname = match.split(" ")[0];
|
||||||
if(!dictionaryService.getDictionary(type).getEntries().contains(lastname) && !dictionaryService.getDictionary(RECOMMENDATION_PREFIX + type).getEntries().contains(lastname)) {
|
if (!dictionaryService.getDictionary(type).getEntries().contains(lastname) && !dictionaryService
|
||||||
|
.getDictionary(RECOMMENDATION_PREFIX + type)
|
||||||
|
.getEntries()
|
||||||
|
.contains(lastname)) {
|
||||||
dictionaryService.addToLocalDictionary(RECOMMENDATION_PREFIX + type, lastname);
|
dictionaryService.addToLocalDictionary(RECOMMENDATION_PREFIX + type, lastname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.iqser.red.service.redaction.v1.server.redaction.model;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class SectionSearchableTextPair {
|
||||||
|
|
||||||
|
private Section section;
|
||||||
|
private SearchableText searchableText;
|
||||||
|
|
||||||
|
}
|
||||||
@ -24,6 +24,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.CellValue;
|
|||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.DictionaryModel;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.DictionaryModel;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Entity;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Entity;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.EntityPositionSequence;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.EntityPositionSequence;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.redaction.model.SectionSearchableTextPair;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
||||||
import com.iqser.red.service.redaction.v1.server.tableextraction.model.Cell;
|
import com.iqser.red.service.redaction.v1.server.tableextraction.model.Cell;
|
||||||
@ -90,12 +91,14 @@ public class EntityRedactionService {
|
|||||||
|
|
||||||
Set<Entity> documentEntities = new HashSet<>();
|
Set<Entity> documentEntities = new HashSet<>();
|
||||||
int sectionNumber = 1;
|
int sectionNumber = 1;
|
||||||
|
List<SectionSearchableTextPair> sectionSearchableTextPairs = new ArrayList<>();
|
||||||
for (Paragraph paragraph : classifiedDoc.getParagraphs()) {
|
for (Paragraph paragraph : classifiedDoc.getParagraphs()) {
|
||||||
|
|
||||||
SearchableText searchableText = paragraph.getSearchableText();
|
SearchableText searchableText = paragraph.getSearchableText();
|
||||||
|
|
||||||
List<Table> tables = paragraph.getTables();
|
List<Table> tables = paragraph.getTables();
|
||||||
|
|
||||||
|
|
||||||
for (Table table : tables) {
|
for (Table table : tables) {
|
||||||
boolean singleCellTable = table.getRowCount() == 1 && table.getColCount() == 1;
|
boolean singleCellTable = table.getRowCount() == 1 && table.getColCount() == 1;
|
||||||
for (List<Cell> row : table.getRows()) {
|
for (List<Cell> row : table.getRows()) {
|
||||||
@ -124,7 +127,7 @@ public class EntityRedactionService {
|
|||||||
}
|
}
|
||||||
Set<Entity> rowEntities = findEntities(searchableRow, table.getHeadline(), sectionNumber, localEntries);
|
Set<Entity> rowEntities = findEntities(searchableRow, table.getHeadline(), sectionNumber, localEntries);
|
||||||
|
|
||||||
Section analysedRowSection = droolsExecutionService.executeRules(Section.builder()
|
sectionSearchableTextPairs.add(new SectionSearchableTextPair(Section.builder()
|
||||||
.dictionaryService(dictionaryService)
|
.dictionaryService(dictionaryService)
|
||||||
.entities(hintsPerSectionNumber != null && hintsPerSectionNumber.containsKey(sectionNumber) ? Stream
|
.entities(hintsPerSectionNumber != null && hintsPerSectionNumber.containsKey(sectionNumber) ? Stream
|
||||||
.concat(rowEntities.stream(), hintsPerSectionNumber.get(sectionNumber).stream())
|
.concat(rowEntities.stream(), hintsPerSectionNumber.get(sectionNumber).stream())
|
||||||
@ -134,9 +137,8 @@ public class EntityRedactionService {
|
|||||||
.headline(table.getHeadline())
|
.headline(table.getHeadline())
|
||||||
.sectionNumber(sectionNumber)
|
.sectionNumber(sectionNumber)
|
||||||
.tabularData(tabularData)
|
.tabularData(tabularData)
|
||||||
.build());
|
.build(), searchableRow));
|
||||||
|
|
||||||
documentEntities.addAll(clearAndFindPositions(analysedRowSection.getEntities(), searchableRow));
|
|
||||||
sectionNumber++;
|
sectionNumber++;
|
||||||
}
|
}
|
||||||
sectionNumber++;
|
sectionNumber++;
|
||||||
@ -144,7 +146,8 @@ public class EntityRedactionService {
|
|||||||
|
|
||||||
addSectionToManualRedactions(paragraph.getTextBlocks(), manualRedactions, paragraph.getHeadline(), sectionNumber);
|
addSectionToManualRedactions(paragraph.getTextBlocks(), manualRedactions, paragraph.getHeadline(), sectionNumber);
|
||||||
Set<Entity> entities = findEntities(searchableText, paragraph.getHeadline(), sectionNumber, localEntries);
|
Set<Entity> entities = findEntities(searchableText, paragraph.getHeadline(), sectionNumber, localEntries);
|
||||||
Section analysedSection = droolsExecutionService.executeRules(Section.builder()
|
|
||||||
|
sectionSearchableTextPairs.add(new SectionSearchableTextPair(Section.builder()
|
||||||
.dictionaryService(dictionaryService)
|
.dictionaryService(dictionaryService)
|
||||||
.entities(hintsPerSectionNumber != null && hintsPerSectionNumber.containsKey(sectionNumber) ? Stream
|
.entities(hintsPerSectionNumber != null && hintsPerSectionNumber.containsKey(sectionNumber) ? Stream
|
||||||
.concat(entities.stream(), hintsPerSectionNumber.get(sectionNumber).stream())
|
.concat(entities.stream(), hintsPerSectionNumber.get(sectionNumber).stream())
|
||||||
@ -153,11 +156,18 @@ public class EntityRedactionService {
|
|||||||
.searchText(searchableText.toString())
|
.searchText(searchableText.toString())
|
||||||
.headline(paragraph.getHeadline())
|
.headline(paragraph.getHeadline())
|
||||||
.sectionNumber(sectionNumber)
|
.sectionNumber(sectionNumber)
|
||||||
.build());
|
.build(), searchableText));
|
||||||
|
|
||||||
documentEntities.addAll(clearAndFindPositions(analysedSection.getEntities(), searchableText));
|
|
||||||
sectionNumber++;
|
sectionNumber++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sectionSearchableTextPairs.forEach(sectionSearchableTextPair -> {
|
||||||
|
Section analysedRowSection = droolsExecutionService.executeRules(sectionSearchableTextPair.getSection());
|
||||||
|
documentEntities.addAll(clearAndFindPositions(analysedRowSection.getEntities(), sectionSearchableTextPair
|
||||||
|
.getSearchableText()));
|
||||||
|
});
|
||||||
|
|
||||||
return documentEntities;
|
return documentEntities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,2 +1,10 @@
|
|||||||
Long-term
|
Long-term
|
||||||
Brown liquid
|
Brown liquid
|
||||||
|
Brown solid
|
||||||
|
Hand-held
|
||||||
|
Manual-Hand held
|
||||||
|
Manual-Hand held
|
||||||
|
Weight:
|
||||||
|
Sprague
|
||||||
|
Weight and length
|
||||||
|
Aeration: Gentle
|
||||||
Loading…
x
Reference in New Issue
Block a user