我编写了以下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
答案 0 :(得分:0)
FInally我解决了我自己的问题,我猜方法tagger.tagString()返回一个带有一些尾随空格的字符串。我只添加了一个语句
taggedstring = taggedstring.trim();
在我分割字符串之前,即在语句之前
String [] word_pos_pair = taggedstring.split(“_”);