2013-04-12 2 views
0

Я написал рубиновскую версию docdist8.py Эрика Демейна (MIT). Это доступно на github как docdist-v3.rb. Я столкнулся с двумя странными вида ситуаций:Ruby block комментарий и вопросы профиля

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 

Если я обернуть это с = началом и = конец не существует никаких проблем, но если я оберните это с тройным двойные кавычки «» «я получаю ошибки следующим образом:

./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) Когда я запускаю свою программу с помощью команды времени, она выполняется примерно через 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) В каких случаях вы получаете без необходимости «профиля» и с требованием «профиль»? Для меня, с обычного времени выполнения около 0,3 секунды, Ruby занимает около 30,5 секунд с профилем, а также не сообщает точное время выполнения Это не относится к оригиналу Python, поэтому мой вопрос: как мы профилируем в Ruby, не добавляя столько накладных расходов и не получаем время процессора, не используя команду времени? – 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, чтобы обеспечить что-то похожее на утилиту string.maketrans от Python, которая будет быстрее, чем tr. – user1575148

Смежные вопросы