@Override
  public void parse() throws Exception {
    File dataFile = new File(this.filePath);
    if (dataFile == null || !dataFile.exists() || !dataFile.isFile()) {
      throw new Exception("File does not exist. path=" + this.filePath);
    }

    BufferedReader br = null;

    try {
      DBClient.getInstance().connect();
      br = new BufferedReader(new FileReader(dataFile));
      String line = null;
      while ((line = br.readLine()) != null) {
        if (!line.isEmpty()) {
          String[] tokens = line.split("\t");

          int authorId = Integer.parseInt(tokens[0].trim());
          int docId = Integer.parseInt(tokens[1].trim());

          String sideEffects = "";
          if (tokens.length > 2) {
            sideEffects = tokens[2].trim();
            sideEffects = sideEffects.substring(sideEffects.indexOf('{') + 1,
                sideEffects.indexOf('}'));

            String[] sideEffectTokens = sideEffects.split(",");
            for (String sideEffectToken : sideEffectTokens) {
              sideEffectToken = sideEffectToken.trim();
              String symptom = sideEffectToken.substring(0,
                  sideEffectToken.indexOf('='));
              int frequency = Integer.parseInt(sideEffectToken.substring(
                  sideEffectToken.indexOf('=') + 1, sideEffectToken.length()));

              SpecificDrugSideEffect v = new SpecificDrugSideEffect(authorId,
                  docId, symptom, frequency, type);

              logger.info(v);
              DBClient.getInstance().addSpecificDrugSideEffect(v);
            }
          } else {
            SpecificDrugSideEffect v = new SpecificDrugSideEffect(authorId,
                docId, "", 0, type);
            logger.info(v);
            DBClient.getInstance().addSpecificDrugSideEffect(v);
          }

          // logger.info("{} {} {}", authorId, docId, sideEffects);
        }
      }

    } finally {
      if (br != null) {
        br.close();
      }
    }
  }