我目前正在用Java编写一个NLP项目,用于标记和解析文本。我的主要问题是解析组件,它当前正在使用Antlr将标记的文本转换为解析树。由于Antlr并非主要是作为NL解析工具编写的,因此它占用了大量内存,并且不容易适应于修改语法。我想在jython中使用NLTK来解决此问题,是否建议特别考虑到这是一个分布式项目,或者是否有一个等效的纯Java来生成这些解析树的建议。
谢谢
最佳答案
您是对的:ANTLR不太适合这种事情。
我没有NLTK的经验,但是尝试通过Jython进行一些“繁重的任务”,但进展并不顺利。
Stanford Natural Language Processing Group具有良好的NL解析器。也就是说,我听说过有关它的好消息,我绝对不是NLP的专家!
这是解析简单的英语句子(如"I am currently writing an NLP project in Java that tags and parses text."
)的方法:
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.objectbank.*;
import edu.stanford.nlp.parser.lexparser.*;
import edu.stanford.nlp.process.*;
import edu.stanford.nlp.trees.*;
import java.io.*;
import java.util.*;
public class StanfordParserDemo {
public static void main(String[] args) throws Exception {
// englishPCFG.ser.gz is in the download.
LexicalizedParser parser = new LexicalizedParser("/path/to/englishPCFG.ser.gz");
TokenizerFactory<Word> tokenFactory = PTBTokenizer.factory(false, new WordTokenFactory());
String sentence = "I am currently writing an NLP project in Java that tags and parses text.";
System.out.println("Sentence: " + sentence);
List<Word> words = tokenFactory.getTokenizer(new StringReader(sentence)).tokenize();
parser.parse(words);
Tree tree = parser.getBestParse();
TreePrint treePrinter = new TreePrint("penn,typedDependenciesCollapsed");
treePrinter.printTree(tree);
}
}
打印:
句子:我目前正在用Java编写一个NLP项目,用于标记和解析文本。
(根
(S
(NP(PRP I))
(副总裁(VBP上午)
(ADVP(目前为RB))
(副总裁(VBG写作)
(NP(DT an)(NNP NLP)(NN项目))
(PP(IN英寸)
(NP(NN java)))
(SBAR(在那)
(S
(NP(NNS标签)
(抄送和)
(NNS解析))
(VP(VBZ文字))))))
(..)))
可以下载各种语言的JAR和语法here。
关于nlp - Jython的Antlr和NLTK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6705972/