我写了一个Ruby版本的Erik Demaine(MIT)docdist8.py。这可以在github上以docdist-v3.rb的形式获得。我遇到了两种奇怪的情况:
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和= end包装它没有问题,但如果我用三重双引号"""包装它,我会得到如下错误:
./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
^
"""是否有规则/允许的条目与= begin和= end?
不同2)当我使用time命令运行程序时,它会在大约0.3秒内执行。但是,如果我提出要求' profile'相比之下,它需要的时间变得非常高 - 30秒。因此,我根本得不到正确的输出。原始Python版本似乎不是这种情况,只需要很少的时间来分析。如何在Ruby中运行相同的配置文件?
注意:我用来运行Ruby程序的两个文件是t2.bobsey.txt和t3.lewis.txt。它们位于http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/dd_data.htm
答案 0 :(得分: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)