1

我正在使用以下几行构建树。

LexicalizedParser lp = LexicalizedParser.loadModel("englishPCFG.ser.gz"); 
Tree smsTree = lp.apply("how to store Tree to file & then Load !");

我想将这些树存储到某个文件中,然后在需要时加载它。有什么方法可以做到吗?

4

2 回答 2

1

我试图自己弄清楚。到目前为止,我发现它可以转换为 XML。

import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
...
StringWriter strwriter = new StringWriter();
PrintWriter printwriter = new PrintWriter(strwriter);
...
Tree parse = lp.parse(sentence);
parse.indentedXMLPrint(printwriter, false);
String xmlstring = strwriter.toString();
//save xmlstring to file

似乎 MemoryTreebank 类也可能在这里使用(https://mailman.stanford.edu/pipermail/parser-user/2008-March/000026.html)。例如,您可以简单地将 Tree 保存为从 tree.pennString() 获得的正常表示形式的字符串,然后:

MemoryTreebank tb2 = new MemoryTreebank(new PennTreeReaderFactory());
tb2.load(new StringReader(s1.toString()));
于 2013-09-18T16:22:45.390 回答
1

任何实现Treebank 接口的类都非常简单。下面的示例使用 DiskTreebank 类。

假设您有一个目录,您使用 Tree 类的 toString() 方法将 Penn 字符串写入单个文件。

您可以使用以下代码片段读取此目录中的所有树

private void loadAndDisplayTrees() 
{
    DiskTreebank dtb = new DiskTreebank();
    dtb.loadPath(new File("pathToYourDirectory"), null);
    //The second argument in the above method is a FileFilter.

    Iterator<Tree> it = dtb.iterator();

    while(it.hasNext())
    {
        Tree t = it.next();
        System.out.println(t);          
    }
}
于 2014-02-02T18:41:57.553 回答