/*
* 作成日: 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