2017-01-21 3 views
-1

Я хочу извлечь фрагменты кода ruby ​​из обычного текста.Regex для вывода кода Ruby из обычного текста?

Использование драгоценного камня https://github.com/Erol/yomu позволяет извлечь текст PDF-документа. Теперь я хочу получить только хорошо сформированный код ruby, например, из рубино-программирующей книги.

Любая идея, как может выглядеть регулярное выражение для многострочных совпадений рубиновых методов и классов? Я пробовал много разных выражений, но не получил результатов, которые я ожидал.

+0

Синтаксис Ruby не является обычным языком. Вы можете сопоставить его с регулярными выражениями. Кроме того, поскольку Ruby очень разрешительный, даже заголовок вашего вопроса сам по себе является действительным кодом Ruby. Как раз из сырого текста, фактически невозможно извлечь только код ruby ​​и игнорировать прозу между ними. –

+0

Поскольку код в книге используется, чтобы быть хорошо сформированным, это должно быть возможно. Но я думаю, вам нужно будет подсчитать ключевые слова открытия блока ruby, чтобы узнать, когда закончится класс или методы. Все возможно. – mminski

+0

Я пробовал smth вроде: 'Yomu.new (" book.pdf "). scan (/ \ nclass \ [az] * \ n. * \ nend \ n/m) ' Для извлечения класса ruby. Использование разрывов строк помогает здесь для сопоставления правильных частей обычного текста. – mminski

ответ

1

Попробуйте

  • Перейти через файл построчно и попытаться разобрать каждую строку в Ruby-кода
  • Если строка разбирает, как рубин начать добавлять больше линий к нему, пока они не разобрать, как Рубин код больше
  • Вуаля, вот ваш первый фрагмент кода
  • Возможно применить некоторый фильтр, чтобы исключить тривиальные фрагменты, как отдельные слова
  • Повторять

Это распространенная передовая практика для извлечения исходного кода из неструктурированного текста, такого как электронная почта, а что нет. Это было использовано для сканирования миллионов электронных писем для исследовательских проектов.

Используйте основную библиотеку ripper, чтобы проанализировать код Ruby.

+0

Спасибо, @akuhn, мне нравится этот подход. – mminski

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