アットウィキロゴ
 
/*
* 作成日: 2007/10/28
*
* TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/
package shimane;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

/**
* @author miyanishi
*
* TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/
public class Operation {
private String[] files;

private Text[] text;

private Document doc;

private static String folder = "/misc/home/miyanishi/eclipse/workspace/KBSE07/jisinall/";

//private ArrayList storeTextChoise = new ArrayList();

public Operation(){
	doc = new Document( getFolder() );
	
	/* Documentに関する処理 */
	Vector allvector = doc.getAllvector();
	System.out.print("全ベクトル>>");
	for(int i = 0 ; i < allvector.size() ; i ++){
		System.out.print(allvector.get(i) + " ,");
	}
	
	Hashtable hash = doc.getAllhash();
	System.out.println("\n全ハッシュテーブル>>"+ hash);
	
	ArrayList[] cnt = doc.getFrequencyWord();
	for(int i = 0 ; i < cnt.length ; i++){
		if(cnt[i].size() != 0)
			System.out.println(i + "回登場 :" + cnt[i]);
	}
	
	/* 各テキストに関する処理 Text[i].Sentence[j]でテキストと文を特定する! */
	String[] folderfiles = getFolderFiles();
	text = new Text[folderfiles.length];
	
	//ファイルの数分,処理を行う
	for(int i = 0 ; i < folderfiles.length ; i++){
		String fullpath = getFolder() + folderfiles[i];//ファイルを一つ取り出す
		//System.out.println(i + "番目" + fullpath);
		text[i] = new Text(fullpath);
	}
	
	//表示
	System.out.println("**********************************");
	System.out.println("まとめて表示してみます.");
	for(int i = 0 ; i < folderfiles.length ; i++){
		for(int j = 0 ; j < text[i].getStoreonesentence().size() ; j++){
			System.out.println(i +"," + j + " " + text[i].getStoreonesentence().get(j));
			//i番目のファイルのj番めのセンテンスで文の位置が確定する.
		}
	}
	
	/* 全てのセンテンスに対して,ベクトルを割り当てる */
	// あるテキスト中にある単語が何回出現したかを表すtf
	// 他のテキストに何回使われたかを逆算するIdfについてそれぞれ計算して
	// ベクトルの要素とする
	/***
	 * まだ実装しておりません
	 */
	
	//単語の出現回数に応じてクラスタリングする処理を書いてみる
	ArrayList[] freq = doc.getFrequencyWord();
	
	System.out.println("\n単語の頻度によるクラスタリングを行う\n");
	
	//単語から単語を頻度順に並び替える処理
	TextPart[] freqword = new TextPart[freq.length];
	ArrayList storeFreqword = new ArrayList();
	
	//頻度が0以上のものを抽出する   ↓ココ
	for(int i = freq.length - 1 ; i > 10 ; i-- ){//頻度の多い単語から検索!
		for(int j = 0 ; j < freq[i].size()  ; j ++){
			if(freq[i].size() != 0 ){
				System.out.println("---------------------------");
				
				String key = freq[i].get(j).toString();
				System.out.println( "<" + i + ">" + " " + key);
				
				TextChoise choise = new TextChoise();
				choise.setFolder( folderfiles );//フォルダセット
				choise.setText(text);//テキストセット
				Hashtable ht = choise.search(key); //keyを用いてクラスタリング
				System.out.println("key :" + key + "で登場する回数が高いハッシュ" + ht);
				
				freqword[i] = new TextPart(key, i, ht);
				storeFreqword.add(freqword[i]);
			}
		}
	}
	
	for(int i = 0 ; i < storeFreqword.size() ; i++){
		TextPart tpart = (TextPart)storeFreqword.get(i);
		System.out.println("頻度:" + tpart.getHindo() + tpart.getKeys() + " ,hash" + tpart.getHashtable() );
		Hashtable tmp = tpart.getHashtable();
		
		int max = 0;
		String k ="";
		
		Enumeration e = tmp.keys();
		while (e.hasMoreElements()){
			String text = (String) e.nextElement();
			int n = Integer.parseInt( tmp.get(text).toString() );//新たに登場するhashのキーと値を取得
			if( n > max ){
				max = n;
				k = text;
			}
		}
		System.out.println("最大値" + max + " ," + k);
		
		/* 大きい順に並び替え */
		for(int j = max ; j > 0 ; j--){
			Enumeration e2 = tmp.keys();
			while (e2.hasMoreElements()){
				String t = (String) e2.nextElement();
				int n = Integer.parseInt( tmp.get(t).toString() );
				if( j == n ){
					System.out.print( "[ " + t + ":" + j + "]  , " );
				}
			}
		}

	}
	
}



/**
 * folderに含まれているファイルを全て探索して返す.
 *  
 * */
private String[] getFolderFiles(){
	String name = "temp.txt"; //デフォルトではtxtファイルを取得
	int position = name.indexOf(".");
	//拡張子を抽出する
	final String extension = name.substring(position + 1);
	
	File dir = new File( getFolder() );
	String[] tmpfiles = dir.list(new FilenameFilter() {
		public boolean accept(File dir, String name) {
			if(name.toString().indexOf(extension) > 0){
				return (new File(dir, name).isFile());
			}
			else{
				return false;
			}
		}
	});
	//フィールドへの書き込み
	files = new String[tmpfiles.length];
	for(int i = 0 ; i < tmpfiles.length ; i++){
		files[i] = tmpfiles[i];
	}
	return files;
}

private String getFolder(){
	return folder;
}
public static void main(String args[]){
	Operation op = new Operation();
}
}
最終更新:2007年10月30日 02:05