Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中存储提取的POS标记文本所需的数据结构_Java_Regex_Sentiment Analysis_Pos Tagger - Fatal编程技术网

在Java中存储提取的POS标记文本所需的数据结构

在Java中存储提取的POS标记文本所需的数据结构,java,regex,sentiment-analysis,pos-tagger,Java,Regex,Sentiment Analysis,Pos Tagger,朋友们,我正在使用AANV(形容词-副词-名词-动词)方法进行情绪分析,这是我最后一年的项目。在这个项目中,我已经完成了词性标注,我正在使用斯坦福词性标注器,因为它给了我适当的结果。 例如,假设以下句子的输出如下: 输入句子: 这架照相机运转良好 照相机很好 照相机捕捉照片的速度太慢了 词性标注输出句子: /DT摄像机/NN已/VBZ工作/VBN良好/RB./ 摄像头/NN是/VBZ非常/RB良好/JJ./ 摄像头/NN捕捉/VBZ照片/NN so/RB慢速/RB./ 如上所述,输出带有词性标记

朋友们,我正在使用AANV(形容词-副词-名词-动词)方法进行情绪分析,这是我最后一年的项目。在这个项目中,我已经完成了词性标注,我正在使用斯坦福词性标注器,因为它给了我适当的结果。 例如,假设以下句子的输出如下:

输入句子:

这架照相机运转良好

照相机很好

照相机捕捉照片的速度太慢了

词性标注输出句子:

/DT摄像机/NN已/VBZ工作/VBN良好/RB./

摄像头/NN是/VBZ非常/RB良好/JJ./

摄像头/NN捕捉/VBZ照片/NN so/RB慢速/RB./

如上所述,输出带有词性标记的句子,其中我将要求只提取形容词、副词、名词、动词及其词性类别。 为了获得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){}
    }
}                     
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”);
弦斯特肯;
火柴垫;
StringTokenizer PosToken;
字符串TempStr;
int j;
for(int line=0;linecamera/NN动词=>is/VBZ动词=>worked/VBN副词=>well/RB

名词=>Camera/NN动词=>is/VBZ副词=>very/RB形容词=>good/JJ

名词=>Camera/NN动词=>captures/VBZNoun=>photo/NN副词=>so/RB副词=>slow/RB**

现在我想把这对组合成(posword,poscategory)例如(camera,n),这样这对组合将被传递给sentiwordnet,以便从sentiwordnet检索分数。请给我存储这对组合结构的代码,而不分解句子链接或结构,以便我将其传递给sentiwordnet。
在结对时,应保持句子结构。一个句子可能包含多个动词、名词、副词或形容词。

我建议您忘记“数据结构”,并考虑OO类对其进行建模。想想一个句子类,你想存储一个句子的什么内容,以及如何存储句子。

如果你坚持使用“通用”数据结构,你可以使用一个列表,其中每个元素代表一个带有Guava多重映射类型的句子

键应该是名词/动词/Etc,值应该是单词。它允许每个键有几个值。 参考资料

番石榴示例(未测试):

List-sentenceList=new-ArrayList();
用于(字符串行:行){
Multimap aux=ArrayListMultimap.create();
PosToken=新的StringTokenizer(sapostaging.tagedReview[line]);
while(PosToken.hasMoreTokens()){
//待办事项。。。
strToken=PosToken.nextToken();
//TODO,假设它是一个名词
副词put(“名词”,strToken);
//待办事项等。
}
句子列表。添加(辅助);
}
OO示例(未测试):

公共类语句{
私有列表名词=新的ArrayList;
私有列表谓词=新的ArrayList;
//待办事项副词等。
公共列表getNons(){返回名词;};
//要做的其他事情,等等。
}
List sentenceList=新的ArrayList();
用于(字符串行:行){
句子aux=新句子();
PosToken=新的StringTokenizer(sapostaging.tagedReview[line]);
while(PosToken.hasMoreTokens()){
//待办事项。。。
strToken=PosToken.nextToken();
//TODO,假设它是一个名词
aux.getnomes().add(strToken);
//待办事项等。
}
句子列表。添加(辅助);
}

谢谢!!我正在上句子课,但我不能。你能告诉我句子课的结构吗???@ShamBhand,给你。
List<Multimap<String, String>> sentenceList = new ArrayList<>();
for (String line: lines) {
   Multimap<String, String> aux = ArrayListMultimap.create();
   PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
   while(PosToken.hasMoreTokens()) {
       // TODO ...
       strToken=PosToken.nextToken();
       // TODO, lets assume it is a noun
       aux.put("noun", strToken);
       // TODO, etc.
   }
  sentenceList.add(aux);
}
public class Sentence {
    private List<String> nouns = new ArrayList<>;
    private List<String> verbs = new ArrayList<>;
    // TODO Adverbs, etc.
    public List<String> getNons() { return nouns; };
    // TODO Other getters, etc.
}

List<Sentence> sentenceList = new ArrayList<>();
for (String line: lines) {
   Sentence aux = new Sentence();
   PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
   while(PosToken.hasMoreTokens()) {
       // TODO ...
       strToken=PosToken.nextToken();
       // TODO, lets assume it is a noun
       aux.getNouns().add(strToken);
       // TODO, etc.
   }
  sentenceList.add(aux);
}