// MaxentTaggerGUI -- StanfordMaxEnt, A Maximum Entropy Toolkit
// Copyright (c) 2002-2008 Leland Stanford Junior University
//
//
// 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 2
// 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, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// For more information, bug reports, fixes, contact:
// Christopher Manning
// Dept of Computer Science, Gates 1A
// Stanford CA 94305-9010
// USA
// Support/Questions: java-nlp-user@lists.stanford.edu
// Licensing: java-nlp-support@lists.stanford.edu
// http://www-nlp.stanford.edu/software/tagger.shtml
package edu.stanford.nlp.tagger.maxent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/** A very simple GUI for illustrating the POS tagger tagging text.
*
* Simple usage: <br>
* <code>java -mx300m edu.stanford.nlp.tagger.maxent.MaxentTaggerGUI pathToPOSTaggerModel</code>
* <p>
* <i>Note:</i> Could still use a fair bit of work, but probably a reasonable demo as of 16 Jan 08 (Anna).
*
* @author Kristina Toutanova
* @author Anna Rafferty (improvements on original gui)
* @version 1.1
*/
public class MaxentTaggerGUI extends JFrame {
private static final long serialVersionUID = -2574711492469740892L;
private final JTextArea inputBox = new JTextArea();
private final JTextArea outputBox = new JTextArea();
private final JButton tagButton = new JButton();
// TODO: not likely to be an issue, but this should not be static...
private static MaxentTagger tagger;
public MaxentTaggerGUI() {
super("Maximum Entropy Part of Speech Tagger");
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
/** Run the simple tagger GUI. Usage:<br><code>
* java edu.stanford.nlp.tagger.maxent.MaxentTaggerGUI [modelPath]
* </code><br>
* If you don't specify a model, the code looks for one in a couple of
* canonical places.
*
* @param args None or a modelPath, as above
*/
public static void main(final String[] args) {
Thread t = new Thread() {
@Override
public void run() {
String file;
try {
if (args.length > 0) {
file = args[args.length - 1];
} else {
file = MaxentTagger.DEFAULT_DISTRIBUTION_PATH;
}
tagger = new MaxentTagger(file);
} catch (Exception e) {
try {
file = MaxentTagger.DEFAULT_NLP_GROUP_MODEL_PATH;
tagger = new MaxentTagger(file);
} catch (Exception e2) {
e.printStackTrace();
}
}
}
};
t.start();
MaxentTaggerGUI mainFrame1 = new MaxentTaggerGUI();
mainFrame1.setPreferredSize(new Dimension(400, 200));
mainFrame1.pack();
mainFrame1.setVisible(true);
}
private void jbInit() {
//pf = new PrintFile("out");
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//Set up the input/output fields and let them scroll.
inputBox.setLineWrap(true);
inputBox.setWrapStyleWord(true);
outputBox.setLineWrap(true);
outputBox.setWrapStyleWord(true);
outputBox.setEditable(false);
JScrollPane scroll1 = new JScrollPane(inputBox);
JScrollPane scroll2 = new JScrollPane(outputBox);
scroll1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Type a sentence to tag: "));
scroll2.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Tagged sentence: "));
//Set up the button for starting tagging
JPanel buttonPanel = new JPanel();
buttonPanel.setBackground(Color.WHITE);
buttonPanel.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
FlowLayout fl = new FlowLayout();
fl.setAlignment(FlowLayout.RIGHT);
buttonPanel.setLayout(fl);
tagButton.setText("Tag sentence!");
tagButton.setBackground(Color.WHITE);
buttonPanel.add(tagButton);
tagButton.addActionListener(e -> performTagAction(e));
//Lay it all out
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx = 4.0;
c.weighty = 4.0;
this.add(scroll1, c);
c.weighty = 1.0;
this.add(buttonPanel, c);
c.weighty = 4.0;
c.gridheight = GridBagConstraints.REMAINDER;
this.add(scroll2, c);
}
@SuppressWarnings("UnusedDeclaration")
private void performTagAction(ActionEvent e) {
final String s = inputBox.getText();
Thread t = new Thread() {
@Override
public void run() {
final String taggedStr = tagger.tagString(s);
SwingUtilities.invokeLater(() -> outputBox.setText(taggedStr));
}
};
t.start();
}
}