Added arc1 validation process spacy results and exxeta checks. and also the option that both check each other.
parent
fc9302cbbb
commit
14b66a31b8
|
|
@ -0,0 +1,3 @@
|
|||
EXXETA_API_KEY = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbiI6IjIzYzA0NGEzOWY5OWIxMjdmODA5ODA0YmMxZTczN2UyIn0.uOD9GhvFl1hqd2B3dyb0IOJ4x_o1IPcMckeQxh2KNj0"
|
||||
EXXETA_BASE_URL = "https://ai.exxeta.com/api/v2/azure/openai"
|
||||
MODEL_ID = "gpt-35-turbo"
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
from config import EXXETA_API_KEY, EXXETA_BASE_URL
|
||||
import requests
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
MODEL = "gpt-35-turbo"
|
||||
|
||||
SPACY_ENTITIES_PATH = "../fine_tuning_spaCy/entities_output.json"
|
||||
OCR_PITCHBOOK_PATH = "../ocr/output/Pitchbook 1-OCR.json"
|
||||
OUTPUT_PATH = "mcp_spacy_validated_result.json"
|
||||
|
||||
def load_spacy_entities():
|
||||
with open(SPACY_ENTITIES_PATH, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def load_pitchbook_pages():
|
||||
with open(OCR_PITCHBOOK_PATH, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def get_page_text(pages, page_number):
|
||||
for page in pages:
|
||||
if page.get("page") == page_number:
|
||||
return page.get("text", "")
|
||||
return ""
|
||||
|
||||
def normalize_entity(entity):
|
||||
return ' '.join(entity.replace('\n', ' ').split())
|
||||
|
||||
def validate_entity_with_exxeta(entity, page_num, text):
|
||||
prompt = (
|
||||
f"Du bist ein Validator für extrahierte Begriffe aus OCR-Texten.\n\n"
|
||||
f"Ziel: Überprüfe, ob die folgende Ziel-Formulierung im angegebenen OCR-Text auf Seite {page_num} vorkommt.\n\n"
|
||||
f"Ziel-Formulierung:\n"
|
||||
f"\"{entity}\"\n\n"
|
||||
f"Validierungsregeln:\n"
|
||||
f"- Groß- und Kleinschreibung ignorieren.\n"
|
||||
f"- Zusätzliche oder fehlende Leerzeichen, Zeilenumbrüche, Kommas, Schrägstriche ('/') oder Wörter wie 'und'/'or' zwischen Begriffen sind erlaubt.\n"
|
||||
f"- Leichte OCR-Fehler sind zulässig (z.B. fehlende oder doppelte Buchstaben).\n"
|
||||
f"- Wenn die Begriffe zusammen im selben Kontext stehen, zählt das als Treffer.\n"
|
||||
f"- Antworte **ausschließlich** mit \"true\" (Treffer) oder \"false\" (kein Treffer).\n"
|
||||
f"- Keine Kommentare, keine Begründungen, nur 'true' oder 'false'.\n\n"
|
||||
f"OCR-Text auf Seite {page_num}:\n{text}"
|
||||
)
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {EXXETA_API_KEY}"
|
||||
}
|
||||
|
||||
payload = {
|
||||
"model": MODEL,
|
||||
"messages": [
|
||||
{"role": "system", "content": "Du bist ein Validierungsassistent. Antwort nur mit true oder false."},
|
||||
{"role": "user", "content": prompt}
|
||||
],
|
||||
"temperature": 0.0
|
||||
}
|
||||
|
||||
url = f"{EXXETA_BASE_URL}/deployments/{MODEL}/chat/completions"
|
||||
|
||||
try:
|
||||
response = requests.post(url, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
content = response.json()["choices"][0]["message"]["content"].strip().lower()
|
||||
return "true" in content
|
||||
except Exception as e:
|
||||
print(f"⚠️ Validation failed for '{entity}' on page {page_num}: {e}")
|
||||
return False
|
||||
|
||||
def run():
|
||||
spacy_entities = load_spacy_entities()
|
||||
pitchbook_pages = load_pitchbook_pages()
|
||||
|
||||
validated_results = []
|
||||
|
||||
for entity_data in spacy_entities:
|
||||
raw_entity = entity_data.get("entity")
|
||||
page = entity_data.get("page")
|
||||
entity = normalize_entity(raw_entity)
|
||||
|
||||
page_text = get_page_text(pitchbook_pages, page)
|
||||
is_valid = validate_entity_with_exxeta(entity, page, page_text)
|
||||
|
||||
validated_results.append({
|
||||
"label": entity_data.get("label"),
|
||||
"entity": raw_entity,
|
||||
"page": page,
|
||||
"validated": is_valid
|
||||
})
|
||||
|
||||
with open(OUTPUT_PATH, "w", encoding="utf-8") as f:
|
||||
json.dump(validated_results, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"✅ Validation complete! Results saved to {OUTPUT_PATH}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
|
|
@ -0,0 +1,200 @@
|
|||
[
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core and Core+",
|
||||
"page": 4,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core, core+, value-added",
|
||||
"page": 7,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core/Core+",
|
||||
"page": 10,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core/core+",
|
||||
"page": 10,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core/Core+",
|
||||
"page": 10,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "UK, DE, BE, NL, LU,",
|
||||
"page": 10,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core / Core +",
|
||||
"page": 12,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core\n/ core+",
|
||||
"page": 12,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core",
|
||||
"page": 12,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Term / core+",
|
||||
"page": 12,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core/core+",
|
||||
"page": 12,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "6,4 6,4",
|
||||
"page": 13,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Country /",
|
||||
"page": 14,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core\nCore\nCore\nCore\nCore\nCore\nCore\nCore",
|
||||
"page": 14,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Country /",
|
||||
"page": 15,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core\nCore\nCore\nCore\nCore\nCore",
|
||||
"page": 15,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "countries, giving",
|
||||
"page": 18,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core/core+",
|
||||
"page": 20,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core/core+",
|
||||
"page": 20,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "D, and",
|
||||
"page": 21,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "UK, DE, BE, NL, LU,",
|
||||
"page": 26,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "core or",
|
||||
"page": 27,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core +",
|
||||
"page": 27,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "kgCO,e",
|
||||
"page": 30,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "C,",
|
||||
"page": 32,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "KfW, Dwp",
|
||||
"page": 35,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Bank,",
|
||||
"page": 35,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 36,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 36,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 37,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 37,
|
||||
"validated": true
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 38,
|
||||
"validated": false
|
||||
},
|
||||
{
|
||||
"label": "RISIKOPROFIL",
|
||||
"entity": "Core",
|
||||
"page": 38,
|
||||
"validated": true
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
import json
|
||||
from pathlib import Path
|
||||
|
||||
KPI_SERVICE_MAP = {
|
||||
"risikoprofil": ["spacy", "exxeta"],
|
||||
# "fondsname": ["exxeta"],
|
||||
# "fundvolume": ["spacy", "exxeta"],
|
||||
}
|
||||
|
||||
SPACY_ENTITIES_PATH = "../fine_tuning_spaCy/entities_output.json"
|
||||
EXXETA_ENTITIES_PATH = "../merge_validate-arc2/exxeta_result.json"
|
||||
|
||||
def load_spacy_entities(path):
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def load_exxeta_entities(path):
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
|
||||
def normalize(text):
|
||||
if not text:
|
||||
return ""
|
||||
return text.strip().lower().replace(" ", "").replace("/", "/")
|
||||
|
||||
def validate_kpi(kpi, spacy_entities, exxeta_entities):
|
||||
results = []
|
||||
|
||||
spacy_kpi = [e for e in spacy_entities if e.get("label", "").lower() == kpi]
|
||||
exxeta_kpi = [e for e in exxeta_entities if e.get("label", "").lower() == kpi]
|
||||
|
||||
spacy_by_page = {}
|
||||
for e in spacy_kpi:
|
||||
spacy_by_page.setdefault(e["page"], []).append(e)
|
||||
|
||||
exxeta_by_page = {}
|
||||
for e in exxeta_kpi:
|
||||
exxeta_by_page.setdefault(e["page"], []).append(e)
|
||||
|
||||
all_pages = set(spacy_by_page.keys()).union(exxeta_by_page.keys())
|
||||
|
||||
for page in sorted(all_pages):
|
||||
spacy_entries = spacy_by_page.get(page, [])
|
||||
exxeta_entries = exxeta_by_page.get(page, [])
|
||||
|
||||
for se in spacy_entries:
|
||||
se_entity = normalize(se["entity"])
|
||||
|
||||
matched = False
|
||||
for ee in exxeta_entries:
|
||||
ee_entity = normalize(ee["entity"])
|
||||
if se_entity == ee_entity:
|
||||
results.append({
|
||||
"kpi": kpi,
|
||||
"entity": se["entity"],
|
||||
"page": page,
|
||||
"validation_status": "validated"
|
||||
})
|
||||
matched = True
|
||||
break
|
||||
|
||||
if not matched:
|
||||
results.append({
|
||||
"kpi": kpi,
|
||||
"entity": se["entity"],
|
||||
"page": page,
|
||||
"validation_status": "spacy-only"
|
||||
})
|
||||
|
||||
for ee in exxeta_entries:
|
||||
ee_entity = normalize(ee["entity"])
|
||||
if not any(normalize(se["entity"]) == ee_entity for se in spacy_entries):
|
||||
results.append({
|
||||
"kpi": kpi,
|
||||
"entity": ee["entity"],
|
||||
"page": page,
|
||||
"validation_status": "exxeta-only"
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def save_results(results, filename):
|
||||
with open(filename, "w", encoding="utf-8") as f:
|
||||
json.dump(results, f, indent=2, ensure_ascii=False)
|
||||
|
||||
def run():
|
||||
spacy_entities = load_spacy_entities(SPACY_ENTITIES_PATH)
|
||||
exxeta_entities = load_exxeta_entities(EXXETA_ENTITIES_PATH)
|
||||
|
||||
all_results = []
|
||||
|
||||
for kpi, services in KPI_SERVICE_MAP.items():
|
||||
results = validate_kpi(kpi, spacy_entities, exxeta_entities)
|
||||
all_results.extend(results)
|
||||
|
||||
save_results(all_results, "mcp_validated_result.json")
|
||||
print("✅ Validation complete! Output: mcp_validated_result.json")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
|
|
@ -0,0 +1,314 @@
|
|||
[
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core and Core+",
|
||||
"page": 4,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core, core+, value-added",
|
||||
"page": 7,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 9,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core/Core+",
|
||||
"page": 10,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core/core+",
|
||||
"page": 10,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core/Core+",
|
||||
"page": 10,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "UK, DE, BE, NL, LU,",
|
||||
"page": 10,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core / Core +",
|
||||
"page": 12,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core\n/ core+",
|
||||
"page": 12,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core",
|
||||
"page": 12,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Term / core+",
|
||||
"page": 12,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core/core+",
|
||||
"page": 12,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "6,4 6,4",
|
||||
"page": 13,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Country /",
|
||||
"page": 14,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core\nCore\nCore\nCore\nCore\nCore\nCore\nCore",
|
||||
"page": 14,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 14,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 14,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 14,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 14,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 14,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Country /",
|
||||
"page": 15,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core\nCore\nCore\nCore\nCore\nCore",
|
||||
"page": 15,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 15,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 15,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 15,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 15,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 15,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "countries, giving",
|
||||
"page": 18,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 19,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core/core+",
|
||||
"page": 20,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core/core+",
|
||||
"page": 20,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "D, and",
|
||||
"page": 21,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "UK, DE, BE, NL, LU,",
|
||||
"page": 26,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 26,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "core or",
|
||||
"page": 27,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core +",
|
||||
"page": 27,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core Offices, Core + assets",
|
||||
"page": 27,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "kgCO,e",
|
||||
"page": 30,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "C,",
|
||||
"page": 32,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core, Core+",
|
||||
"page": 33,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "KfW, Dwp",
|
||||
"page": 35,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Bank,",
|
||||
"page": 35,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 35,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 35,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 36,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 36,
|
||||
"validation_status": "spacy-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core Parking",
|
||||
"page": 36,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core Parking",
|
||||
"page": 36,
|
||||
"validation_status": "exxeta-only"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 37,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 37,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 38,
|
||||
"validation_status": "validated"
|
||||
},
|
||||
{
|
||||
"kpi": "risikoprofil",
|
||||
"entity": "Core",
|
||||
"page": 38,
|
||||
"validation_status": "validated"
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue