From 442d956c771d740a6adf0272ac65df161a04483f Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Tue, 5 Jan 2021 11:55:09 +0100
Subject: [PATCH] Script to check problems in conllu files now reads mcd
 directly from said file

---
 scripts/conlluCheckProblems.py | 51 ++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 21 deletions(-)

diff --git a/scripts/conlluCheckProblems.py b/scripts/conlluCheckProblems.py
index 1c7399d..83307bd 100755
--- a/scripts/conlluCheckProblems.py
+++ b/scripts/conlluCheckProblems.py
@@ -1,36 +1,37 @@
 #! /usr/bin/env python3
 
 import sys
+from readMCD import readMCD
 
 headColName = "HEAD"
 deprelColName = "DEPREL"
 idColName = "ID"
 
+################################################################################
 def printUsageAndExit() :
-  print("USAGE : %s file.conllu mcd"%sys.argv[0], file=sys.stderr)
+  print("USAGE : %s file.conllu"%sys.argv[0], file=sys.stderr)
   exit(1)
+################################################################################
 
-def readMCD(mcdFilename) :
-  mcd = {}
-  for line in open(mcdFilename, "r", encoding="utf8") :
-    clean = line.strip()
-    if len(line) < 2 or line[0] == '#' :
-      continue
-    splited = line.split(' ')
-    if len(splited) != 1 :
-      print("ERROR : invalid mcd line \'%s\'. Aborting"%line, file=sys.stderr)
+################################################################################
+def checkMCD(mcd) :
+  for col in [headColName, deprelColName, idColName] :
+    if col not in mcd :
+      print("ERROR : column '{}' missing from mcd '{}'"
+        .format(col, " ".join(mcd.keys())), file=sys.stderr)
       exit(1)
-    mcd[len(mcd)] = splited[0].strip()
-
-  return mcd
+################################################################################
 
+################################################################################
 def logError(message, sentence) :
   print(message)
   for line in sentence :
     for col in line :
       print(col,end="\t")
     print("")
+################################################################################
 
+################################################################################
 def checkSentence(fileLineIndex, sentence, conllMCD, conllMCDr) :
   idIndex = int(conllMCDr[idColName])
   govIndex = int(conllMCDr[headColName])
@@ -120,11 +121,12 @@ def checkSentence(fileLineIndex, sentence, conllMCD, conllMCDr) :
 
 ################################################################################
 if __name__ == "__main__" :
-  if len(sys.argv) != 3 :
+  if len(sys.argv) != 2 :
     printUsageAndExit()
 
-  conllMCD = readMCD(sys.argv[2])
-  conllMCDr = {v: k for k, v in conllMCD.items()} 
+  baseMCD = "ID FORM LEMMA POS XPOS FEATS HEAD DEPREL"
+  conllMCD, conllMCDr = readMCD(baseMCD)
+  checkMCD(conllMCD)
 
   sentence = []
   fileLineIndex = 0
@@ -137,11 +139,18 @@ if __name__ == "__main__" :
     if len(clean) < 3 :
       if sentFirstLine == -1 :
         exit(1)
-      checkSentence(sentFirstLine, sentence, conllMCD, conllMCDr)
+      checkSentence(sentFirstLine, sentence, conllMCDr, conllMCD)
       sentence = []
       sentFirstLine = -1
-    elif clean[0] != '#' :
-      if sentFirstLine == -1 :
-        sentFirstLine = fileLineIndex
-      sentence.append(clean.split('\t'))
+      continue
+    if clean[0] == '#' :
+      splited = line.split("global.columns =")
+      if len(splited) > 1 :
+        conllMCD, conllMCDr = readMCD(splited[-1].strip())
+        checkMCD(conllMCD)
+      continue
+    if sentFirstLine == -1 :
+      sentFirstLine = fileLineIndex
+    sentence.append(clean.split('\t'))
+################################################################################
 
-- 
GitLab