--- a
+++ b/args/arg_parser.py
@@ -0,0 +1,73 @@
+"""Define argument parser class."""
+import argparse
+from pathlib import Path
+
+
+class ArgParser(object):
+    """Argument parser for label.py"""
+    def __init__(self):
+        """Initialize argument parser."""
+        parser = argparse.ArgumentParser()
+
+        # Input report parameters.
+        parser.add_argument('--reports_path',
+                            required=True,
+                            help='Path to file with radiology reports.')
+        parser.add_argument('--sections_to_extract',
+                            nargs='*',
+                            default=[],
+                            help='Titles of the sections to extract from ' +
+                                 'each report.')
+        parser.add_argument('--extract_strict',
+                            action='store_true',
+                            help='Instructs the labeler to only extract the ' +
+                                 'sections given by sections_to_extract. ' +
+                                 'If this argument is given and a report is ' +
+                                 'encountered that does not contain any of ' +
+                                 'the provided sections, instead of loading ' +
+                                 'the original document, that report will be ' +
+                                 'loaded as an empty document.')
+
+        # Phrases
+        parser.add_argument('--mention_phrases_dir',
+                            default='phrases/mention',
+                            help='Directory containing mention phrases for ' +
+                                 'each observation.')
+        parser.add_argument('--unmention_phrases_dir',
+                            default='phrases/unmention',
+                            help='Directory containing unmention phrases ' +
+                                 'for each observation.')
+
+        # Rules
+        parser.add_argument('--pre_negation_uncertainty_path',
+                            default='patterns/pre_negation_uncertainty.txt',
+                            help='Path to pre-negation uncertainty rules.')
+        parser.add_argument('--negation_path',
+                            default='patterns/negation.txt',
+                            help='Path to negation rules.')
+        parser.add_argument('--post_negation_uncertainty_path',
+                            default='patterns/post_negation_uncertainty.txt',
+                            help='Path to post-negation uncertainty rules.')
+
+        # Output parameters.
+        parser.add_argument('--output_path',
+                            default='labeled_reports.csv',
+                            help='Output path to write labels to.')
+
+        # Misc.
+        parser.add_argument('-v', '--verbose',
+                            action='store_true',
+                            help='Print progress to stdout.')
+
+        self.parser = parser
+
+    def parse_args(self):
+        """Parse and validate the supplied arguments."""
+        args = self.parser.parse_args()
+
+        args.reports_path = Path(args.reports_path)
+        args.mention_phrases_dir = Path(args.mention_phrases_dir)
+        args.unmention_phrases_dir = Path(args.unmention_phrases_dir)
+        args.output_path = Path(args.output_path)
+
+        return args