我已经编写了Erik Demaine (MIT)的docdist8.py的Ruby版本。在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秒内执行。然而,如果我设置了"配置文件",所需的时间就会变得非常长——30秒。因此,我根本没有得到正确的输出。这似乎与最初的Python版本不同,它只需要额外的一点时间来分析。如何在Ruby中运行相同的配置文件?
注意:我用来运行Ruby程序的两个文件是t2.bobsey.txt和t3.lewis.txt。网址:http://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/dd_data.htm1)块注释的格式总是:
=begin
Comment
=end
你实际上是在创建一个从未使用过的字符串:
"""
Not a comment
"""
# => "nNot a commentn"
这就是为什么你在添加另一个引号时会出现错误,这就是为什么语法高亮显示它们为字符串的原因。
2)使用profiler会更慢,但我得到相同的结果:
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)