Какие модули Perl хороши для сбора данных? - PullRequest
11 голосов
/ 27 сентября 2010

Девять лет назад, когда я начал анализировать HTML и свободный текст с помощью Perl, я прочитал классический Data Munging с Perl . Кто-нибудь знает, планирует ли Дэвид обновить книгу или есть похожие книги или веб-страницы, где объясняются новые модули синтаксического анализа, такие как XML-Twig , Regexp-Grammars и т. Д.

Я предполагаю, что за последние девять лет некоторые модули все еще были такими же хорошими, какими они были, некоторые обновлены, но с новыми интересными методами, а некоторые имеют лучшую замену. Например, все еще Parse-RecDescent является единственным вариантом для свободного разбора текста или будет под влиянием Perl 6 Regexp-Grammars его замена во многих сценариях?

Я четыре года не имел активного HTML, XML или свободного текстового анализа данных с помощью Perl, поэтому мой инструментарий в этой области немного устарел. Поэтому любые отзывы о манипулировании HTML и DOM, извлечении / проверке ссылок, веб-тестировании, таком как Mechanize, манипулировании XML и парсинге свободного текста, от людей, знакомых с текущими модулями CPAN в этой области, будут более чем приветствоваться. *

Некоторые новые дополнения к моему инструментарию:

все еще в моем наборе инструментов:

Ответы [ 2 ]

7 голосов
/ 27 сентября 2010

Маловероятно, что когда-либо будет второе издание «Data Munging with Perl».Боюсь, что экономика просто не складывается.

Но вы правы, что технология продвинулась далеко с 2001 года, и существует множество новых и улучшенных модулей, которые охватывают большую частьв той же области, что и модули, обсуждаемые в книге. Например, я не могу вспомнить, когда в последний раз я использовал XML :: Parser или XML :: DOM.Кажется, я использую XML :: LibXML для большинства моих XML-работ в эти дни.Кроме того, конечно, мое обсуждение баз данных является неполным, потому что в нем не упоминается DBIx :: Class.

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

4 голосов
/ 27 сентября 2010

re: Parse::RecDescent <=> Regexp::Grammars

Дамиан Конуэй цитируется, говоря, что Regexp::Grammars является преемником Parse::RecDescent. Но даже в этом случае, если Parse::RecDescent по-прежнему выполняет работу за вас, продолжайте ее использовать. Инструмент, который вы хорошо знаете, лучше, чем инструмент, который вы не знаете!

Однако, если производительность является ключевой проблемой, и вы используете Perl 5.10+, тогда рассмотрите Regexp::Grammars.

Надеюсь, Дейв не возражает, но вот его первый Parse::RecDescent пример из Обработка данных с помощью Perl (11.1.1), преобразованного в Regexp::Grammars:

use 5.010;
use warnings;
use Regexp::Grammars;

my $parser = qr{
    <Sentence>

    <rule: Sentence>        <subject> <verb> <object>
    <rule: subject>         <noun_phrase>
    <rule: object>          <noun_phrase>
    <rule: noun_phrase>     <pronoun> | <proper_noun> | <article> <noun>

    <token: verb>           wrote | likes | ate
    <token: article>        a | the | this
    <token: pronoun>        it | he
    <token: proper_noun>    Perl | Dave | Larry
    <token: noun>           book | cat
}xms;

while (<DATA>) {
    chomp;
    print "'$_' is ";
    print 'NOT ' unless $_ =~ $parser;
    say 'a valid sentence';
}

__DATA__
Larry wrote Perl
Larry wrote a book
Dave likes Perl
Dave likes the book
Dave wrote this book
the cat ate the book
Dave got very angry

NB. Для тех, у кого нет только книги " Дэйв очень рассердился " - это недопустимое предложение:)

/ I3az /

...