用java解析文本文件(大数据集)

用java解析文本文件(大数据集),java,parsing,inputstream,Java,Parsing,Inputstream,我有一个文本文件,每一行如下所示: (电影评论数据库) 我要分析此文件以便检索: 产品/产品ID 审查/用户ID 查看/配置文件名 回顾/帮助 复习/评分 回顾/时间 审查/总结 审查/文本 稍后将使用MovieReview和Movie类封装此信息 public class MovieReview { private Movie movie; private String userId; private String profileName; private

我有一个文本文件,每一行如下所示: (电影评论数据库)

我要分析此文件以便检索:

  • 产品/产品ID
  • 审查/用户ID
  • 查看/配置文件名
  • 回顾/帮助
  • 复习/评分
  • 回顾/时间
  • 审查/总结
  • 审查/文本
稍后将使用
MovieReview
Movie
类封装此信息

public class MovieReview {

    private Movie movie;
    private String userId;
    private String profileName;
    private String helpfulness;
    private Date timestamp;
    private String summary;
    private String review;
...
任何人都能提供一种正确有效的方法来解析这个文件(大数据集)吗


谢谢。

如果它是一个大数据集,您应该避免将整个列表一次加载到内存中。我可能会为每一行使用一个处理程序来解决这个问题

public interface MovieReviewHandler {
    void handle(MovieReview revies);
}
然后可以按如下方式进行分析:

public class MovieReviewParser {
    public void parse(BufferedReader reader, MovieReviewHandler handler) {
        Pattern regex = Pattern.compile("product/productId:(.*)review/userId:(.*)review/profileName:(.*)"); // add other fields

        String line;
        while ((line = reader.readLine()) != null) {
            Matcher matcher = regex.matcher(line);
            if (!matcher.matches()) throw new RuntimeException();
            MovieReview review = new MovieReview();
            review.productId = matcher.group(1);
            review.userId = matcher.group(2);
            review.profileName = matcher.group(3);
            // etc

            handler.handle(review);
        }
    }
}    

如果它是一个大数据集,您将希望避免将整个列表一次加载到内存中。我可能会为每一行使用一个处理程序来解决这个问题

public interface MovieReviewHandler {
    void handle(MovieReview revies);
}
然后可以按如下方式进行分析:

public class MovieReviewParser {
    public void parse(BufferedReader reader, MovieReviewHandler handler) {
        Pattern regex = Pattern.compile("product/productId:(.*)review/userId:(.*)review/profileName:(.*)"); // add other fields

        String line;
        while ((line = reader.readLine()) != null) {
            Matcher matcher = regex.matcher(line);
            if (!matcher.matches()) throw new RuntimeException();
            MovieReview review = new MovieReview();
            review.productId = matcher.group(1);
            review.userId = matcher.group(2);
            review.profileName = matcher.group(3);
            // etc

            handler.handle(review);
        }
    }
}    

您如何处理评论文本中出现的字符串“review/text:”?这与解析相关。如果根本不进行处理,如果用户有创造性,您的应用程序可能随时会失败。我假设“review/text:”不会出现在文本上。您如何处理字符串“review/text:”在评论文本中的出现?这与解析相关。如果它根本不被处理,你的应用程序在任何时候都可能失败,如果用户有创造性的话。我假设文本上不会出现“review/text:”。