我是自然语言处理的新手。我需要从课文中提取名词短语。到目前为止,我已经使用OpenNLP的分块解析器来解析我的文本,以获得树结构。但是我不能从树结构中提取名词短语,开放nlp中是否有正则表达式模式,以便我可以使用它来提取名词短语。
下面是我使用的代码
InputStream is = new FileInputStream("en-parser-chunking.bin");
ParserModel model = new ParserModel(is);
Parser parser = ParserFactory.create(model);
Parse topParses[] = ParserTool.parseLine(line, parser, 1);
for (Parse p : topParses){
p.show();}
这里我得到的输出为
(顶部(S)ADJP(JJ欢迎)(PP(TO)(NP(NNP Big)(NNP Data.))))(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(名词短语)(树)(结构)
有人能帮我弄到名词短语吗,比如NP,NNP,NN等等。有人能告诉我我需要用其他的NP切块器来弄到名词短语吗?是否有任何正则表达式模式可以实现同样的效果。
请帮帮我。
提前谢谢
古塞。
将从您的代码本身继续。此程序块将提供句子中的所有名词短语。使用getTagNodes()方法获取令牌及其类型
Parse topParses[] = ParserTool.parseLine(line, parser, 1);
Parse words[]=null; //an array to store the tokens
//Loop thorugh to get the tag nodes
for (Parse nodes : topParses){
words=nodes.getTagNodes(); // we will get a list of nodes
}
for(Parse word:words){
//Change the types according to your desired types
if(word.getType().equals("NN") || word.getType().equals("NNP") || word.getType().equals("NNS")){
System.out.println(word);
}
}
如果你只想要名词短语,那么使用句子块而不是树解析器。代码是这样的(您需要从与解析器模型相同的位置获取模型)
public void chunk() {
InputStream modelIn = null;
ChunkerModel model = null;
try {
modelIn = new FileInputStream("en-chunker.bin");
model = new ChunkerModel(modelIn);
}
catch (IOException e) {
// Model loading failed, handle the error
e.printStackTrace();
}
finally {
if (modelIn != null) {
try {
modelIn.close();
}
catch (IOException e) {
}
}
}
//After the model is loaded a Chunker can be instantiated.
ChunkerME chunker = new ChunkerME(model);
String sent[] = new String[]{"Rockwell", "International", "Corp.", "'s",
"Tulsa", "unit", "said", "it", "signed", "a", "tentative", "agreement",
"extending", "its", "contract", "with", "Boeing", "Co.", "to",
"provide", "structural", "parts", "for", "Boeing", "'s", "747",
"jetliners", "."};
String pos[] = new String[]{"NNP", "NNP", "NNP", "POS", "NNP", "NN",
"VBD", "PRP", "VBD", "DT", "JJ", "NN", "VBG", "PRP$", "NN", "IN",
"NNP", "NNP", "TO", "VB", "JJ", "NNS", "IN", "NNP", "POS", "CD", "NNS",
"."};
String tag[] = chunker.chunk(sent, pos);
}
然后查看标记数组以查找所需的类型
http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.parser.chunking.api
Parse
对象是一棵树;您可以使用getParent()
和getChildren()
和getType()
导航树。
List<Parse> nounPhrases;
public void getNounPhrases(Parse p) {
if (p.getType().equals("NP")) {
nounPhrases.add(p);
}
for (Parse child : p.getChildren()) {
getNounPhrases(child);
}
}
问题内容: 我是自然语言处理的新手。我需要从文本中提取名词短语。到目前为止,我已经使用open nlp的分块解析器来解析我的文本以获得Tree结构。但是我无法从中提取名词短语。树结构,在打开的nlp中是否有任何正则表达式模式,以便我可以用它来提取名词短语。 下面是我正在使用的代码 在这里,我得到的输出为 (TOP(S(S(ADJP(JJ欢迎光临)(PP(TO至)(NP(NNP大)(NNP数据。
我正在使用Apache的OpenNLP编写一个命令解析器。问题是OpenNLP将一些命令视为名词短语。例如,如果我解析像“open door”这样的东西,OpenNLP会给我。换句话说,它认为这个短语是“打开的门”,而不是“打开的门”。我希望它解析为。如果我解析“开门”,它会生成一个VP,但我不能指望有人使用限定词。 我目前正试图找出如何在错误的解析树上执行手术,但API文档严重缺乏。
假设解析树中存在连接两个名词的动词,那么找出它的好策略是什么?例如,在这个句子中: 这名男子在回家前给妻子打了电话。 考虑到“男人”和“妻子”的输入,我想得到动词“called”。OpenNLP给了我一个解析树: (前)(前)(后)(后)(前)(后)(后)(后)(后)(后)(前)(前)(后)(后)(后)(前)(后)(后)(后)(后)(后)(前)(后)(后)(前)(后)(后)(后)(前)(后)(后)
我是新的Python和nltk。我已经将代码从https://gist.github.com/alexbowe/879414转换为下面给定的代码,使其运行于许多文档/文本块。但我得到了以下错误 有人能帮我解决这个问题吗。我必须从数以百万计的产品评论中提取名词短语。我使用了使用Java的Standford NLP工具包,但速度非常慢,所以我认为在python中使用nltk会更好。如果有更好的解决方案
我是使用NER进行Open NLP实体提取的新手,我在Open NLP NER中训练和评估了实体提取的模型,当我给出带有一个词的实体的输入文本时,它可以正常工作例如:“我想购买吉百利” 但它不适用于多词场景,例如:“我想买一台苹果MacBook” 如何训练模特选择多个单词 PS:我知道我需要做一些与NLP中提供的Bigram相关的事情,但是如何使用OpenNLP呢?
有关于OpenNLP中解析器标记含义的文档吗?我知道POS标记类型遵循树库约定,但不幸的是,我没有找到任何关于解析器标记的信息,例如“SBAR”等。 这个留档是存在于某个地方还是我必须自己弄清楚?