2012-04-03 6 views
0

宿題の割り当てについては、basicCompareメソッドを2つのテキストドキュメントを比較し、それらが類似するトピックであるかどうかを確認することになります。基本的に、このプログラムは、5文字未満の単語すべてを取り除き、リストを残します。リストを比較し、2つのドキュメント間で十分に使用されている場合(80%の類似度としましょう)、メソッドはtrueを返し、「一致」を返します。似たような2つのリストがJavaでどのように見つかっていますか?

しかし、私はすべてのコメントがメソッドの最下部にあるところで立ち往生しています。私は、2つのリストを比較し、両方のリストに含まれる単語の割合を調べる方法を考えることも、見つけることもできません。たぶん私は間違っていると思っているし、両方のリストに含まれていない単語をフィルタリングして、どれくらいの単語が残っているかを数えておく必要があります。入力された文書が一致するかどうかを定義するためのパラメータは、私たち全員に任せられているので、設定することができます。親切な女性や紳士が正しい方向に私を向けることができれば、特定の機能に関するJavaのdocページでさえ、私は残りの部分を手に入れることができると確信しています。私はどこから始めるべきかを知る必要があります。

import java.util.Collections; 
import java.util.List; 

public class MyComparator implements DocumentComparator { 

     public static void main(String args[]){ 
       MyComparator mc = new MyComparator(); 

if(mc.basicCompare("C:\\Users\\Quinncuatro\\Desktop\\MatchLabJava\\LabCode\\match1.txt", "C:\\Users\\Quinncuatro\\Desktop\\MatchLabJava\\LabCode\\match2.txt")){ 
        System.out.println("match1.txt and match2.txt are similar!"); 
      } else { 
        System.out.println("match1.txt and match2.txt are NOT similar!"); 
      } 
    } 

    //In the basicCompare method, since the bottom returns false, it results in the else statement in the calling above, saying they're not similar 
    //Need to implement a thing that if so many of the words are shared, it returns as true 

    public boolean basicCompare(String f1, String f2) { 
      List<String> wordsFromFirstArticle = LabUtils.getWordsFromFile(f1); 
      List<String> wordsFromSecondArticle = LabUtils.getWordsFromFile(f2); 

      Collections.sort(wordsFromFirstArticle); 
      Collections.sort(wordsFromSecondArticle);//sort list alphabetically 

      for(String word : wordsFromFirstArticle){ 
        System.out.println(word); 
      } 

      for(String word2 : wordsFromSecondArticle){ 
        System.out.println(word2); 
      } 

      //Find a way to use common_words to strip out the "noise" in the two lists, so you're ONLY left with unique words 
      //Get rid of words not in both lists, if above a certain number, return true 
      //If word1 = word2 more than 80%, return true 

      //Then just write more whatever.basicCompare modules to compare 2 to 3, 1 to 3, 1 to no, 2 to no, and 3 to no 

      //Once you get it working, you don't need to print the words, just say whether or not they "match" 

      return false; 

    } 


    public boolean mapCompare(String f1, String f2) { 

      return false; 
    } 

}

+0

http://stackoverflow.com/questions/2762093/java-compare-two-lists –

+0

コードを表示したにもかかわらず、問題の主要な肉*にあなたの努力を示すことができれば、それが最善です。その周りに足場のコードを提供するだけです。 – cctan

答えて

0

リストを変更して、重複を削除するように設定してください。

セットのいずれかに反復処理を行い、containsメソッドを使用して、他のセットに同じ単語が含まれているかどうかを確認します。

int count = 0; 
Set<String> set1 = new HashSet<String>(LabUtils.getWordsFromFile(f1)); 
Set<String> set2 = new HashSet<String>(LabUtils.getWordsFromFile(f2)); 

Iterator<String> it = set1.iterator(); 

while (it.hasNext()){ 
    String s = it.next(); 

    if (set2.contains(s)){ 
     count++; 
    } 

} 

次に、パーセント(カウント/合計)* 100を計算するためにカウンタを使用します。それが80%より大きい場合はtrueを返し、そうでない場合はfalseを返します。

リスト、セット、およびキューの違いを常に理解するのは良いことです。私はこれが正しい方向にあなたを指し示すことを願っています。

2

紙の上の手順を実行して、アルゴリズムを思い付くようにしてください、またはあなたの頭インチ必要なことを理解したら、それをコードに変換します。これがすべてのアルゴリズムの発明方法です。

+0

私はSky Kelseyを理解しています。これはちょうどJavaを学ぶことであり、私がやりたいことがきれいなコードに翻訳できるかどうかは分かりません。 –

+1

2つのこと:1)Listに文字列を格納しているため、重複が許されます。他のデータ構造では、別のデータ構造で重複が許されない可能性があり、あなたの仕事が楽になるでしょうか? 2)Listにはインタフェースjava.util.Collectionがあり、他の "Collections"には実装されています。そのインターフェイスで宣言されている一般的なメソッドを見てください。 1つは「含む」と呼ばれ、同様にあなたを助けるかもしれません。 –

関連する問題