【发布时间】: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 并告诉它打印什么?