biosciencedbc / rdf-medgen

0 stars 0 forks source link

NAMES.csv.gzのエラー対応 #4

Open mitsuhashi opened 6 months ago

mitsuhashi commented 6 months ago

rundeckでturtleファイルのロードテストに失敗していた。2172行目のC0002883でパースエラー。

スクリーンショット 2024-03-10 12 32 55

ttlファイルを調べると

rdf_portal@vs66:/mnt/nas05/togovar/public/virtuoso/medgen/20240305$ grep -A 6 C0002883 NAMES.ttl
medgen:C0002883,"Anemia
  a mo:ConceptID ;
  dct:identifier "C0002883,"Anemia" ;
  rdfs:label " Hemolytic" ;
  mo:name [
    rdfs:label " Hemolytic" ;
    dct:source mo:IdiopathicAcquired",MSH ;
    mo:suppress mo:N
  ] .
rdf_portal@vs66:/mnt/nas05/togovar/public/virtuoso/medgen/20240305$

以下の、NAMES.csvを見ると

rdf_portal@vs66:~/rdf_portal-rdf/work/rdf-medgen_download/foo$ grep C0002883  NAMES.csv
C0002883,"Anemia, Hemolytic, Idiopathic Acquired",MSH,N
rdf_portal@vs66:~/rdf_portal-rdf/work/rdf-medgen_download/foo$

主語はC0002883,"Anemia, の後で区切っているが、C0002883,のところで区切り、labelとsourceも適切に処理される必要がある。ダブルクオートの場合を先に判定するために、以下のifとelsifを入れ替えた。

rdf_portal@vs66:~/rdf_portal-rdf/work/rdf-medgen/rdf_converter_medgen$ git diff rdf_converter_medgen.rb
diff --git a/rdf_converter_medgen.rb b/rdf_converter_medgen.rb
index 6c63eef..22c414a 100644
--- a/rdf_converter_medgen.rb
+++ b/rdf_converter_medgen.rb
@@ -50,9 +50,9 @@ module MedGen
     end

     def self.parse(line)
-      if /^(\S+),([^\".]+),(.+),(\w)[\r\n]*?$/ =~ line
+      if  /^(\S+),\"(.+)\",(.+),(\w)[\r\n]*?$/ =~ line
         [$1, $2, $3, $4]
-      elsif  /^(\S+),\"(.+)\",(.+),(\w)[\r\n]*?$/ =~ line
+      elsif /^(\S+),([^\".]+),(.+),(\w)[\r\n]*?$/ =~ line
         [$1, $2, $3, $4]
       elsif /^(\S+),\"(.+)[\r\n]*?$/ =~ line
         [$1, $2, "Unknown", "Unknown"]
rdf_portal@vs66:~/rdf_portal-rdf/work/rdf-medgen/rdf_converter_medgen$