private InstanceList prepareInstanceList(String[] sections) {
    InstanceList instanceList = new InstanceList(pipe);
    // prepare training data
    for (String section : sections) {
      File pdtbSection = new File(pdtbRoot, section);
      File[] pdtbFiles = pdtbSection.listFiles(new FileExtensionFilter(".pipe"));
      for (File pdtbFile : pdtbFiles) {
        File ptbFile =
            new File(ptbRoot, section + "/" + pdtbFile.getName().replace(".pipe", ".mrg"));
        File depFile =
            new File(depRoot, section + "/" + pdtbFile.getName().replace(".pipe", ".dep"));
        List<PDTBRelation> relations = pipedFileReader.read(pdtbFile);
        Document document = new Document(ptbFile, depFile);

        for (PDTBRelation relation : relations) {
          if (relation.getType().equals("Explicit")) {
            String gornAddress1 = relation.getArg1GornAddress();
            if (gornAddress1.equals("") || gornAddress1.contains(";;")) {
              continue;
            }
            GornAddressList gaList1 = new GornAddressList(gornAddress1);

            int lineNumber1 = gaList1.get(0).getLineNumber();

            String connGornAddress = relation.getConnectiveGornAddress();
            if (connGornAddress.equals("")) continue;
            GornAddressList connGAList = new GornAddressList(connGornAddress);

            String gornAddress2 = relation.getArg2GornAddress();
            if (gornAddress2.equals("") || gornAddress2.contains(";;")) {
              continue;
            }
            int lineNumber2 = connGAList.get(0).getLineNumber();

            addInstancesThroughPipe(relation, document, lineNumber1, lineNumber2, instanceList);
          }
        }
      }
    }
    return instanceList;
  }