我正在尝试设计一些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中添加另一个方法为了这个目的...
任何帮助都将不胜感激!
答案 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
的基础实施。他们只想从该语料库中查找术语。
这称为封装。这意味着您的班级客户可以使用它而无需了解底层细节。