protected Region parseWord(String line) {
    Pattern wordline_p = Pattern.compile("<word.*?>");
    Matcher wordline_m = wordline_p.matcher(line);

    if (wordline_m.find()) {

      Pattern start_p = Pattern.compile("nite:start=\"(.*?)\"");
      Pattern end_p = Pattern.compile("nite:end=\"(.*?)\"");
      Pattern word_p = Pattern.compile("orth=\"(.*?)\"");

      Matcher start_m = start_p.matcher(wordline_m.group());
      Matcher end_m = end_p.matcher(wordline_m.group());
      Matcher word_m = word_p.matcher(wordline_m.group());

      // Start and end times can be "n/a" when a word is not complete, as in "don't" being partitioned into two words "do" and "n't"
      // Start and end times are "non-aligned" when a word was unable to be aligned to time.
      if (start_m.find() && end_m.find() && word_m.find() && !start_m.group(1).equals("non-aligned")) {

        double start_time = start_m.group(1).equals("n/a") ? Double.NaN : Double.parseDouble(start_m.group(1));
        double end_time = end_m.group(1).equals("n/a") ? Double.NaN : Double.parseDouble(end_m.group(1));
        return new Word(start_time, end_time, word_m.group(1));
      }
    }
    return null;
  }