如何在Java中建模字典(带定义的单词)

时间:2014-10-07 17:06:13

标签: java oop dictionary

我正在尝试设计一些Java类来表示SentiWordNet字典。 在这个特定的字典中,每个单词都有这种结构:

PartOfSpeech PosScore NegScore Term Gloss(术语定义)

示例:

a    0.8    0   generous      willing to give and share unstintingly; "a generous donation"

我创建了一个DictionaryEntry类,它表示字典的单个术语的数据结构(即5个属性,一个用于字典的每个属性),以及一个类Dictionary,它生成整个字典,从中获取每个单词包含SentiWordNet字典的.txt。

我想知道这是否是一个好的实施或者是否有更好的实施;认为Dictionary类没有属性,只有一个方法可以加载ArrayList中的每个术语...也许我可以避免这个类并在main()方法中加载字典(在另一个类中)或者在DictionaryEntry中添加另一个方法为了这个目的...

任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:3)

Java是一种面向对象的语言。我创建了一个封装所需状态和行为的对象:

public class DictionaryEntry {
    private String term;
    private String definition;
    private PartOfSpeech partOfSpeech; // a nice candidate for an enum
    private int positiveScore;
    private int negativeScore;
    // add methods.
}

我可以将其视为Map<String, DictionaryEntry>中的值,其中term是关键。 HashMap会为您提供O(1)次查询。

如果建议&#34; Java是一种面向对象的语言&#34;对于条目有好处,它对Dictionary

同样有用
public class Dictionary {
    private Map<String, DictionaryEntry> entries;

    public Dictionary(InputStream corpus) throws IOException {
        this.entries = new HashMap<String, DictionaryEntry>();
        // Read the corpus and populate the map here.
    }

    public DictionaryEntry lookup(String term) { 
        return this.entries.get(term);
    }
}

您的所有客户都不需要知道您已选择HashMap作为Dictionary的基础实施。他们只想从该语料库中查找术语。

这称为封装。这意味着您的班级客户可以使用它而无需了解底层细节。