如何在Java中结合英语单词?

时间:2010-04-10 08:07:41

标签: java nlp linguistics

说我有一个单词的基本形式和Penn Treebank Tag Set中的标签。我如何获得共轭形式?例如,对于“do”和“VBN”,我怎样才能“完成”?

我认为这个任务已经在一些nlp库中实现了,所以我宁愿不发明自行车。这样的事情存在吗?

2 个答案:

答案 0 :(得分:0)

你想要做的是创建一个包含答案的稀疏数组,可以通过术语本身作为一个键索引,并将PTTS代码(CC,TO,VBD)作为另一个键。

答案 1 :(得分:0)

如果您有课程:

public Treebank {
    public String conjugate(String base, String formTag);

    ...
}

然后:

String conjugated = treebank.conjugate(base, formTag);

如果您没有Treebank类,它可能看起来像这样:

public Treebank {
    private Map<String, Map<String, String>> m_map = new HashMap<String, Map<String, String>>();

    public Treebank() {
        populate();
    }

    public String conjugate(String base, String formTag) {
        return m_map.get(base, formTag);
    }

    private void populate() {
        InputStream istream = openDataFile();

        try {
            for (Record record = readRecord(istream); record !== null; record = readRecord(istream)) {

                // Add the entry
                Map<String, String> entry = m_map.get(record.base);

                if (entry == null)
                    entry = new HashMap<String, String>();

                entry.put(record.formTag, record.conjugatedForm);
                m_map.put(record.base, entry);
           }
        }
        finally {
            closeDataFile(istream);
        }
    }

    // Data management - to be implemented.
    private InputStream openDataFile()                     { ... }
    private Record      readRecord(InputStream istream)    { ... }
    private void        closeDataFile(InputStream istream) { ... }

    private static class Record {
        String base;
        String formTag;
        String conjugatedForm;
    }
}

更好的解决方案可能涉及数据库而不是数据文件。我还将数据访问代码重构为数据访问对象。