0

我在数据库中有一个大文本,它具有三个主要组成部分:整个文本、构成正文的段落以及每个段落中的单词(标记)。

对于这三个组件中的每一个,都会有一定的相关链接内容。例如,每个段落都会有一个其他文本内容列表,讨论从许多资源(学术著作、当代思想等)收集的段落的同一主题。我想设计一个游戏框架模型来模拟这 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 List words; 公开列表引用;}

@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 回答