| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1474 人关注过本帖
标题:这个是SentiWordNet_3.0.0的使用,但是有个小问题没有解决,求赐教~
只看楼主 加入收藏
淡忘了就好
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-5-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
这个是SentiWordNet_3.0.0的使用,但是有个小问题没有解决,求赐教~
想使用SentiWordNet_3.0.0,于是在网上搜索了一段代码。但是有个小例子运行不成功。出现报错,错误代码是:
java.lang.ArrayIndexOutOfBoundsException: 2
    at SWN3.<init>(SWN3.java:26)
    at SWN3.main(SWN3.java:132)
说是越界了,但是我不会改,我就是在网上找的代码呀,感觉别人就没有越界的情况,同样的代码,我怎么就有错误呢?
求大神帮忙看一下。谢谢!
下面是源代码:
    import
    import
    import
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.Vector;

    public class SWN3 {
        private String pathToSWN = "G://H//my_design//SentiWordNet_3.0.0//home//swn//www//admin//dump//ss.txt";
        private HashMap<String, Double> _dict;

        public SWN3(){

            //_dict = new HashMap<String, String>();
            _dict = new HashMap<String, Double>();
            HashMap<String, Vector<Double>> _temp = new HashMap<String, Vector<Double>>();
            try{
                BufferedReader csv =  new BufferedReader(new FileReader(pathToSWN));
                String line = "";            
                while((line = csv.readLine()) != null)
                {
                    String[] data = line.split("\t");
                    //if(data.length>5);
                   // {
                    Double score = Double.parseDouble(data[2])-Double.parseDouble(data[3]);
                    
                    String[] words = data[4].split(" ");
                    
                    for(String w:words)
                    {
                        String[] w_n = w.split("#");
                        w_n[0] += "#"+data[0];
                        int index = Integer.parseInt(w_n[1])-1;
                        if(_temp.containsKey(w_n[0]))
                        {
                            Vector<Double> v = _temp.get(w_n[0]);
                            if(index>v.size())
                                for(int i = v.size();i<index; i++)
                                    v.add(0.0);
                            v.add(index, score);
                            _temp.put(w_n[0], v);
                        }
                        else
                        {
                            Vector<Double> v = new Vector<Double>();
                            for(int i = 0;i<index; i++)
                                v.add(0.0);
                            v.add(index, score);
                            _temp.put(w_n[0], v);
                        }
                     }
                    //}
                  }
                Set<String> temp = _temp.keySet();
                for (Iterator<String> iterator = temp.iterator(); iterator.hasNext();) {
                    String word = (String) iterator.next();
                    Vector<Double> v = _temp.get(word);
                    double score = 0.0;
                    double sum = 0.0;
                    for(int i = 0; i < v.size(); i++)
                        score += ((double)1/(double)(i+1))*v.get(i);
                    for(int i = 1; i<=v.size(); i++)
                        sum += (double)1/(double)i;
                    score /= sum;
                    String sent = "";               
                    if(score>=0.75)
                        sent = "strong_positive";
                    else
                    if(score > 0.25 && score<=0.5)
                        sent = "positive";
                    else
                    if(score > 0 && score>=0.25)
                        sent = "weak_positive";
                    else
                    if(score < 0 && score>=-0.25)
                        sent = "weak_negative";
                    else
                    if(score < -0.25 && score>=-0.5)
                        sent = "negative";
                    else
                    if(score<=-0.75)
                        sent = "strong_negative";
                    //_dict.put(word, sent);
                    _dict.put(word, score);
                }
            }
            catch(Exception e){e.printStackTrace();}        
        }

        public Double extract(String word)
        {
            //return _dict.get(word+"#"+pos);
            Double total = new Double(0);
             if(_dict.get(word+"#n") != null)
               total = _dict.get(word+"#n") + total;
             if(_dict.get(word+"#a") != null)
              total = _dict.get(word+"#a") + total;
             if(_dict.get(word+"#r") != null)
              total = _dict.get(word+"#r") + total;
             if(_dict.get(word+"#v") != null)
              total = _dict.get(word+"#v") + total;
             return total;

        }
   
        public static void main(String[] args) {
             SWN3 test = new SWN3();
             String sentence="Hello have a Super awesome great day";
             String[] words = sentence.split("\\s+");
             double totalScore = 0;
             for(String word : words) {
              word = word.replaceAll("([^a-zA-Z\\s])", "");
              if (test.extract(word) == null)
               continue;
              totalScore += test.extract(word);
             }
             //System.out.println(totalScore);
            }   
    }
          其中G://H//my_design//SentiWordNet_3.0.0//home//swn//www//admin//dump//ss.txt,文件内容是
        SentiWordNet 字典取得前十行:
        a   00001740    0.125   0   able#1  (usually followed by `to') having the necessary means or skill or know-how or authority to do something; "able to swim"; "she was able to program her computer"; "we were at last able to buy a car"; "able to get a grant for the project"
a   00002098    0   0.75    unable#1    (usually followed by `to') not having the necessary means or skill or know-how; "unable to get to town without a car"; "unable to obtain funds"
a   00002312    0   0   dorsal#2 abaxial#1  facing away from the axis of an organ or organism; "the abaxial surface of a leaf is the underside or side facing away from the stem"
a   00002527    0   0   ventral#2 adaxial#1 nearest to or facing toward the axis of an organ or organism; "the upper side of a leaf is known as the adaxial surface"
a   00002730    0   0   acroscopic#1    facing or on the side toward the apex
a   00002843    0   0   basiscopic#1    facing or on the side toward the base
a   00002956    0   0   abducting#1 abducent#1  especially of muscles; drawing away from the midline of the body or from an adjacent part
a   00003131    0   0   adductive#1 adducting#1 adducent#1  especially of muscles; bringing together or drawing toward the midline of the body or toward an adjacent part
a   00003356    0   0   nascent#1   being born or beginning; "the nascent chicks"; "a nascent insurgency"
a   00003553    0   0   emerging#2 emergent#2   coming into existence; "an emergent republic"




帮帮忙 直接在eclipse中复制运行 将txt保存后更改路径就可运行,求指教啊?在线等!!!  
搜索更多相关主题的帖子: 源代码 import 网上 
2015-05-23 14:21
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:20 
30行附近注释还是去了好
//if(data.length>5);
                   // {
附带40行附近搭配的注释也去了吧
                    //}
                  }
                Set<String> temp = _temp.keySet();

import 也删了吧,用到再加哎

剑栈风樯各苦辛,别时冰雪到时春
2015-05-23 16:12
快速回复:这个是SentiWordNet_3.0.0的使用,但是有个小问题没有解决,求赐教~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021313 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved