Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
APDPlat - Application Product Development Platform Copyright (c) 2013, 杨尚川, yang-shangchuan@qq.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 
 package org.apdplat.qa.datasource;
 
 import java.util.List;
 
从特定格式的文本文件中检索问题及其对应的证据

Author(s):
杨尚川
 
 public class FileDataSource implements DataSource {
 
     private static final Logger LOG = LoggerFactory.getLogger(FileDataSource.class);
 
     private List<Stringfiles = new ArrayList<>();
 
     public FileDataSource(String file) {
         this..add(file);
     }
 
     public FileDataSource(List<Stringfiles) {
         this..addAll(files);
     }
 
     @Override
     public List<QuestiongetQuestions() {
         return getAndAnswerQuestions(null);
     }
 
     @Override
     public Question getQuestion(String questionStr) {
         return getAndAnswerQuestion(questionStrnull);
     }
 
     @Override
     public Question getAndAnswerQuestion(String questionStrQuestionAnsweringSystem questionAnsweringSystem) {
         for (Question question : getQuestions()) {
             String q = question.getQuestion().trim().replace("?""").replace("?""");
             questionStr = questionStr.trim().replace("?""").replace("?""");
             if (q.equals(questionStr)) {
                 //回答问题
                 if (questionAnsweringSystem != null) {
                     questionAnsweringSystem.answerQuestion(question);
                 }
                 return question;
             }
         }
         return null;
     }
 
     @Override
     public List<QuestiongetAndAnswerQuestions(QuestionAnsweringSystem questionAnsweringSystem) {
         List<Questionquestions = new ArrayList<>();
 
         for (String file : ) {
             BufferedReader reader = null;
             try {
                 reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(file), "utf-8"));
                 Question question = null;
                 String line = reader.readLine();
                 while (line != null) {
                     if (line.trim().equals("") || line.trim().startsWith("#") || line.indexOf("#") == 1 || line.length() < 3) {
                         //读下一行
                         line = reader.readLine();
                         continue;
                     }
                    if (line.trim().startsWith("?") || line.indexOf("?") == 1) {
                        //在构造下一个问题之前回答上一个问题(好好体会,结合文件格式)
                        //回答问题
                        if (questionAnsweringSystem != null && question != null) {
                            questionAnsweringSystem.answerQuestion(question);
                        }
                        String qs = line.substring(line.indexOf(".") + 1).trim();
                        String questionStr = null;
                        String expectAnswer = null;
                        String[] attrs = qs.split("[:|:]");
                        if (attrs == null) {
                            questionStr = qs;
                        }
                        if (attrs != null && attrs.length == 1) {
                            questionStr = attrs[0];
                        }
                        if (attrs != null && attrs.length == 2) {
                            questionStr = attrs[0];
                            expectAnswer = attrs[1];
                        }
                        .info("Question:" + questionStr);
                        .info("ExpectAnswer:" + expectAnswer);
                        question = new Question();
                        question.setQuestion(questionStr);
                        question.setExpectAnswer(expectAnswer);
                        questions.add(question);
                        //读下一行
                        line = reader.readLine();
                        continue;
                    }
                    Evidence answer = new Evidence();
                    if (line.startsWith("Title:")) {
                        answer.setTitle(line.substring(6).trim());
                    }
                    //读下一行
                    line = reader.readLine();
                    if (line.startsWith("Snippet:")) {
                        answer.setSnippet(line.substring(8).trim());
                    }
                    if (answer.getTitle() != null && answer.getSnippet() != null && question != null) {
                        question.addEvidence(answer);
                    }
                    //读下一行
                    line = reader.readLine();
                }
                //回答最后一个问题
                if (questionAnsweringSystem != null && question != null) {
                    questionAnsweringSystem.answerQuestion(question);
                }
            } catch (FileNotFoundException e) {
                .error("文件找不到"e);
            } catch (UnsupportedEncodingException e) {
                .error("编码错误"e);
            } catch (IOException e) {
                .error("IO错误"e);
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        .error("关闭文件错误"e);
                    }
                }
            }
        }
        return questions;
    }

    

Parameters:
args
    public static void main(String[] args) {
        DataSource dataSource = new FileDataSource(.);
        List<Questionquestions = dataSource.getQuestions();
        for (Question question : questions) {
            .info(question.toString());
        }
        Question question = dataSource.getQuestion("APDPlat的发起人是谁?");
        QuestionAnsweringSystem questionAnsweringSystem = new CommonQuestionAnsweringSystem();
        questionAnsweringSystem.answerQuestion(question);
    }
New to GrepCode? Check out our FAQ X