Package paper.pattern

Source Code of paper.pattern.PaperPatternUI

package paper.pattern;

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.ictclas4j.segment.Segment;

import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntProperty;
import com.hp.hpl.jena.ontology.OntResource;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public class PaperPatternUI {
  private JFrame frame;

  private JTextField paperLocation;

  private JButton choosePaperLocation;

  private JTextArea text;

  private JScrollPane textSP;

  private JCheckBox[] boxes;

  private JTextArea docList;

  private JScrollPane docListSP;

  private JFileChooser paperFc;

  private Segment seg;

  private ArrayList<String> locationPattern1;

  private ArrayList<String> locationPattern2;

  private ArrayList<String> salaryPattern;

  private ArrayList<String> overtimePattern;

  private ArrayList<String> enviornmentPattern1;

  private ArrayList<String> enviornmentPattern2;

  private OntModel model;

  private String prefix;

  public PaperPatternUI() {

    // ��ʼ������
    initFrame();
    // ��ʼ����ʾ����
    initContentPane();
    // ��ʼ����ť
    initActions();
    // ��ʼ���ļ�ѡ����
    initFc();

    initOntology();

    initPatterns();

    seg = new Segment(1);

    frame.setVisible(true);
  }

  private void initOntology() {
    model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
    try {
      model.read(new FileInputStream(new File("work.owl")), null);
    } catch (FileNotFoundException ex) {
      JOptionPane.showMessageDialog(frame, "�޷����ر���⣬��ȷ��qa.owl������ڵ�ǰĿ¼�¡�",
          "Error!", JOptionPane.ERROR_MESSAGE);
      ex.printStackTrace();
      System.exit(0);
    }

    prefix = "http://www.work.com/work.owl#";
  }

  private void initPatterns() {

    locationPattern1 = new ArrayList<String>();
    locationPattern1.add("ns");
    locationPattern1.add("����");
    locationPattern1.add("ns");
    locationPattern1.add("��λ��");

    locationPattern2 = new ArrayList<String>();
    locationPattern2.add("��λ��");
    locationPattern2.add("����");
    locationPattern2.add("ns");

    salaryPattern = new ArrayList<String>();
    salaryPattern.add("н��");
    salaryPattern.add("���ݴ�");

    overtimePattern = new ArrayList<String>();
    overtimePattern.add("����");
    overtimePattern.add("����");
    overtimePattern.add("����");

    enviornmentPattern1 = new ArrayList<String>();
    enviornmentPattern1.add("����");
    enviornmentPattern1.add("���ݴ�");

    enviornmentPattern2 = new ArrayList<String>();
    enviornmentPattern2.add("����");
    enviornmentPattern2.add("����");
    enviornmentPattern2.add("����");

  }

  // ��ʼ������
  private void initFrame() {
    frame = new JFrame("PaperPattern");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(500, 400);

    double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    frame.setLocation((int) (width - frame.getWidth()) / 2,
        (int) (height - frame.getHeight()) / 2);

    frame.setResizable(false);
  }

  private boolean match(Sentence sentence, ArrayList<String> pattern)
      throws Exception {

    int predicateIndex = -1;
    for (int i = 0; i < pattern.size(); i++) {
      if (pattern.get(i).equals("����") || pattern.get(i).equals("���ݴ�")) {
        predicateIndex = i;
        break;
      }
    }

    OntProperty predicate = model.getOntProperty(prefix
        + pattern.get(predicateIndex));
    ExtendedIterator<? extends OntProperty> subPredicates = predicate
        .listSubProperties();

    boolean match = false;
    while (subPredicates.hasNext()) {
      String subPredicate = subPredicates.next().getLocalName();

      int predicateTokenIndex = -1;
      for (int i = 0; i < sentence.getTokens().size(); i++) {
        if (sentence.getTokens().get(i).getText().equals(subPredicate)) {
          predicateTokenIndex = i;
          break;
        }
      }
      if (predicateTokenIndex >= 0) {
        HashSet<String> ns = new HashSet<String>();
        boolean preMatch = match(0, predicateTokenIndex, sentence, 0,
            predicateIndex, pattern, ns);
        boolean postMatch = match(predicateTokenIndex + 1, sentence
            .getTokens().size() - 1, sentence, predicateIndex + 1,
            pattern.size() - 1, pattern, ns);

        if (preMatch && postMatch) {
          match = true;
          break;
        }
      }
    }
    return match;

  }

  private boolean match(int start, int end, Sentence sentence,
      int patternStart, int patternEnd, ArrayList<String> pattern,
      HashSet<String> ns) {
    if (patternStart >= patternEnd) {
      return true;
    }

    int newStart = -1;
    out: for (int i = start; i < end; i++) {
      if (sentence.getTokens().get(i).getPOS().equals(
          pattern.get(patternStart))) {

        boolean notAlreadyExist = ns.add(sentence.getTokens().get(i)
            .getText());
        if (notAlreadyExist) {
          newStart = i + 1;
        }
        break;
      } else {
        OntClass nounClass = model.getOntClass(prefix
            + pattern.get(patternStart));
        if (nounClass != null) {
          if (sentence.getTokens().get(i).getText().equals(
              nounClass.getLocalName())) {
            newStart = i + 1;
            break out;
          }

          ExtendedIterator<? extends OntResource> instances = nounClass
              .listInstances();
          while (instances.hasNext()) {
            String nounInstance = instances.next().getLocalName();
            if (sentence.getTokens().get(i).getText().equals(
                nounInstance)) {
              newStart = i + 1;
              break out;
            }
          }
        }
      }
    }
    if (newStart >= 0 && newStart <= end) {
      return match(newStart, end, sentence, patternStart + 1, patternEnd,
          pattern, ns);
    } else {
      return false;
    }
  }

  // ��ʼ����ť
  private void initActions() {

    choosePaperLocation.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int returnVal = paperFc.showOpenDialog(frame);
        if (returnVal == JFileChooser.APPROVE_OPTION) {

          String company = "";
          if (paperFc.getSelectedFile().getName().equals("��Զ��˾.txt")
              || paperFc.getSelectedFile().getName().equals(
                  "Զ��˾.txt")) {
            company = "���ʹ�˾";
          } else if (paperFc.getSelectedFile().getName().equals(
              "���﹫˾.txt")
              || paperFc.getSelectedFile().getName().equals(
                  "���չ�˾.txt")) {
            company = "���ʹ�˾";
          }
          if (company.equals("")) {
            JOptionPane.showMessageDialog(frame, "��˾���ƴ���",
                "Error!", JOptionPane.ERROR_MESSAGE);
            return;
          }

          String location = paperFc.getSelectedFile()
              .getAbsolutePath();
          paperLocation.setText(location);

          text.setText("");
          docList.setText("");
          String lines = "";
          try {
            BufferedReader fr = new BufferedReader(new FileReader(
                new File(location)));
            String line = null;
            while (true) {
              line = fr.readLine();
              if (line == null) {
                break;
              }
              lines += line;
            }

          } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(frame, ex.getMessage(),
                "Error!", JOptionPane.ERROR_MESSAGE);
          }
          text.setText(seg.split(lines).getFinalResult());

          ArrayList<Sentence> sentences = Sentence
              .parseSentences(text.getText());

          HashMap<String, String> score = new HashMap<String, String>();
          try {
            if (company.equals("���ʹ�˾")) {
              score.put(boxes[0].getText(), "0");
              score.put(boxes[1].getText(), "0");
              for (int i = 0; i < sentences.size(); i++) {

                Sentence sentence = sentences.get(i);
                if (match(sentence, locationPattern1)
                    || match(sentence, locationPattern2)) {
                  score.put(boxes[0].getText(), "70");
                  boxes[0].setSelected(true);
                }
                if (match(sentence, salaryPattern)) {
                  score.put(boxes[1].getText(), "30");
                  boxes[1].setSelected(true);
                }
              }
            } else if (company.equals("���ʹ�˾")) {
              score.put(boxes[2].getText(), "0");
              score.put(boxes[3].getText(), "0");
              for (int i = 0; i < sentences.size(); i++) {

                Sentence sentence = sentences.get(i);
                if (match(sentence, overtimePattern)) {
                  score.put(boxes[2].getText(), "50");
                  boxes[2].setSelected(true);
                }
                if (match(sentence, enviornmentPattern1)
                    || match(sentence, enviornmentPattern2)) {
                  score.put(boxes[3].getText(), "50");
                  boxes[3].setSelected(true);
                }
              }
            }
          } catch (Exception ex) {
            JOptionPane.showMessageDialog(frame,
                "������鿴error.log�ļ���", "Error!",
                JOptionPane.ERROR_MESSAGE);
            ex.printStackTrace();
            return;

          }

          docList.setText("");
          Iterator<String> scoreIt = score.keySet().iterator();
          int totalScore = 0;
          while (scoreIt.hasNext()) {
            String key = scoreIt.next();
            String value = score.get(key);
            totalScore += Integer.parseInt(value);
            docList.append(key + "\t" + "�÷�" + "\t" + value + "\n");
          }
          docList
              .append("------------------------------------------------------------\n");
          docList.append("�����Ļش�" + "\t" + "�÷�" + "\t" + totalScore
              + "\n");

        }
      }
    });

  }

  // ��ʼ����ʾ����
  private void initContentPane() {

    JPanel north = new JPanel();
    paperLocation = new JTextField(25);
    paperLocation.setEditable(false);
    choosePaperLocation = new JButton("ѡ����...");
    north.add(new JLabel("����ַ��"));
    north.add(paperLocation);
    north.add(choosePaperLocation);

    JPanel center = new JPanel();
    text = new JTextArea(7, 40);
    text.setEditable(false);
    textSP = new JScrollPane(text);
    center.add(textSP);
    JPanel n = new JPanel();

    boxes = new JCheckBox[4];
    boxes[0] = new JCheckBox("��������λ��");
    boxes[1] = new JCheckBox("н��");
    boxes[2] = new JCheckBox("�Ӱ�");
    boxes[3] = new JCheckBox("��������");
    n.add(new JLabel("���ʹ�˾��"));
    for (int i = 0; i < 2; i++) {
      boxes[i].setEnabled(false);
      n.add(boxes[i]);
    }
    n.add(new JLabel("���ʹ�˾��"));
    for (int i = 2; i < boxes.length; i++) {
      boxes[i].setEnabled(false);
      n.add(boxes[i]);
    }
    center.add(n);

    JPanel south = new JPanel();
    docList = new JTextArea(8, 40);
    docList.setEditable(false);
    docListSP = new JScrollPane(docList);
    south.add(docListSP);

    frame.getContentPane().add(north, BorderLayout.NORTH);
    frame.getContentPane().add(center, BorderLayout.CENTER);
    frame.getContentPane().add(south, BorderLayout.SOUTH);

  }

  // ��ʼ���ļ�ѡ����
  private void initFc() {

    paperFc = new JFileChooser();
    CustomFileFilter filter = new CustomFileFilter();
    filter.addExtension("txt");
    filter.setDescription("plain text file");
    paperFc.setFileFilter(filter);

  }

  public static void main(String[] args) {
    new PaperPatternUI();
  }

}
TOP

Related Classes of paper.pattern.PaperPatternUI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.