【问题标题】:How to get Noun,Verb,Adjective synset separately?如何分别获得名词,动词,形容词同义词?
【发布时间】:2014-01-13 05:31:43
【问题描述】:

我正在使用 stanford 解析器进行 POS 标记,我想从标记器所做的标记中获取名词、形容词动词、副词的单独同义词集。 例如

如果我的输入查询是

恒河是印度最大的河流,人们曾将其视为神

标注器的输出是:

"恒河/NNP 是/VBZ 印度/NNP 的/POS 最大/JJS 河/NN 和/CC 人/NNS 使用/VBN 到/TO 考虑/VB 它/PRP 作为/IN a/DT神/NNP

从这里我想把名词、动词、副词和形容词分开,并想分别得到对应的同义词。

如何使用 JAVA 编程做到这一点?

【问题讨论】:

  • 如果/后面的两个字母表示动词或名词,可以试试indexOf("/VB")indexOf("/NN")
  • indexOf("/VB") 是什么意思?它的输出是什么?

标签: java parsing stanford-nlp wordnet


【解决方案1】:
private void btnShowTagActionPerformed(java.awt.event.ActionEvent evt) {                                           
Pattern NounPat=Pattern.compile("[A-Za-z]+/NN");
Pattern AdvPat=Pattern.compile("[A-Za-z]+/RB");
Pattern AdjPat=Pattern.compile("[A-Za-z]+/JJ");
Pattern VerbPat=Pattern.compile("[A-Za-z]+/VB.");
String StrToken;
Matcher mat;
StringTokenizer PosToken;
String TempStr;  
int j;
for(int line=0;line<SAPosTagging.tagedReview.length;line++)
{
   try{

   PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
   while(PosToken.hasMoreTokens())
   {
       StrToken=PosToken.nextToken();
       mat=NounPat.matcher(StrToken);
       if(mat.matches())
       {
           TempStr=StrToken;
           txtareaExTagText.append("Noun=>"+StrToken);   //textarea to be appended
           j=TempStr.indexOf("/");
           TempStr=TempStr.substring(0,j);
           System.out.print("\tNoun=>"+TempStr);
       }
       mat=VerbPat.matcher(StrToken);
       if(mat.matches())
       {

           txtareaExTagText.append("\tVerb=>"+StrToken);
           TempStr=StrToken;
           j=TempStr.indexOf("/");
           TempStr=TempStr.substring(0,j);
           System.out.print("\tVerb=>"+TempStr);

       }
       mat=AdvPat.matcher(StrToken);
       if(mat.matches())
       {

           txtareaExTagText.append("\tAdverb=>"+StrToken);
           TempStr=StrToken;
           j=TempStr.indexOf("/");
           TempStr=TempStr.substring(0,j);
           System.out.print("\tAdVerb=>"+TempStr);

       }
       mat=AdjPat.matcher(StrToken);
       if(mat.matches())
       {

          txtareaExTagText.append("\tAdjective=>"+StrToken);
           TempStr=StrToken;
           j=TempStr.indexOf("/");
           TempStr=TempStr.substring(0,j);
           System.out.print("\tAdjective=>"+TempStr);

       }  
   }
   System.out.println();
   txtareaExTagText.append("\n\n");
  }catch(Exception e){}
}

}

【讨论】:

  • 我认为您没有使用 wordnet 来获取同义词集。我想从词性标记中分别获取动词、副词、名词和形容词同义词
猜你喜欢
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多