Какие модули Perl подходят для сбора данных?
Девять лет назад, когда я начал разбирать HTML и свободный текст с Perl, я читал классический Data Munging с Perl. Кто-нибудь знает, планирует ли Дэвид обновить книгу или есть похожие книги или веб-страницы, где новые модули синтаксического анализа, такие как XML-Twig, Regexp-Grammars и т.д.?
Я предполагаю, что за последние девять лет некоторые модули по-прежнему так же хороши, как и раньше, некоторые из них обновлены, но с новыми интересными методами, а некоторые из них имеют лучшие замены. Например, по-прежнему Parse-RecDescent единственная опция для свободного синтаксического анализа текста или будет влиять на Perl 6 Regexp-Grammars его замена во многих сценариях?
Мне было четыре года без активного HTML, XML или бесплатного интеллектуального анализа данных с Perl, поэтому, вероятно, мой инструментарий в этой области немного устарел. Поэтому любая обратная связь для манипуляций HTML и DOM, извлечения/проверки ссылок, веб-тестирования, таких как Mechanize, XML-манипуляция и бесплатный синтаксический анализ текста, от людей, которые обновлены с нынешними модулями CPAN в этой области, будет более чем приветствуемой.
Некоторые новые дополнения к моему инструменту:
все еще в моем наборе инструментов:
Ответы
Ответ 1
Маловероятно, что когда-нибудь появится второе издание "Data Munging with Perl". Я боюсь, что экономика просто не складывается.
Но вы правы, что с 2001 года технология продвинулась очень долго, и есть много новых и улучшенных модулей, которые охватывают большую часть той же области, что и модули, обсуждаемые в книге. Например, я не могу Помните, что в последний раз я использовал XML:: Parser или XML:: DOM. Кажется, я использую XML:: LibXML для большей части моей работы с XML в наши дни. Кроме того, конечно, мое обсуждение баз данных является неполным, поскольку в нем не упоминается DBIx:: Class.
Возможно, было бы интересной идеей обновить часть этой информации через некоторые сообщения в моем блоге Perl. Я подумаю. Спасибо за идею.
Ответ 2
re: Parse::RecDescent
<= > Regexp::Grammars
Дамиан Конвей цитируется, говоря, что Regexp::Grammars
является преемником Parse::RecDescent
. Но даже если Parse::RecDescent
по-прежнему выполняет задание, вы продолжаете его использовать. Инструмент, который вы хорошо знаете, лучше, чем инструмент, который вы не знаете!
Однако, если производительность является ключевой проблемой, и вы используете perl 5.10+, тогда рассмотрите Regexp::Grammars
.
Надежда Дэйва не против, но вот его первый Parse::RecDescent
пример из Data Munging с 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/