当前位置: 首页 > 知识库问答 >
问题:

如何使用OpenNLP的组块解析器提取名词短语

茅桐
2023-03-14

我是自然语言处理的新手。我需要从课文中提取名词短语。到目前为止,我已经使用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切块器来弄到名词短语吗?是否有任何正则表达式模式可以实现同样的效果。

请帮帮我。

提前谢谢

古塞。

共有3个答案

张宝
2023-03-14

将从您的代码本身继续。此程序块将提供句子中的所有名词短语。使用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);
            }
        }
公孙成仁
2023-03-14

如果你只想要名词短语,那么使用句子块而不是树解析器。代码是这样的(您需要从与解析器模型相同的位置获取模型)

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
丌官承
2023-03-14

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”等。 这个留档是存在于某个地方还是我必须自己弄清楚?