module Polaris::Nlp

Constants

VERSION

Public Instance Methods

calc_polarity(sentence) click to toggle source

init method is called in first setup.

# File lib/polaris/nlp/calc.rb, line 13
def calc_polarity(sentence)

  if File.exists?(@path_to_db)
    db = SQLite3::Database.new("#{@home}/.polaris/features.sqlite3")
    nm = Natto::MeCab.new

    sum = 0
    nm.parse(sentence).split(/\n/).each do |line|
      elem = line.split(/\t/)
      break if elem[0] == 'EOS' 
      word = (elem[1].split(/\,/)[6] == '*') ? elem[0] : elem[1].split(/\,/)[6]
      value = db.execute("SELECT value FROM models WHERE word = ? LIMIT 1",word)[0]
      sum += value[0] if value
    end
    e = Math.exp(1)
    return (e ** sum - e** (-1 * sum)) / (e ** sum + e** (-1 * sum))
  else
    puts ("features.sqlite3 not found.\nplease run Polaris::Nlp.init")
    exit
  end

end
init() click to toggle source

init method is called in first setup.

# File lib/polaris/nlp/init.rb, line 13
def init

  unless Dir.exists?("#{@home}/.polaris")
    Dir.mkdir("#{@home}/.polaris")
  end

  puts "Download data..."
  ja_text = open('http://www.lr.pi.titech.ac.jp/%7Etakamura/pubs/pn_ja.dic').read.encode('utf-8','sjis')
  en_text = open('http://www.lr.pi.titech.ac.jp/%7Etakamura/pubs/pn_en.dic').read.encode('utf-8','sjis')
  puts "Done"

  if File.exists?("#{@home}/.polaris/features.sqlite3")
    FileUtils.rm("#{@home}/.polaris/features.sqlite3")
  end

  db = SQLite3::Database.new("#{@home}/.polaris/features.sqlite3")
  db.execute("CREATE TABLE models (word TEXT ,value REAL);")

  puts "Seed Japanese data..."
  ja_text.split("\n").each do |line|
    item = line.split(':')
    word = item[0]
    value = item[3]
    insert_value(db,word,value)
  end
  puts "Done"

  puts "Seed English data..."
  en_text.split("\n").each do |line|
    item = line.split(':')
    word = item[0]
    value = item[2]
    insert_value(db,word,value)
  end
  puts "Done"

end
insert_value(db,word,value) click to toggle source
# File lib/polaris/nlp/init.rb, line 51
def insert_value(db,word,value)
  return db.execute("INSERT INTO models (word, value) VALUES(?, ?);", word, value)
end