From 08bd137e9406c51a67ab354332ae5c100e307b4c Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Mon, 18 Sep 2017 06:06:10 +0200 Subject: [PATCH] Make AutoDetector aware of clinic mode. --- zaaReloaded2/Commands.cs | 3 +- zaaReloaded2/Demo/Demo.docx | Bin 27329 -> 27683 bytes zaaReloaded2/Importer/AutoDetector.cs | 68 ++++++++++++------ .../Importer/ClinicImporter/ClinicLine.cs | 2 +- zaaReloaded2/Importer/ImportMode.cs | 31 ++++++++ 5 files changed, 82 insertions(+), 22 deletions(-) create mode 100755 zaaReloaded2/Importer/ImportMode.cs diff --git a/zaaReloaded2/Commands.cs b/zaaReloaded2/Commands.cs index c40a37d..2a023b0 100755 --- a/zaaReloaded2/Commands.cs +++ b/zaaReloaded2/Commands.cs @@ -203,6 +203,7 @@ namespace zaaReloaded2 Word.Window activeWindow = word.ActiveWindow; Word.Selection selection = activeWindow.Selection; Word.Paragraphs paragraphs = selection.Paragraphs; + Importer.IImporter importer = null; if (!(paragraphs.Count > 1 || (selection.Text.Length > 1 && selection.Text.EndsWith("\r")))) { @@ -221,10 +222,10 @@ namespace zaaReloaded2 } // Don't release the COM object here // Bovender.ComHelpers.ReleaseComObject(doc); + importer = autoDetector.CreateImporter(); } Logger.Info("DoFormat: Importing"); - ZaaImporter importer = new ZaaImporter(); importer.Import(selection.Text); Formatter.Formatter formatter = new Formatter.Formatter(activeDocument); diff --git a/zaaReloaded2/Demo/Demo.docx b/zaaReloaded2/Demo/Demo.docx index a81f68bd422ba5e769b0c91151eb9223611e938f..c54495e587256fdb4137cfdafdc0cca32888c3e5 100755 GIT binary patch delta 16881 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 delta 16524 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 W`JaXU^K54U{IDm3DzyHO(f /// Attempts to automatically detect laboratory data in the Word /// document. @@ -53,6 +59,7 @@ namespace zaaReloaded2.Importer if (document.Bookmarks.Exists("Labor")) { + Logger.Info("Detect: Found lab bookmark"); i = GetParagraphIndex( document, document.Bookmarks["Labor"].Range.Paragraphs[1]); @@ -65,10 +72,10 @@ namespace zaaReloaded2.Importer // lines such as "Tel. (09 31) 201-39432; -39126", which // happen to structurally resemble a paragraph with // laboratory items. - if (LaurisTimePoint.IsTimeStampLine( - document.Paragraphs[i].Range.Text)) + if (IsTimeStampParagraph(document.Paragraphs[i])) { start = document.Paragraphs[i]; + Logger.Info("Detect: Found time stamp line in paragraph #{0}", i); break; } i++; @@ -76,11 +83,14 @@ namespace zaaReloaded2.Importer if (start != null) { + Logger.Info("Detect: Determining lab block"); end = start; while (i <= document.Paragraphs.Count - 1) { - if (!IsLabParagraph(document.Paragraphs[i+1])) + Paragraph p = document.Paragraphs[i+1]; + if (!IsLabParagraph(p) && !IsEmptyParagraph(p)) { + Logger.Info("Detect: Last lab paragraph is #{0}", i); end = document.Paragraphs[i]; break; } @@ -90,9 +100,23 @@ namespace zaaReloaded2.Importer document.Range(start.Range.Start, end.Range.End).Select(); return true; } + Logger.Warn("Detect: Did not find lab block!"); return false; } + public IImporter CreateImporter() + { + switch (ImportMode) + { + case ImportMode.Zaa: + return new ZaaImporter.ZaaImporter(); + case ImportMode.Clinic: + return new ClinicImporter.ClinicImporter(); + default: + throw new InvalidOperationException("Cannot create Importer for undefined import mode!"); + } + } + #endregion #region Private methods @@ -109,9 +133,10 @@ namespace zaaReloaded2.Importer // the lab mode *must* be ZAA, because it will be a line in the form // "(17.09.2015-201710:44:00) Cyclosporin-A vor Gabe: 130 µg/l;" which does not // occur in the clinic format. - if ((_mode == Mode.Undefined) && isZaaTimePoint && !isCinicTimePoint) + if ((ImportMode == ImportMode.Undefined) && isZaaTimePoint && !isCinicTimePoint) { - _mode = Mode.Zaa; + Logger.Info("IsTimeStampParagraph: Found ZAA time stamp, setting mode to ZAA"); + ImportMode = ImportMode.Zaa; } return isCinicTimePoint || isZaaTimePoint; } @@ -131,24 +156,26 @@ namespace zaaReloaded2.Importer { string text = paragraph.Range.Text; bool isLabParagraph = false; - switch (_mode) + switch (ImportMode) { - case Mode.Undefined: + case ImportMode.Undefined: if (LaurisParagraph.ResemblesLaurisParagraph(text) || LaurisTimePoint.IsTimeStampLine(text)) { - _mode = Mode.Zaa; + ImportMode = ImportMode.Zaa; + Logger.Info("IsLabParagraph: Setting mode to ZAA"); isLabParagraph = true; } else if (ClinicLine.ResemblesClinicLine(text) || ClinicTimePoint.IsTimeStampLine(text)) { - _mode = Mode.Clinic; + ImportMode = ImportMode.Clinic; + Logger.Info("IsLabParagraph: Setting mode to Clinic"); isLabParagraph = true; } break; - case Mode.Zaa: + case ImportMode.Zaa: isLabParagraph = LaurisParagraph.ResemblesLaurisParagraph(text) || LaurisTimePoint.IsTimeStampLine(text); break; - case Mode.Clinic: + case ImportMode.Clinic: isLabParagraph = ClinicLine.ResemblesClinicLine(text) || ClinicTimePoint.IsTimeStampLine(text); break; default: @@ -169,19 +196,20 @@ namespace zaaReloaded2.Importer { return document.Range(0, paragraph.Range.Start).Paragraphs.Count; } + + private bool IsEmptyParagraph(Paragraph paragraph) + { + string text = paragraph.Range.Text; + return String.IsNullOrWhiteSpace(text); + } #endregion - #region Fields + #region Class logger - private enum Mode - { - Undefined, - Zaa, - Clinic - } + private static NLog.Logger Logger { get { return _logger.Value; } } - private Mode _mode; + private static readonly Lazy _logger = new Lazy(() => NLog.LogManager.GetCurrentClassLogger()); #endregion } diff --git a/zaaReloaded2/Importer/ClinicImporter/ClinicLine.cs b/zaaReloaded2/Importer/ClinicImporter/ClinicLine.cs index 43459c9..3716ce7 100755 --- a/zaaReloaded2/Importer/ClinicImporter/ClinicLine.cs +++ b/zaaReloaded2/Importer/ClinicImporter/ClinicLine.cs @@ -121,7 +121,7 @@ namespace zaaReloaded2.Importer.ClinicImporter #region Fields - static readonly Regex _expectedFormat = new Regex(@"\t(?[^:]+:(\t[^\t]+){3})"); + static readonly Regex _expectedFormat = new Regex(@"\t(?[^:]+:(\t([^\t]+)?){3})"); Thesaurus.Parameters _parameterDictionary; Thesaurus.Units _unitDictionary; diff --git a/zaaReloaded2/Importer/ImportMode.cs b/zaaReloaded2/Importer/ImportMode.cs new file mode 100755 index 0000000..994bc8f --- /dev/null +++ b/zaaReloaded2/Importer/ImportMode.cs @@ -0,0 +1,31 @@ +/* ImportMode.cs + * part of zaaReloaded2 + * + * Copyright 2017 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace zaaReloaded2.Importer +{ + public enum ImportMode + { + Undefined, + Zaa, + Clinic + } +}