import image.image_feature_vector;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SpringLayout;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import code.canopy;
import code.k_mean;
import data.Data;
import document.document_feature_vector;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileWriter;
public class graph {
public JFrame frame;
private JTextField txtEdocument;
private JTextField txtEimage;
private JTextField txtE;
public graph() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setResizable(false);
frame.setTitle("\u5355\u673A\u7248\u805A\u7C7B\u7B97\u6CD5");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SpringLayout springLayout = new SpringLayout();
frame.getContentPane().setLayout(springLayout);
txtEdocument = new JTextField();
txtEdocument.setText("E:\\\\document");
springLayout.putConstraint(SpringLayout.NORTH, txtEdocument, 31, SpringLayout.NORTH, frame.getContentPane());
frame.getContentPane().add(txtEdocument);
txtEdocument.setColumns(10);
JLabel lblDocumentPath = new JLabel("document path");
springLayout.putConstraint(SpringLayout.NORTH, lblDocumentPath, 34, SpringLayout.NORTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, lblDocumentPath, -301, SpringLayout.EAST, frame.getContentPane());
springLayout.putConstraint(SpringLayout.WEST, txtEdocument, 40, SpringLayout.EAST, lblDocumentPath);
springLayout.putConstraint(SpringLayout.EAST, txtEdocument, 211, SpringLayout.EAST, lblDocumentPath);
frame.getContentPane().add(lblDocumentPath);
JLabel lblImagePath = new JLabel("image path");
springLayout.putConstraint(SpringLayout.NORTH, lblImagePath, 27, SpringLayout.SOUTH, lblDocumentPath);
springLayout.putConstraint(SpringLayout.WEST, lblImagePath, 0, SpringLayout.WEST, lblDocumentPath);
frame.getContentPane().add(lblImagePath);
txtEimage = new JTextField();
txtEimage.setText("E:\\\\image");
springLayout.putConstraint(SpringLayout.NORTH, txtEimage, 21, SpringLayout.SOUTH, txtEdocument);
springLayout.putConstraint(SpringLayout.WEST, txtEimage, 0, SpringLayout.WEST, txtEdocument);
springLayout.putConstraint(SpringLayout.EAST, txtEimage, 0, SpringLayout.EAST, txtEdocument);
frame.getContentPane().add(txtEimage);
txtEimage.setColumns(10);
txtE = new JTextField();
springLayout.putConstraint(SpringLayout.WEST, txtE, 0, SpringLayout.WEST, txtEdocument);
txtE.setText("E:\\\\");
springLayout.putConstraint(SpringLayout.EAST, txtE, 0, SpringLayout.EAST, txtEdocument);
frame.getContentPane().add(txtE);
txtE.setColumns(10);
JLabel lblResult = new JLabel("result ");
springLayout.putConstraint(SpringLayout.NORTH, txtE, -3, SpringLayout.NORTH, lblResult);
springLayout.putConstraint(SpringLayout.NORTH, lblResult, 29, SpringLayout.SOUTH, lblImagePath);
springLayout.putConstraint(SpringLayout.WEST, lblResult, 0, SpringLayout.WEST, lblDocumentPath);
frame.getContentPane().add(lblResult);
JButton btnStart = new JButton("start");
springLayout.putConstraint(SpringLayout.SOUTH, btnStart, -43, SpringLayout.SOUTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, btnStart, -183, SpringLayout.EAST, frame.getContentPane());
frame.getContentPane().add(btnStart);
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
path_d=txtEdocument.getText();
path_i=txtEimage.getText();
path_r=txtE.getText();
//开始聚类
Data data=Data.getIni();
canopy can=new canopy();
k_mean kmean=new k_mean();
String[] wordList=data.wordList;
//生成文档和图片的特征向量
document_feature_vector dfv=new document_feature_vector(path_d,wordList);
image_feature_vector ifv=new image_feature_vector(path_i);
JOptionPane.showMessageDialog(null, "文件和图片读入完毕", "提示", JOptionPane.INFORMATION_MESSAGE);
//读取文件名
File[] fd=dfv.fs;
File[] fi=ifv.fs;
try {
FileWriter fileWriter=new FileWriter("E://document.txt");
String temp_file="";
for(int i=0;i<dfv.row;i++)
{
for(int j=0;j<dfv.column;j++)
{
temp_file+=(j==dfv.column-1)?dfv.document[i][j]+"\r\n":dfv.document[i][j]+"\t";
}
}
fileWriter.write(temp_file);
fileWriter.flush();
fileWriter=new FileWriter("E://image.txt");
temp_file="";
for(int i=0;i<ifv.row;i++)
{
for(int j=0;j<ifv.column;j++)
{
temp_file+=(j==ifv.column-1)?ifv.image[i][j]+"\r\n":ifv.image[i][j]+"\t";
}
}
fileWriter.write(temp_file);
fileWriter.flush();
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
//调用canopy算法进行初步聚类
int[][] dfv_document=can.canopy_document_cosine(dfv.document, dfv.column,dfv.row);
int[][] ifv_image=can.canopy_image_euclidean(ifv.image, ifv.column,ifv.row);
//调用k——means算法进行最终聚类
dfv_document=kmean.kmean_document(dfv_document,dfv.document,dfv.column,dfv.row);
ifv_image=kmean.kmean_image(ifv_image,ifv.image,ifv.column,ifv.row);
for(int x=0;x<dfv_document[0][0];x++)
{
int temp=dfv_document[x+1][0];
for(int y=0;y<temp;y++)
{
int temp2=dfv_document[x+1][y+1];
String str=fd[temp2].getName();
System.out.print(str);
System.out.print(" ||||| ");
}
System.out.println();
}
System.out.println();
for(int x=0;x<ifv_image[0][0];x++)
{
int temp=ifv_image[x+1][0];
for(int y=0;y<temp;y++)
{
int temp2=ifv_image[x+1][y+1];
String str=fi[temp2].getName();
System.out.print(str);
System.out.print(" ");
}
System.out.println();
System.out.println();
System.out.println();
}
try {
FileWriter fileWriter=new FileWriter(path_r+"document_result.txt");
String temp_file="";
for(int x=0;x<dfv_document[0][0];x++)
{
int temp=dfv_document[x+1][0];
for(int y=0;y<temp;y++)
{
int temp2=dfv_document[x+1][y+1];
if(y==temp-1)
temp_file+=fd[temp2].getName()+"\r\n";
else
temp_file+=fd[temp2].getName()+"\t";
}
}
fileWriter.write(temp_file);
fileWriter.flush();
fileWriter=new FileWriter(path_r+"image_result.txt");
temp_file="";
for(int x=0;x<ifv_image[0][0];x++)
{
int temp=ifv_image[x+1][0];
for(int y=0;y<temp;y++)
{
int temp2=ifv_image[x+1][y+1];
if(y==temp-1)
temp_file+=fi[temp2].getName()+"\r\n";
else
temp_file+=fi[temp2].getName()+"\t";
}
}
fileWriter.write(temp_file);
fileWriter.flush();
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private static String path_d="E:\\document";
private static String path_i="E:\\image";
private static String path_r="E:\\";
}