朋友们,我正在使用 AANV(形容词-副词-名词-动词)方法进行情感分析,作为我 BE 的最后一年项目。在这个项目中,我已经完成了 POS 标记,我正在使用 stanford POS Tagger 进行相同的操作,它给了我适当的结果。例如,假设对于以下句子,它给我的输出如下:
输入句子:
相机工作得很好。
相机非常好。
相机拍摄照片如此缓慢。
POS 标记输出句子:
/DT相机/NN是/VBZ工作/VBN好/RB./。
相机/NN是/VBZ很/RB好/JJ./。
相机/NN 捕捉/VBZ 照片/NN so/RB 慢/RB ./.
如上所述,带有 pos 标记的输出句子,其中我只需要提取形容词、副词、名词、动词及其 POS 类别。为了获得 AANV,我使用正则表达式并写下以下代码:
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){}
}
}
借助上面的代码,我在所需的文本区域中得到如下输出(即在提取所需的标签后)
名词=>camera/NN 动词=>is/VBZ 动词=>worked/VBN 副词=>well/RB
名词=>照相机/NN 动词=>is/VBZ 副词=>very/RB 形容词=>good/JJ
名词=>Camera/NN动词=>captures/VBZ名词=>photo/NN副词=>so/RB副词=>slowly/RB**
现在我想将该对形成为 (posword,poscategory) 例如 (camera,n) 以便将这对传递给 sentiwordnet 以便从 Sentiwordnet 检索分数。请给我存储此对结构的代码,而不会干扰句子链接或结构,以便我将其传递给 sentiwordnet。结对时,应保持句子结构。一个句子可能包含多个动词、名词、副词或形容词。