Пытается извлечь данные между тегами с помощью Perl. К сожалению, синтаксические анализаторы здесь не являются опцией:Извлечь данные между тегами из файлов
- Мне нужно иметь стандартный код для работы со многими файлами в каталоге.
- Содержимое, которое мне нужно извлечь, отличается в разных файлах. Например: «Критерии включения» находятся в
<P>
в одном файле,<L>
в другом и в<TD>
в третьем.
Итак, у меня действительно нет выбора, кроме как использовать очень пушистый способ использования регулярных выражений для анализа файла и извлечения данных. Если у кого-то нет лучшей идеи ...
У меня есть код ниже, чтобы выполнить поиск и извлечение в файле.
Для данной фразы мне нужно извлечь содержимое под ним, которое может быть абзацем или списком <L>
.
Так это то, что я делаю:
- Открытие файла
- Найти строку, содержащую фразу.
- Проверьте, если следующая строка начинается с метки
<L>
, извлеките все (диапазон строк) между<L>
и</LI>
тегами.
Ниже приводится мой неполный код. Это ничего не возвращает. Итак, ища здесь какую-то помощь.
- Я нахожусь на правильном пути с этим?
- Как я могу извлечь все данные между
<L>
и</L>
тегами и сохранить их в массиве для подсчета?
Отрывок кода:
if (($curr_line =~ m/\binclusion criteria\b/i)
&& ($curr_line !~ m/\b....\b/) && ($curr_line !~ /^<Bookmark/))
{
$nextline = <$CURR_FILE>
if ($next_line =~ /^<L/)
{
print "next line is a list\n";
## inclusion is a list..so extract everything from the list
my $start = "<LI>";
my $end = "</L>";
while ($next_line =~ m{($start.*?$end)}gx)
{
print "List is...$next_line";
}
}#inner if
}
EDIT: Добавление входного XML фрагмент.
Итак, вот один из XML-файлов, созданных в формате PDF.
Мне нужно извлечь: «Это содержание цели исследования». Было бы легко, если бы только путь был согласован во всех документах. Здесь он находится под: //Sect//H4
, а в других - под //Sect//H2
или //Sect//H1
. Здесь нет никакой последовательности.
Также необходимо извлечь все перечисленные материалы в соответствии с критериями принудительной и эксклюзионной проверки. Тот же вопрос. Путь между документами не согласован.
Ссылки на закладки приводят к абзацу с несвязанным контентом.
С таким несогласованным XML, если я все еще могу использовать 1 парсерную программу для извлечения информации из тысяч документов, ничего подобного. Единственная причина, по которой я иду с ужасной kludgy и крайне неэффективной программой поиска и извлечения, - из-за несоответствий в документах XML.
<?xml version="1.0" encoding="UTF-8" ?>
<TaggedPDF-doc>
<bookmark-tree>
<bookmark title="5.1.1 Inclusion criteria">
<destination structID="LinkTarget_1130"/>
</bookmark>
<bookmark title="5.1.2 Exclusion criteria">
<destination structID="LinkTarget_1131"/>
</bookmark>
</bookmark>
<Part>
<Sect>
<Sect>
<H4>2.1 Study purpose </H4>
<P>This is study purpose content</P>
</Sect>
<P id="LinkTarget_1130"> This is some unrelated paragraph </P>
<P>5.1.1 Inclusion criteria </P>
<L>
<LI>
<LI_Label>1. </LI_Label>
<LI_Title>Title 1</LI_Title>
</LI>
<LI>
<LI_Label>2. </LI_Label>
<LI_Title>Title 2 </LI_Title>
</LI>
</L>
<P>some content 1</P>
<P>some content 2</P>
<P>some content 3 </P>
<P>some content 4</P>
<P>some content 5</P>
<L>
<LI>
<LI_Label>4.</LI_Label>
<LI_Title>Title 4</LI_Title>
</LI>
<LI>
<LI_Label>5. </LI_Label>
<LI_Title>Title 5
</LI>
</L>
<P id="LinkTarget_1131"> This is some unrelated paragraph </P>
<P>5.1.2 Exclusion criteria </P>
<P>Some content 1</P>
<L>
<LI>
<LI_Label>1. </LI_Label>
<LI_Title>Title 1</LI_Title>
</LI>
<L>
<LI>
<LI_Label>2. </LI_Label>
<LI_Title>Title 2</LI_Title>
</LI>
<LI>(3) some content</LI>
</L>
<P>Some content </P>
</Sect>
</Sect>
</Part>
</TaggedPDF-doc>
Итак, вместо того, чтобы использовать настоящий парсер, вам лучше взломать что-то *, потому что * это будет стандартным? –
Пожалуйста, покажите краткую выборку каждого файла XML. Это может быть сделано без синтаксического анализатора. – simbabque
Parsers здесь не вариант, синтаксический анализатор является решением здесь. –