我正在使用以下几行构建树。
LexicalizedParser lp = LexicalizedParser.loadModel("englishPCFG.ser.gz");
Tree smsTree = lp.apply("how to store Tree to file & then Load !");
我想将这些树存储到某个文件中,然后在需要时加载它。有什么方法可以做到吗?
我正在使用以下几行构建树。
LexicalizedParser lp = LexicalizedParser.loadModel("englishPCFG.ser.gz");
Tree smsTree = lp.apply("how to store Tree to file & then Load !");
我想将这些树存储到某个文件中,然后在需要时加载它。有什么方法可以做到吗?
我试图自己弄清楚。到目前为止,我发现它可以转换为 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()));
任何实现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);
}
}