【问题标题】:PIG:Twitter Sentiment AnalysisPIG:推特情绪分析
【发布时间】:2016-09-20 05:04:38
【问题描述】:

我正在尝试实现推特情绪分析。我需要获取所有正面推文和负面推文并将它们存储在特定的文本文件中。

sample.json

{"id": 252479809098223616, "created_at": "Wed Apr 12 08:23:20 +0000 2016", "text": "google is a good company", "user_id": 450990391}{"id": 252479809098223616, "created_at": "Wed Apr 12 08:23:20 +0000 2016", "text": "facebook is a bad company","user_id": 450990391}

dictionary.text 包含所有正负词列表

weaksubj    1   bad     adj     n   negative
strongsubj  1   good    adj     n   positive

猪脚本:-

tweets = load 'new.json' using JsonLoader('id:chararray,text:chararray,user_id:chararray,created_at:chararray');

dictionary = load 'dictionary.text' AS (type:chararray,length:chararray,word:chararray,pos:chararray,stemmed:chararray,polarity:chararray);

words = foreach tweets generate FLATTEN( TOKENIZE(text) ) AS word,id,text,user_id,created_at;

sentiment = join words by word left outer, dictionary by word;

senti2 = foreach sentiment generate words::id as id,words::created_at as created_at,words::text as text,words::user_id as user_id,dictionary::polarity as polarity;

res = FILTER senti2 BY polarity MATCHES '.*possitive.*';

描述资源:-

res: {id: chararray,created_at: chararray,text: chararray,user_id: chararray,polarity: chararray}

但是当我转储 res 时,我没有看到任何输出,但它执行得很好,没有任何错误。

我在这里做错了什么。

请给我建议。

莫汉.V

【问题讨论】:

    标签: hadoop twitter apache-pig sentiment-analysis


    【解决方案1】:

    我在这里看到 2 个错误

    • 1:第 2 行 - 当您 DUMP 字典时,您将看到所有记录 在第 1 列中,其余列显示为空。

    解决方案:使用 PigStorage() 指定适当的分隔符;

     dictionary = load 'dictionary.text' AS     (type:chararray,length:chararray,word:chararray,pos:chararray,stemmed:chararray,polarity:chararray);
    
    DUMP dictionary;
    (weaksubj    1   bad     adj     n   negative,,,,,)
    (strongsubj  1   good    adj     n   positive,,,,,)
    

    第二个错误: 第 6 行:更正正的拼写!使用类似的东西

    res = FILTER senti2 BY UPPER(polarity) MATCHES '.*POSITIVE.*';
    

    【讨论】:

    • 感谢@Sandesh 的回复。
    • 我尝试了你的建议。但是,它仍然运行成功,但没有输出。
    • 我已经通过删除空格来编辑字典文件。
    【解决方案2】:

    我看到拼写错误:

    res = FILTER senti2 BY polarity MATCHES '.*possitive.*';
    

    不是'.*positive.*'吗?

    【讨论】:

      【解决方案3】:

      根据我的建议,您应该使用自定义 UDF 来解决您的问题。现在您可以使用elephant-bird-pig-4.1.jar,json-simple-1.1.1.jar 。 此外,如果您想查看这些示例,则可以使用这些 Sentiment Analysis Tutorial 。 如果您想要代码,那么您可以参考这些代码并根据教程和我的代码格式化您的代码,

      REGISTER ‘/usr/local/elephant-bird-hadoop-compat-4.1.jar';
      REGISTER '/ usr/local /elephant-bird-pig-4.1.jar';
      REGISTER '/ usr/local /json-simple-1.1.1.jar’;
      load_tweets = LOAD '/user/new.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS myMap;
      extract_details = FOREACH load_tweets GENERATE myMap#'id' as id,myMap#'text' as text;
      tokens = foreach extract_details generate id,text, FLATTEN(TOKENIZE(text)) As word;
      dictionary = load '/user/dictionary.text' AS (type:chararray,length:chararray,word:chararray,pos:chararray,stemmed:chararray,polarity:chararray);
      word_rating = join tokens by word left outer, dictionary by word using 'replicated’; describe word_rating;
      rating = foreach word_rating generate tokens::id as id,tokens::text as text, dictionary::rating as rate;
      word_group = group rating by (id,text);
      avg_rate = foreach word_group generate group, AVG(rating.rate) as tweet_rating;
      positive_tweets = filter avg_rate by tweet_rating>=0;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2017-12-14
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多