2013-04-12 50 views
0

我寫了一個Ruby版本的Erik Demaine's(MIT)docdist8.py。這可以在github上以docdist-v3.rb的形式獲得。我面臨着兩大怪異種情況:Ruby塊評論和配置文件問題

1)在功能inner_product有一個塊註釋:

Inner product between two vectors, where vectors 
are repeated as dictionaries of (word, freq) pairs. 
Example : inner_product({"and":3, "of":2, "the":5}, 
         {"and":4, "in":1, "of":1, "this":2}) = 14.0 

如果我用這個包起來= begin和=到底有沒有問題,但如果我換行它與三雙引號「」「我得到的錯誤如下:

./docdist-v3.rb:71: syntax error, unexpected tIDENTIFIER, expecting kEND 
    Example : inner_product({"and":3, "of":2, "the":5}, 
             ^
./docdist-v3.rb:71: syntax error, unexpected tIDENTIFIER, expecting kEND 
    Example : inner_product({"and":3, "of":2, "the":5}, 
               ^
./docdist-v3.rb:72: syntax error, unexpected kIN, expecting kEND 
...     {"and":4, "in":1, "of":1, "this":2}) = 14.0 
          ^
./docdist-v3.rb:72: syntax error, unexpected tIDENTIFIER, expecting kEND 
...   {"and":4, "in":1, "of":1, "this":2}) = 14.0 
          ^
./docdist-v3.rb:72: syntax error, unexpected tIDENTIFIER, expecting kEND 
..."and":4, "in":1, "of":1, "this":2}) = 14.0 
         ^

是否有規則/允許條目‘’」從開始=是不同的,=結束了嗎?

2)當我用time命令運行我的程序時,它在大約0.3秒內執行。但是,如果我要求「檔案」,所需時間會比較高 - 30秒。因此我根本得不到正確的輸出。原始Python版本看起來並不是這種情況,只需要額外的時間進行配置。我如何獲得在Ruby中運行的相同配置文件?

注:我用來運行Ruby程序的兩個文件是t2.bobsey.txt和t3.lewis.txt。他們可在http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/dd_data.htm

+0

三雙引號不表示在Ruby中的註釋。 –

回答

0

1)塊註釋總是有以下形式:

=begin 
Comment 
=end 

你實際上是創造出一種從未使用過的字符串:

""" 
Not a comment 
""" 
# => "\nNot a comment\n" 

這就是爲什麼你會得到一個錯誤,當添加另一個引號,這就是語法突出顯示爲字符串的原因。

2)這是一個與探查慢,但我得到了相同的結果:

ruby docdist-v3.rb t2.bobsey.txt t3.lewis.txt 
File t2.bobsey.txt:262111 lines,49785 words,3354 distinct words 
File t3.lewis.txt:1015474 lines,182355 words,8530 distinct words 
The distance between the documents is: 0.574160 (radians) 
+0

感謝您澄清我的「神祕」我已經將所有評論塊更改爲= begin和= end現在在docdist-v5.rb [link](https://gist.github.com/mh-github/5379949 ) 什麼時候你不需要'profile'和require'profile'?對於我來說,從正常的執行時間約0.3秒,Ruby需要約30.5秒的時間和配置文件,它也沒有準確地報告執行時間。Python的原始版本並非如此,因此我的問題是:我們如何在Ruby中進行配置文件,而不用額外增加開銷並準確地獲取cpu時間,而無需使用time命令? – user1575148

+0

也許[ruby-prof](https:// github.com/ruby-prof/ruby-prof)是一個更好的選擇。順便說一句,你可以更新你現有的Gist,GitHub保留一個修訂歷史。 – Stefan

+0

感謝你的提示。我正在使用Ruby 1.8.6。ruby- prof需要1.8.7或更高版本,所以我安裝了R uby 1.8.7。奇怪的docdist-v5.rb與Ruby 1.8.7運行速度較慢。 ruby-prof在其輸出中報告零秒時間。看起來我現在必須堅持1.8.6和時間命令。在我看來,現在加速程序的唯一方法是讓Ruby提供類似於Python的string.maketrans實用程序,它將比tr更快。 – user1575148