0

データベースに大きなテキストがあります。このテキストには、テキスト全体、メイン テキストを構成する段落、および各段落の単語 (トークン) という 3 つの主要コンポーネントがあります。

これら 3 つのコンポーネントのそれぞれについて、特定の関連するリンクされたコンテンツがあります。たとえば、各段落には、多くのリソース (学術研究、現代思想など) から収集された段落の同じ主題について説明する他のテキスト コンテンツのリストがあります。独自の関連コンテンツ カテゴリ (学術作品、現代思想など)

どのようにすればクリーンな playframework 1.x モデルを設計できますか? これは、メイン テキストからその段落、各段落のトークン、および関連するテキスト コンテンツ カテゴリとの関連付けに至るまで、詳細なベースでこのリンクを反映します。このシナリオをモデル化するための優れた設計パターンがあると確信しています。誰かが私にきれいな解決策を提案できますか?

4

2 に答える 2

2

テキスト全体を一度保存​​してから、柔軟なクラス階層を作成してコンテンツにインデックスを付けることをお勧めします。

特別な場所にのみ Hibernate アノテーションを付けました。

テキスト自体とパーツ オブジェクトを保持するコンテナーを作成します。

public class DocumentContainer extends Model {
    // Column definition depends on the DB, here: MySQL
    @Column(columnDefinition="LONGTEXT")
    public String text;

    public Set<DocumentPart> documentParts;
}

ドキュメントの一部は、テキストの領域で定義され、特定のタイプであり、ドキュメントの他の部分を参照できます。

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="partType")
public class DocumentPart extends Model {

    Document document;

    // indices over the documents text for this part
    int startIndex;
    int endIndex;

    @Enumerated(EnumType.STRING)
    PartType partType;

    Set<DocumentPart> referencedParts;
}

public enum PartType {
    DOCUMENT, PARAGRAPH, TOKEN
}

段落は、たとえば次のようになります。

@Entity
@DiscriminatorValue("PARAGRAPH")
public class Paragraph extends DocumentPart {
     Set<Token> tokens;
}

このようにして、ドキュメント上にある領域のタイプに関して柔軟に対応でき、ドキュメント全体 (句読点などを含む) を保持できます。

于 2012-07-28T10:35:32.427 に答える
1

あなたが書いたことから、あなたは一緒に行くことができます...

@Entity
public class Document extends Model {
    public List<Paragraph> paragraphs;
}

    @Entity public class Paragraph extends Model { public リストの単語; 公開リストの引用; }

@Entity
public class Citation extends Model {
    public String type;
    public URL linkedResource; // is resource external?
    public List<Document> // is resource internal to this system?
}

引用の関連性が明確ではなかったので、2 つのオプションを示しました。どちらか、または両方で行くことができます。

于 2012-07-28T07:59:49.160 に答える