Автоматическая маркировка текста регулярными выражениями. Проблема новых строк - PullRequest
0 голосов
/ 23 февраля 2010

У меня проблемы с регулярными выражениями в ruby. Мне нужно классифицировать некоторые файлы, которые имеют первую строку, за которой следуют две новые строки, как в этом примере:

GIOVIANA

Si scrivono miliardi di poesie
sulla terra ma in Giove è ben diverso.
Neppure una se ne scrive. E certo
la scienza dei gioviani è altra cosa.
Che cosa sia non si sa. È assodato
che la parola uomo lassù desta
ilarità.

В другой позиции файла могут появляться пустые строки, а также двойные пустые строки. Я попробовал следующее регулярное выражение (и многие другие)

/\A.*\n\n/

но я не получаю желаемого результата.

Я также объясню весь мой проект, на случай, если у кого-то есть лучшее представление о том, как это сделать. Мне нужно автоматически разметить текстовые структуры в виде простого текста. Я могу сделать это довольно хорошо с помощью регулярных выражений для определения строк, предложений и т. Д., Но я не могу сказать своей программе это:

если за первой строкой следуют две новые строки, то это плитка, поэтому пометьте ее разметкой заголовка и переходите к третьей строке если за первой строкой не следуют две новые строки, тогда стихотворение не имеет заголовка, разметка первой строки как заголовок, а затем разметка всего стихотворения (включая первую строку)

в первом случае желаемый результат равен

[poem}[title}GIOVIANA{title]

[line}[sentence}Si scrivono miliardi di poesie{line]
[line}sulla terra ma in Giove è ben diverso.{sentence]{line]
[line}[sentence}Neppure una se ne scrive.{sentence][sentence} E certo{line]
[line}la scienza dei gioviani è altra cosa.{sentence]{line]
[line}[sentence}Che cosa sia non si sa.{sentence] [sentence}È assodato{line]
[line}che la parola uomo lassù desta{line]
[line}ilarità.{sentence]{line]
{poem]

в стихотворении без заголовка типа

Ora sia il tuo passo
più cauto: a un tiro di sasso
di qui ti si prepara
una più rara scena.

желаемый результат

[poem}[title}[line}[sentence}Ora sia il tuo passo{line]{title]
[line}più cauto: a un tiro di sasso{line]
[line}di qui ti si prepara{line]
[line}una più rara scena.{line]{sentence]{poem]

Спасибо

1 Ответ

1 голос
/ 23 февраля 2010

Для этого вам не нужны (сложные) регулярные выражения, просто напишите парсер:

lines = string.split("\r\n") или же lines = File.readlines(fname)

тогда как то так:

IN_SENTENCE=false
if lines[1] =~ /\w+/
 puts "[poem}[title}[line}[sentence}#{lines[0].strip}{line]{title]"
 IN_SENTENCE=true
 start = 1
else
 puts "[poem}[title}#{lines[0].strip}{title]"
 start = 2
end
lines[start..lines.size].each do |line|
  #process line
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...