Java 如何使用WordNet

Java 如何使用WordNet,java,twitter,sentiment-analysis,Java,Twitter,Sentiment Analysis,我需要对一些包含推文的csv文件进行情绪分析。我用它来做情绪分析 我得到了他们在网站上提供的以下java代码示例。我不知道如何使用它。我要分析的csv文件的路径是C:\Users\MyName\Desktop\tweets.csv。SentiWordNet\u 3.0.0.txt的路径是C:\Users\MyName\Desktop\SentiWordNet\u 3.0.0\home\swn\www\admin\dump\SentiWordNet\u 3.0.0\u 20130122.txt。我

我需要对一些包含推文的csv文件进行情绪分析。我用它来做情绪分析

我得到了他们在网站上提供的以下java代码示例。我不知道如何使用它。我要分析的csv文件的路径是
C:\Users\MyName\Desktop\tweets.csv
SentiWordNet\u 3.0.0.txt的路径是
C:\Users\MyName\Desktop\SentiWordNet\u 3.0.0\home\swn\www\admin\dump\SentiWordNet\u 3.0.0\u 20130122.txt
。我是java新手,请帮忙,谢谢!下面是指向示例java代码的链接

导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.Set;
导入java.util.Vector;
公共级SWN3{
私有字符串pathToSWN=“data”+File.separator+“SentiWordNet_3.0.0.txt”;
私有HashMap_dict;
公共SWN3(){
_dict=newhashmap();
HashMap_temp=新HashMap();
试一试{
BufferedReader csv=新的BufferedReader(新文件阅读器(pathToSWN));
字符串行=”;
而((line=csv.readLine())!=null)
{
String[]data=line.split(“\t”);
Double score=Double.parseDouble(数据[2])-Double.parseDouble(数据[3]);
字符串[]字=数据[4]。拆分(“”);
for(字符串w:单词)
{
字符串[]w_n=w.split(“#”);
w_n[0]+=“#”+数据[0];
int index=Integer.parseInt(w_n[1])-1;
如果(_temp.containsKey(w_n[0]))
{
向量v=_temp.get(w_n[0]);
如果(索引>v.size())
对于(int i=v.size();i=0.25)
sent=“弱阳性”;
其他的
如果(分数<0&&score>=-0.25)
sent=“弱_负”;
其他的
如果(分数<-0.25&&分数>=-0.5)
sent=“否定”;
其他的
if(scorev.size())
对于(int i=v.size();i=0.25)
sent=“弱阳性”;
其他的
如果(分数<0&&score>=-0.25)
sent=“弱_负”;
其他的
如果(分数<-0.25&&分数>=-0.5)
sent=“否定”;
其他的
如果(分数=0.75)
返回“非常积极”;
否则如果(averageScore>0.25&&averageScore=0.5)
返回“正”;
否则如果(平均分数<0&&averageScore>=-0.25)
返回“否定”;
否则如果(平均分数<-0.25&&averageScore>=-0.5)
返回“否定”;

else if(averageScore首先删除文件第一部分的所有“垃圾”(包括说明、指令等)

一种可能的用法是更改
SWN3
并使其中的方法
extract
返回一个
Double

public Double extract(String word)
{
    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;
}
然后,给出一个要标记的字符串,您可以拆分它,使其只包含单词(没有符号和未知字符),并使用
extract
方法对每个单词返回的结果,您可以确定字符串的平均权重:

String[] words = twit.split("\\s+"); 
double totalScore = 0, averageScore;
for(String word : words) {
    word = word.replaceAll("([^a-zA-Z\\s])", "");
    if (_sw.extract(word) == null)
        continue;
    totalScore += _sw.extract(word);
}
verageScore = totalScore;

if(averageScore>=0.75)
    return "very positive";
else if(averageScore > 0.25 && averageScore<0.5)
    return  "positive";
else if(averageScore>=0.5)
    return  "positive";
else if(averageScore < 0 && averageScore>=-0.25)
    return "negative";
else if(averageScore < -0.25 && averageScore>=-0.5)
    return "negative";
else if(averageScore<=-0.75)
    return "very negative";
return "neutral";
String[]words=twit.split(\\s+);
双倍总分=0,平均分;
for(字符串字:字){
word=word.replaceAll(([^a-zA-Z\\s]),“”);
if(_sw.extract(word)==null)
继续;
totalScore+=_sw.extract(字);
}
平均得分=总分;
如果(平均得分>=0.75)
返回“非常积极”;
否则如果(averageScore>0.25&&averageScore=0.5)
返回“正”;
否则如果(平均分数<0&&averageScore>=-0.25)
返回“否定”;
否则如果(平均分数<-0.25&&averageScore>=-0.5)
返回“否定”;

else if(averageScore对于这一点,您应该编写主函数,在其中提供csv的路径,从中提取单词。然后通过发送单词及其位置调用提取函数。

您好,谢谢您的回复,我仍然不清楚某些部分。这意味着什么?if(_dict.get(word+“#r”)!=null)#n、#a、#r、#v?谢谢!如果你看文件的第一列,你会注意到这些字母(代表名词、动词..)所以你应该涵盖所有的案例。啊,我明白了。我还需要更多的帮助,我把我的tweet.csv文件的链接放在哪里?C:\Users\MyName\Desktop\tweets.csv我在上面粘贴了我的更新代码,请随意编辑,谢谢!抱歉问这么多,哈哈……我是新来的,非常感谢!)@我不明白你的问题,你能再解释一遍吗?你想问什么就问什么:)
public Double extract(String word)
{
    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;
}
String[] words = twit.split("\\s+"); 
double totalScore = 0, averageScore;
for(String word : words) {
    word = word.replaceAll("([^a-zA-Z\\s])", "");
    if (_sw.extract(word) == null)
        continue;
    totalScore += _sw.extract(word);
}
verageScore = totalScore;

if(averageScore>=0.75)
    return "very positive";
else if(averageScore > 0.25 && averageScore<0.5)
    return  "positive";
else if(averageScore>=0.5)
    return  "positive";
else if(averageScore < 0 && averageScore>=-0.25)
    return "negative";
else if(averageScore < -0.25 && averageScore>=-0.5)
    return "negative";
else if(averageScore<=-0.75)
    return "very negative";
return "neutral";