具有哈希表的get方法的空值

时间:2014-05-26 08:33:05

标签: java hash get hashtable

我编写了以下Java程序。这个程序将使用标准的pos tagger分割给定的句子并使用其词性标记每个单词。我使用哈希集pos_tag_numb中的数字对每个词性标记进行哈希处理。

我为每个单词得到了正确的词性,但是当我从哈希表中获取标签号时,我得到一个空值。

import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import edu.stanford.nlp.ling.Sentence;
import edu.stanford.nlp.ling.TaggedWord;
import edu.stanford.nlp.ling.HasWord;
import edu.stanford.nlp.tagger.maxent.MaxentTagger;



class maindemo
{
public static void main(String [] args) throws IOException {
        //if(args.length<1) {
            //System.err.println("Usage: java SentiWordNetDemoCode <pathToSentiWordNetFile>");
            //return;
        //}

        String pathToSWN = "D:\\Acad !!\\Project_idrbt\\home\\swn\\www\\admin\\dump\\SentiWordNet_3.0.0_20130122.txt";
        MaxentTagger tagger = new MaxentTagger("D:\\Acad !!\\Project_idrbt\\stanford-postagger-2014-01-04\\models\\english-left3words-distsim.tagger");

        //hashing each pos tag to a number
        Hashtable<String,Integer> pos_tag_numb = new Hashtable<String,Integer>();
        pos_tag_numb.put("JJ",2);
        pos_tag_numb.put("JJR",2);
        pos_tag_numb.put("JJS",2);

        pos_tag_numb.put("RB",5);
        pos_tag_numb.put("RBR",5);
        pos_tag_numb.put("RBS",5);
        pos_tag_numb.put("WRB",5);


        SentiWordNetDemoCode sentiwordnet = new SentiWordNetDemoCode(pathToSWN);

        String review="very good little bad";

        String[] tokens=review.split(" ");

        int ti=0;


        for(String s: tokens)
        {
            String taggedstring=tagger.tagString(s);
            String[] word_pos_pair=taggedstring.split("_");
            String pos=new String(word_pos_pair[1]);

            System.out.println(word_pos_pair[0]+"  "+ pos_tag_numb.get( pos ) );
        }


    }
}

tagger.tagString(s)给出了WORD_POSTAG的输出,例如:very_RB,good_JJ

如果我添加了System.out.println行(&#34;标签是&#34; + pos);第54行输出

  
    

标签是RB

         

非常

         

标签是JJ

         

好的空白

         

标签是RB

         

little null

         

标签是JJ

         

bad null

  

1 个答案:

答案 0 :(得分:0)

FInally我解决了我自己的问题,我猜方法tagger.tagString()返回一个带有一些尾随空格的字符串。我只添加了一个语句

  
    

taggedstring = taggedstring.trim();

  

在我分割字符串之前,即在语句之前

  
    

String [] word_pos_pair = taggedstring.split(“_”);