【问题标题】:Null value with get method of hashtable使用哈希表的get方法的空值
【发布时间】:2014-05-26 08:33:04
【问题描述】:

我编写了以下 Java 程序。该程序拆分给定的句子,并使用标准 pos 标记器用词性标记每个单词。我已经用哈希集 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("tag is "+pos);在第 54 行输出是

标签是RB

非常无效

标签是JJ

好空

标签是RB

小空

标签是JJ

坏空

【问题讨论】:

  • 您尝试打印pos 吗?
  • 是的,它给了我正确的输出
  • 你程序的当前输出是什么,你能把它放在这里吗?
  • 那里的东西String taggedstring=tagger.tagString(s); 因为当手动设置String[] word_pos_pair=taggedstring.split("_"); 时像String[] word_pos_pair="very_RB".split("_"); 工作正常。
  • 能不能加个System.out.println("POS="+pos);刚刚初始化 pos 并告诉它打印什么?

标签: java hash get hashtable


【解决方案1】:

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

taggedstring= taggedstring.trim();

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2015-07-22
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多