2014-10-07 41 views
-1

我试图设计一些Java类来表示SentiWordNet字典。 在该特定字典的每一个字具有这种结构:如何在Java中建模字典(带有定义的字)

PartOfSpeech PosScore NegScore期限光泽度(术语的定义)

实施例:

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

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

我不知道这可能是一个很好的实施,或者如果有更好的实施;认为Dictionary类没有任何属性,只有一种方法可以加载ArrayList中的每一项...也许我可以避免使用这个类,并在main()方法(它在另一个类中)中加载字典,或者向DictionaryEntry中添加另一个方法为此...

任何帮助将不胜感激!

+0

你能详细解释一下这个例子吗?这对我没有意义 – DreadHeadedDeveloper 2014-10-07 17:08:08

+0

积极和消极评分的目的是什么?为什么不有一个积极和消极的单一分数? – Compass 2014-10-07 17:13:49

+0

@Compass正负评分的存在是SentiWordNet的一个特点,它可以测量由文本分类器计算出的术语的PN极性。为了我的项目的目的,这是一个不相关的细节:积极和消极的分数被视为两个属性。 – 2014-10-07 17:27:07

回答

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>的值,其中项是关键。 A HashMap会给你O(1)查找。

如果建议说:“Java是一种面向对象的语言”是良好的项目,它是同样出色的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的基础实施。他们只是想从该语料库中查找术语。

这被称为封装。这意味着你的班级的客户可以使用它,而不必知道底层细节。

+0

感谢您的回复!我的问题不是如何建模词典的单个词语(你发布的DictionaryEntry类对此是完美的),但是如果我应该用一个填充HashMap的方法创建一个Dictionary类(这个类别不会做其他任何事情)或者在我的项目的main()方法中创建字典(再次,作为HashMap)更好。 – 2014-10-07 17:12:40

+0

@NicolaScafoni在这种情况下,我会建议建立一个DictionaryFactory缺乏更好的术语。如果你需要重新实例化或重建你的库,那么你可以创建一个新的Factory。它更便于携带,因为它使字典本身独立于创建的主要方法。 – Compass 2014-10-07 17:43:09

+0

工厂是一个虚拟构造函数。这是有道理的,如果她会有几种类型的字典,但在这种情况下,我认为一个构造函数可以采用不同的语料库文件作为输入就足够了。 – duffymo 2014-10-07 18:54:47

相关问题