0

Erik Demaine (MIT) の docdist8.py の Ruby バージョンを作成しました。これは github でdocdist-v3.rbとして入手できます。私は2つの奇妙な状況に直面しました:

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 で囲むと問題ありませんが、3 つの二重引用符 """ で囲むと、次のようなエラーが発生します。

./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 秒で実行されます。ただし、require 'profile' を指定すると、それに比べて所要時間が非常に長くなり、30 秒になります。したがって、正しい出力がまったく得られません。これはオリジナルの Python バージョンには当てはまらないようで、プロファイリングにわずかな余分な時間がかかるだけです。Ruby で同じプロファイルを実行するにはどうすればよいですか?

注: Ruby プログラムを実行するために使用した 2 つのファイルは、t2.bobsey.txt と t3.lewis.txt です。それらはhttp://ocw.mit.edu/ans7870/6/6.006/s08/lecturenotes/dd_data.htmで入手できます。

4

1 に答える 1

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)
于 2013-04-12T23:33:59.893 に答える