2016-11-24 1 views
0
  1. インデックス構造を作成するには、プログラムを逆に書く必要があります。プログラムへの入力は文書コレクションです。出力には、辞書ファイルと投稿一覧ファイルの2つのファイルが含まれています。辞書の各エントリには、用語、ドキュメントの頻度、および投稿リストへのリンクが含まれている必要があります。辞書(例えば、ハッシュや検索ツリーなど)を構築するには、適切なデータ構造を使用する必要があります。ランダムな検索や新しい用語の挿入が容易でなければなりません。すべての用語をアルファベット順にソートする必要があります。各用語の転記リストには、その用語が出現するすべての伝票(伝票IDの順)の転記が含まれ、転記に保存される情報には、伝票ID、伝票内の期間頻度、およびドキュメント。

私はので、私はから作成されたTXTファイルの両方でそれを実行し、第2のプログラムのために両方のファイルを作成し、各用語を読み、リンクをファイルに印刷し、後でそれを使用して別のファイルの用語を参照する方法

private static HashMap<dictionary, List<postings>> index = new HashMap<dictionary , List<postings>>(); 

がどのように私はこのリンクを作成するのです。このハッシュマップでそれらを保存していますinvert.java 私のdictionary.txtはtermとferquencyのみで構成されていますが、どうすればこのリンクを作成できますか?

+0

これは長すぎます。問題をもう少し分けて、人々があなたの質問をよりよく消化できるようにします。 – Jameson

+0

要求通り私は問題を切り離した – user2800591

答えて

1

これはほとんどのデータベーススタイルの問題です。エンティティはキーで表されています。だから、それぞれの主要なクラスのために、手近にあるアイテムを表現するために作成し、彼らのインデックスになるものを考えてください。あなたは、テキストファイルから値を読み戻すどこ次に、あなたがインデックスに参加することができます

// use Jackson to read/write your data files in Json format 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Inverter { 
    private JsonFileWriter fileWriter; 

    /* 
    * Don't use HashMap since it isn't sorted 
    */ 
    Map<String, TermMetadata> dictionary = new HashMap<>(); 

    public List<File> invert(final Collection<Document> documents) { 
    } 

    public void writeDictionation() { 
     fileWriter.write(dictionary); 
    } 

    public void writePostings() { 
     fileWriter.write(postings); 
    } 
} 

public class Document { 
    /** 
    * Index is the documentId 
    */ 
    int documentId; 

    // other attributes ... 
} 

public class TermMetadata { 
    /* 
    * Index on the term 
    */ 
    String term; 
    int documentFrequency; 
    List<int> postingsIds; 
} 

public class Posting { 
    /** 
    * Index on the posting id 
    */ 
    int postingId; 
    int documentId; 
    int termFrequency; 
    List<int> positions; 
} 

:あなたが何かを持っていると仮定すると

したがって、postingIdキーで、のList<int> postingIdsが投稿を参照するために使用されます。

私は理想的には、これはデータベースへのJavaフロントエンドとして実装されると思います。しかし、代わりにファイルを使用しているので、Jsonのような標準的なシリアル化メカニズムを使用してオブジェクト表現を格納することをお勧めします。

あなたが投稿ファイルを読むために行くとき、ジャクソンObjectMapper使用して、Postingオブジェクトの大きなリストを持っているだろうとgetPostingId()を呼び出してから、TermMetadataList<int> postingIds`における情報とそのまで参加することができます。

関連する問題