171 lines
4.0 KiB
Go
171 lines
4.0 KiB
Go
package ipc
|
|
|
|
import (
|
|
"sort"
|
|
document "textualize/core/Document"
|
|
)
|
|
|
|
func serializeBoundingBox(bbox document.ProcessedBoundingBox) ProcessedBoundingBox {
|
|
return ProcessedBoundingBox{
|
|
X0: bbox.X0,
|
|
Y0: bbox.Y0,
|
|
X1: bbox.X1,
|
|
Y1: bbox.Y1,
|
|
}
|
|
}
|
|
|
|
func serializeSymbol(symbol document.ProcessedSymbol) ProcessedSymbol {
|
|
return ProcessedSymbol{
|
|
Text: symbol.Text,
|
|
Confidence: symbol.Confidence,
|
|
BoundingBox: serializeBoundingBox(symbol.BoundingBox),
|
|
}
|
|
}
|
|
|
|
func serialzeWord(word document.ProcessedWord) ProcessedWord {
|
|
var symbols []ProcessedSymbol
|
|
|
|
for _, symbol := range word.Symbols {
|
|
symbols = append(symbols, serializeSymbol(symbol))
|
|
}
|
|
|
|
return ProcessedWord{
|
|
FullText: word.FullText,
|
|
Symbols: symbols,
|
|
Confidence: word.Confidence,
|
|
Direction: word.Direction,
|
|
BoundingBox: serializeBoundingBox(word.BoundingBox),
|
|
}
|
|
}
|
|
|
|
func serializeLine(line document.ProcessedLine) ProcessedLine {
|
|
var words []ProcessedWord
|
|
|
|
for _, word := range line.Words {
|
|
words = append(words, serialzeWord((word)))
|
|
}
|
|
|
|
return ProcessedLine{
|
|
FullText: line.FullText,
|
|
Words: words,
|
|
}
|
|
}
|
|
|
|
func serializeProcessedArea(area document.ProcessedArea) ProcessedArea {
|
|
var lines []ProcessedLine
|
|
|
|
for _, line := range area.Lines {
|
|
lines = append(lines, serializeLine(line))
|
|
}
|
|
|
|
return ProcessedArea{
|
|
Id: area.Id,
|
|
DocumentId: area.DocumentId,
|
|
FullText: area.FullText,
|
|
Order: area.Order,
|
|
Lines: lines,
|
|
}
|
|
}
|
|
|
|
func (c *Channel) GetProcessedAreasByDocumentId(id string) []ProcessedArea {
|
|
areas := document.GetProcessedAreaCollection().GetAreasByDocumentId(id)
|
|
|
|
var response []ProcessedArea
|
|
|
|
for _, a := range areas {
|
|
response = append(response, serializeProcessedArea(*a))
|
|
}
|
|
|
|
sort.Slice(response, func(i, j int) bool {
|
|
return response[i].Order < response[j].Order
|
|
})
|
|
|
|
return response
|
|
}
|
|
|
|
func deserializeBoundingBox(bbox ProcessedBoundingBox) document.ProcessedBoundingBox {
|
|
return document.ProcessedBoundingBox{
|
|
X0: bbox.X0,
|
|
Y0: bbox.Y0,
|
|
X1: bbox.X1,
|
|
Y1: bbox.Y1,
|
|
}
|
|
}
|
|
|
|
func deserializeSymbol(symbol ProcessedSymbol) document.ProcessedSymbol {
|
|
return document.ProcessedSymbol{
|
|
Text: symbol.Text,
|
|
Confidence: symbol.Confidence,
|
|
BoundingBox: deserializeBoundingBox(symbol.BoundingBox),
|
|
}
|
|
}
|
|
|
|
func deserialzeWord(word ProcessedWord) document.ProcessedWord {
|
|
var symbols []document.ProcessedSymbol
|
|
|
|
for _, symbol := range word.Symbols {
|
|
symbols = append(symbols, deserializeSymbol(symbol))
|
|
}
|
|
|
|
return document.ProcessedWord{
|
|
FullText: word.FullText,
|
|
Symbols: symbols,
|
|
Confidence: word.Confidence,
|
|
Direction: word.Direction,
|
|
BoundingBox: deserializeBoundingBox(word.BoundingBox),
|
|
}
|
|
}
|
|
|
|
func deserializeLine(line ProcessedLine) document.ProcessedLine {
|
|
var words []document.ProcessedWord
|
|
|
|
for _, word := range line.Words {
|
|
words = append(words, deserialzeWord((word)))
|
|
}
|
|
|
|
return document.ProcessedLine{
|
|
FullText: line.FullText,
|
|
Words: words,
|
|
}
|
|
}
|
|
|
|
func deserializeProcessedArea(area ProcessedArea) document.ProcessedArea {
|
|
var lines []document.ProcessedLine
|
|
|
|
for _, line := range area.Lines {
|
|
lines = append(lines, deserializeLine(line))
|
|
}
|
|
|
|
return document.ProcessedArea{
|
|
Id: area.Id,
|
|
DocumentId: area.DocumentId,
|
|
Order: area.Order,
|
|
FullText: area.FullText,
|
|
Lines: lines,
|
|
}
|
|
}
|
|
|
|
func (c *Channel) RequestAddProcessedArea(processedArea ProcessedArea) ProcessedArea {
|
|
doesAreaAlreadyExist := false
|
|
processedAreasOfDocument := document.GetProcessedAreaCollection().GetAreasByDocumentId(processedArea.DocumentId)
|
|
for _, a := range processedAreasOfDocument {
|
|
if a.Order == processedArea.Order {
|
|
doesAreaAlreadyExist = true
|
|
break
|
|
}
|
|
}
|
|
|
|
deserializedProcessedArea := deserializeProcessedArea(processedArea)
|
|
|
|
if doesAreaAlreadyExist {
|
|
storedProcessedArea := document.GetProcessedAreaCollection().GetAreaById(processedArea.Id)
|
|
if storedProcessedArea.Id != "" {
|
|
storedProcessedArea = &deserializedProcessedArea
|
|
}
|
|
} else {
|
|
document.GetProcessedAreaCollection().AddProcessedArea((deserializedProcessedArea))
|
|
}
|
|
|
|
return processedArea
|
|
}
|