2016-07-08 5 views
1

ID、名前、テキスト、および単語のリストを持つドキュメントクラスにアクセスしようとしています。私はIDと私が持っているドキュメントIDを比較しようとすると、正確な単語を見つけてその頻度を返すために、このIDに付けられた単語のリストを見つけたときに見つけます。 ご協力いただきまして誠にありがとうございます。クラスのフィールドとメソッドにアクセスして、値のあるフィールドを取得します。

public class Doc { 
    private int documentID; 
    private static Doc docInstance = null; 
    private String documentText; 
    private ArrayList<String> listOfTokens; 
    static int docCount = 0; 
    int tokFreq = 0; 

    public Doc() { 
     documentID = 0; 
     listOfTokens = new ArrayList<String>(); 
     tokFreq = 0; 
     docCount++; 
    } 

    public static Doc getDocInstance() { 
     if (docInstance == null) { 
      docInstance = new Doc(); 
     } 
     return docInstance; 
    } 

    public ArrayList<String> getListOfTokens() { 
     return listOfTokens; 
    } 

    public void setDocumentID(int x){ 
     if (getDocumentID() != x) 
      this.documentID = x; 
    } 
} 

と私は、この

public static void createDocumentVector(TreeMap<Integer,Integer> 
documentVector, TreeMap<String, ArrayList<Integer>>qm, int N) 
{ 
    int eachDoc = 0; 

    Collection<String> allKeys = qm.keySet(); 
    ArrayList<Integer> l1 = new ArrayList<Integer>(); 
    boolean addedTerm = false; 

    /** 
    Obtain an Iterator for Collection 
    */ 
    Iterator<String> itr = allKeys.iterator(); 
    String key; 
    int termFrequency = 0; 
    int documentFrequency = 0; 

    /** 
    Iterate through TreeMap values iterator 
    */ 
    while(itr.hasNext()) 
    { 
     key = (String)itr.next(); 
     Integer LL = 0; 
     l1 = qm.get(key); // Returns value of that key 
     for (int k = 0; k < l1.size(); k++) 
     { 
      LL = l1.get(k); 
      Doc doc = new Doc(); 
      doc.getDocInstance().setDocumentID(LL); 
      int size = doc.getListOfTokens().size(); 
      String[] docIdTokens = doc.getListOfTokens().toArray(new String[size]); 
      for (String s : docIdTokens){ 
       if(s.equalsIgnoreCase(key)){ 
       termFrequency++; 
       } 
      } 

      documentFrequency = l1.size(); 
      eachDoc = getTFIDF(termFrequency, documentFrequency, N); 
      documentVector.put(eachDoc, LL); 
     } 


    } 
} 

をしようとしていますそれは完全に実行やデバッグには、見つからなかったソースを提供しません。 私はこのクラスへのドキュメントを変更するには考えています:

public class Doc<ListOfTokens> { 

private static int documentID; 
private static Doc docInstance = null; 
private String documentName; 
private String documentText; 
private HashMap<String, Integer> ListOfTokens = new HashMap<String, Integer>(); 
private TreeMap<Integer, ListOfTokens> documentMap = new TreeMap<Integer, ListOfTokens>(); 
int tokFreq = 0; 
static int docCount = 0; 
----- 
} 

が、これは私が考えて少し複雑になります。ですから、どんな提案も大きな助けになるでしょう。

+0

あなたは 'static'を使いたくないと思います。これは、これらのオブジェクトが1つだけ存在することを意味します。あなたのコードでは、ただ一つの 'documentID' –

答えて

0

DocクラスのdocumentIDプロパティにキーワードstaticを使用する必要はありません。複数のdocオブジェクトがあり、documentIDにそれぞれ独自の値を設定する必要があることを期待しているので、非静的フィールドとしてdocumentIDを使用する必要があります。

+0

がありがとう、私はそれを変更しましたが、それ以上のアイデア!plz – Bebo

関連する問題