2012-09-29 2 views
0

저는 매우 실망한 문제가 있습니다. 나는 우분투 12.04를 루비 1.8.7을 가진 가정용 컴퓨터에 가지고있다. 그리고 나는 집안의 컴퓨터에서 완벽하게 컴파일되고 실행되는 프로젝트를 거의 끝내지 않았다. 그러나 그것을 나의 대학 연구실로 옮겼다.에는 bigdecimal loaderror ruby가 필요합니다.

`require': no such file to load -- bigdecimal (LoadError) 

내가 필요로 노력하고있어 클래스 내 프로젝트에 대한 몇 가지 로그 계산에 큰 부동 소수점 정밀도에 필요한 BigDecimal 클래스입니다 : 그들은 또한 나는 다음과 같은 오류가 발생합니다) 루비 1.8.7을 실행하는 . 아무도 내가 왜이 문제가 될지 이해할 수 있습니까? BigDecimal 클래스가 1.8.7 용 루비 코어 라이브러리에 포함되어 있다고 생각했습니다. 내가 여기서 뭔가를 놓치고 있니? EDIT : 코드가 컴파일되고 있습니다.

`#this is the language model generator 
    require "trainer" 
    require "bigdecimal" 

class Model 
    attr_accessor :frequency_tables 

def initialize(trainer, test_file) 
@trainer = trainer 
@frequency_tables = [] 
@frequency_tables[0] = trainer.corpus 
@frequency_tables[1] = trainer.freq 
@frequency_tables[2] = trainer.bifreq 
@frequency_tables[3] = trainer.trifreq 
@frequency_tables[4] = trainer.word_count() 
@frequency_tables[5] = trainer.vocab_count() 
end 

def unigram_count(string) 
string.upcase! 
return @frequency_tables[1][string] 
end 
def bigram_count(string) 
string.upcase! 
return @frequency_tables[2][string] 
end 
def trigram_count(string) 
string.upcase! 
return @frequency_tables[3][string] 
end 

def round(float) 
return ((float * 10000).round.to_f)/10000 
end 

def process_unigram(sentence) 
probability = BigDecimal.new("1") 
sen_arr = sentence.split(" ") 
sen_arr.each { |word| 
# binding.pry 
    probability *= (BigDecimal.new(unigram_count(word).to_s())/BigDecimal.new(@frequency_tables[4].to_s())) 
} 
unless probability.eql? 0 
    val= ((Math.log(probability)/Math.log(2))) 
    return retval = round(val) 
end 
return "undefined" 
end 

def process_bigram(sentence) 
probability = BigDecimal.new("1") 
sen_arr = sentence.split(" ") 
for i in (0..(sen_arr.length-1)) 
    unless i == 0 
    denom = BigDecimal.new(unigram_count(sen_arr[i-1]).to_s())/BigDecimal.new(@frequency_tables[4].to_s()) 
    unless denom.eql? 0 
     probability *= (BigDecimal.new(bigram_count(sen_arr[i-1]+" "+sen_arr[i]).to_s())/BigDecimal.new(@frequency_tables[4].to_s()))/denom 
    else 
     probability = 0 
    end 
    else 
    probability *= (BigDecimal.new(bigram_count("PHI "+sen_arr[i]).to_s())/BigDecimal.new(@frequency_tables[4].to_s()))/(BigDecimal.new(unigram_count("PHI").to_s())/BigDecimal.new(@frequency_tables[4].to_s())) 
    end 
end 
unless probability.eql? 0 
    val= ((Math.log(probability)/Math.log(2))) 
    retval = round(val) 
    return retval 
end 
return "undefined" 
end 

def process_trigram(sentence) 
probability = BigDecimal.new("1") 
sen_arr = sentence.split(" ") 
for i in (0..(sen_arr.length-1)) 
    if i >= 2 
    denom = (BigDecimal.new(bigram_count(sen_arr[i-2]+" "+sen_arr[i-1]).to_s())) 
     unless denom.eql? 0 
     probability *= (BigDecimal.new(trigram_count(sen_arr[i-2]+" "+sen_arr[i-1]+" "+sen_arr[i]).to_s()))/denom 
     else 
    probability *= 0 
     end 
    elsif i == 1 
    denom = (BigDecimal.new(bigram_count("PHI "+sen_arr[i-1]).to_s())) 
     unless denom.eql? 0 
     probability *= (BigDecimal.new(trigram_count("PHI "+sen_arr[i-1]+" "+sen_arr[i]).to_s()))/denom 
     else 
     probability = 0 
     end 
    else 
    probability *= (BigDecimal.new(trigram_count("PHI PHI "+sen_arr[i]).to_s()))/(BigDecimal.new(unigram_count("PHI").to_s())) 
    end 
end 
unless probability.eql? 0 
    val= ((Math.log(probability)/Math.log(2))) 
    retval = round(val) 
    return retval 
end 
return "undefined" 
end 

def process_smooth_bigram(sentence) 
probability = BigDecimal.new("1") 
sen_arr = sentence.split(" ") 
for i in (0..(sen_arr.length-1)) 
    unless i == 0 
    bigram_c = bigram_count(sen_arr[i-1]+" "+sen_arr[i])+1 
    ugram_c = unigram_count(sen_arr[i-1])[email protected]_tables[5] 
    probability *= (BigDecimal.new(bigram_c.to_s()))/(BigDecimal.new(ugram_c.to_s())) 
    else 
    probability *= (BigDecimal.new((bigram_count("PHI "+sen_arr[i])+1).to_s()))/(BigDecimal.new((unigram_count("PHI")[email protected]_tables[5]).to_s())) 
    end 
end 
unless probability.eql? 0 
    val= ((Math.log(probability)/Math.log(2))) 
    retval = round(val) 
    return retval 
end 
return "undefined" 
end 

def process_smooth_trigram(sentence) 
probability = BigDecimal.new("1") 
sen_arr = sentence.split(" ") 
for i in (0..(sen_arr.length-1)) 
    if i >= 2 
    denom = (BigDecimal.new((bigram_count(sen_arr[i-2]+" "+sen_arr[i-1])[email protected]_tables[5]).to_s())) 
    probability *= (BigDecimal.new((trigram_count(sen_arr[i-2]+" "+sen_arr[i-1]+" "+sen_arr[i])+1).to_s()))/denom 
    elsif i == 1 
    denom = (BigDecimal.new((bigram_count("PHI "+sen_arr[i-1])[email protected]_tables[5]).to_s())) 
    probability *= (BigDecimal.new((trigram_count("PHI "+sen_arr[i-1]+" "+sen_arr[i])+1).to_s()))/denom 
    else 
    probability *= (BigDecimal.new((trigram_count("PHI PHI "+sen_arr[i])+1).to_s()))/(BigDecimal.new((unigram_count("PHI")[email protected]_tables[5]).to_s())) 
    end 
end 
unless probability.eql? 0 
    val= ((Math.log(probability)/Math.log(2))) 
    retval = round(val) 
    return retval 
end 
return "undefined" 
end 
end` 
+0

'require' 문은 어디에 있습니까? –

답변

0

내가 사용하고 있던 실험실에서 내 지식없이 여러 버전의 Ruby가 설치되었습니다. IRB가 ​​다른 버전의 정보를 사용하고 있기 때문에 Ruby 명령을 사용하지 않고 bigdecimal을 사용할 수있었습니다. Ruby의 다른 버전을 사용하고 나면 제대로 작동했습니다.

0

저에게 잘 맞습니다. 구문 오류 일 수 있습니다. 코드를 추가하면 업데이트됩니다.

ruby-1.8.7-p334 :001 > require 'bigdecimal' 
=> true 

ruby-1.8.7-p334 :002 > BigDecimal("1.0e+25") - BigDecimal("9999999999999999900000000.0") 
=> #<BigDecimal:10035f970,'0.1E9',9(45)> 
+0

내가 irb에 들어갈 때 'bigdecimal'을 요구할 수 있고 사실이된다면 클래스를 조작 할 수도 있습니다. WTF?! 일부 코드에서 원래 게시물로 편집하겠습니다. – noname

+0

모델을 직접 'irb'에 복사/붙여 넣기하면 어떻게됩니까? 인식합니까 아니면 오류입니까? –