标记词的正则表达式

时间:2017-02-01 02:21:59

标签: java regex nlp opennlp

给定一个表示这样的句子的字符串,然后使用OpenNLP标记字符串。

String sentence = "His plays remain highly popular, and are constantly studied.";

我在下面得到这个。我的问题是我怎么知道应用正则表达式来过滤掉标签?什么让我失望的是每个连字符前面的单词。如果它只是标签,我可以做类似(VBP|VBN)+之类的事情,前面的单词会有所不同。

His_PRP$ plays_NNS remain_VBP highly_RB popular,_JJ and_CC are_VBP constantly_RB studied._VBN

例如,我如何编写正则表达式来保留所有NNCC? 因此,如上所示,如果标记字符串如何获得plays_NNS and_CC

3 个答案:

答案 0 :(得分:1)

我认为你可以使用正则表达式并提取与你的模式匹配的所需子串,并连接以获得所需的结果字符串。

 String text = "His_PRP$ plays_NNS remain_VBP highly_RB popular,_JJ and_CC are_VBP constantly_RB studied._VBN";
 String pattern = "([^\\s]+_(NNS|CC))";
 String resultText = "";

    // Create a Pattern object
    Pattern r = Pattern.compile(pattern);

    // Now create matcher object.
    Matcher m = r.matcher(text);
    while (m.find( )) 
    {
      resultText = resultText + m.group(0) + " ";
    }

    System.out.println("RESULT: " + resultText);

    /*
    #### OUTPUT #####
    RESULT: plays_NNS and_CC 
    */

答案 1 :(得分:0)

[^\s]+_(NNS|CC)

此正则表达式将帮助您仅提取NNS和CC标记。 你可以在这里玩正则表达式: https://regex101.com/r/x1VxL0/1

答案 2 :(得分:0)

使用过滤方法的非正则表达式解决方案。

public static void main(String []args){

  String inputText = "His_PRP$ plays_NNS remain_VBP highly_RB popular,_JJ and_CC are_VBP constantly_RB studied._VBN";

  String[] tags = {"_NN", "_CC"};
  String[] found = filter(inputText, tags);

  for(int i = 0; i < found.length; i++){
    System.out.println(found[i]);
  }
}

private static String[] filter(String text, String[] tags){

  String[] words = text.split(" "); // Split words by spaces
  ArrayList<String> results = new ArrayList<String>();

  // Save all words that match any of the provided tags
  for(String word : words){
    for(String tag : tags){
      if(word.contains(tag)){
        results.add(word);
        break;
      }
    }
  }
  return results.toArray(new String[0]); // Return results as a string array
}

打印到控制台:

plays_NNS                                                                                                                                                           
and_CC