Simple sentiment analysis using regular expression

From LemonWiki共筆
Jump to navigation Jump to search

使用 Regular expression 簡易地進行文字的「情感分析」(sentiment analysis)。

輸入文字範例1

我喜歡 pokemon。
我不喜歡 pokemon。
我樂愛 pokemon。
我不樂愛 pokemon。

三種類型情緒

  1. 正面情緒 (positive sentiment)
    • 方式: 搜尋包含「喜歡」、「樂愛」但是前面不緊接「不」字
    • 搜尋: [^不](喜歡|樂愛)
  2. 負面情緒 (negative sentiment)
    • 方式: 搜尋包含「不喜歡」、「不樂愛」
    • 搜尋: [不](喜歡|樂愛)
  3. 中性情緒 (neural sentiment)
    • 方式: 搜尋不包含「喜歡」、「樂愛」
    • 搜尋: ^((?!(喜歡|樂愛)).)*$

但是這樣的搜尋方式,沒有處理到雙重否定 (double negative,負負得正) 比較複雜文法的句子。

輸入文字範例2

我喜歡 pokemon。
我不喜歡 pokemon。
說我不喜歡 pokemon 是錯誤的。
我樂愛 pokemon。
我不樂愛 pokemon。
說我不樂愛 pokemon 是錯誤的。

三種類型情緒

  1. 正面情緒 (positive sentiment)
    • 方式: 搜尋 (1) 包含「喜歡」、「樂愛」但是前面不緊接「不」字 (2) 包含「不喜歡」、「不樂愛」,句子中同時包含否定字串,如例子的「錯誤」。
    • 搜尋:
      • 條件 (1) 搜尋: [^不](喜歡|樂愛)
      • 條件 (2) 搜尋: 找到雙重否定 (?=.*[不](喜歡|樂愛))(?=.*錯誤).*
      • 整合條件 (1) 和條件 (2) 的搜尋: [^不](喜歡|樂愛)|(?=.*[不](喜歡|樂愛))(?=.*錯誤).*
  2. 負面情緒 (negative sentiment)
    • 方式: 搜尋包含「不喜歡」、「不樂愛」,同時句子中同時不包含否定字串,如例子的「錯誤」。
    • 搜尋: ^(?!.*錯誤).([不](喜歡|樂愛)).*$
  3. 中性情緒 (neural sentiment)
    • 方式: 搜尋不包含「喜歡」、「樂愛」
    • 搜尋: ^((?!(喜歡|樂愛)).)*$

輸入文字範例3

與 pokeman 的冒險,會有不少的爭執、不愉快
與 pokeman 的相處比較不會因為這個方面而鬧得不愉快
和 pokeman 相處滿愉快
鬧的心情不是很愉快
沒有很愉快
很愉快

三種類型情緒

  1. 正面情緒 (positive sentiment)
    • 方式: 搜尋包含「愉快」但是前面不包含「不」或「沒」字
    • 搜尋: 搜尋: ^((?![不|沒]).)+(愉快)^([^不|沒])+(愉快) (線上測試)
  2. 負面情緒 (negative sentiment)
    • 方式: 搜尋包含「愉快」但是前面包含「不」或「沒」字
    • 搜尋: ([不|沒]).*(愉快)
  3. 中性情緒 (neural sentiment)
    • 方式: 搜尋不包含「愉快」、「喜歡」、「樂愛」
    • 搜尋: ^((?!(愉快|喜歡|樂愛)).)*$

備註

  • 段落每個句子需要資料前處理,分成每個句子一行。
  • 情緒文字需要事先建立詞庫。
  • 詞庫文字大量時,效能未知。
  • 本方法沒有處理: 段落文字不包含關鍵字,需要透過前後文判斷情緒時。

issues

  • 以標點符號當作斷點

延伸閱讀