【问题标题】:How to conjugate English words in Java?如何在Java中结合英语单词?
【发布时间】:2010-04-10 08:07:41
【问题描述】:

假设我有来自Penn Treebank Tag Set 的单词和标签的基本形式。我怎样才能得到共轭形式?例如对于“do”和“VBN”,我怎样才能“完成”?

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

【问题讨论】:

    标签: java nlp linguistics


    【解决方案1】:

    如果你有课:

    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;
        }
    }
    

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

    【讨论】:

      【解决方案2】:

      您在这里要做的是创建一个稀疏数组来保存答案,可通过术语本身作为一个键进行索引,并将 PTTS 代码(CC、TO、VBD)作为另一个键。

      【讨论】:

      • 有没有这样功能的库?感觉已经有人可以做到了
      • 只是一个数据集;不需要太多的接口。制作一个库会很容易;除了 getter 和 setter 以及带有所有正确答案的数据本身之外,没有什么可做的。这些正确的答案必须至少输入一次,由有足够需求的工作解决方案的人输入。许多东西还不是库。这就是新的开始的方式。如果您迈出进入稀疏数组数据集的第一步,并分享它,其他人可以将其变成“库”,供其他人在未来使用。开源项目就是这样诞生的。 -pbr
      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 2011-03-10
      • 2015-12-06
      • 2019-07-02
      • 2019-02-23
      • 1970-01-01
      • 2012-03-03
      • 2010-10-01
      相关资源
      最近更新 更多