问题 哪些Perl模块有利于数据整理?


九年前,当我开始用Perl解析HTML和自由文本时,我读了经典 数据Munging与Perl。有人知道大卫是否打算更新这本书,或者是否有新的解析模块所用的类似书籍或网页 XML的嫩枝正则表达式文法等,解释?

我假设在过去九年中,一些模块仍然和它们一样好,有些模块是最新的,但有一些新的有趣方法,有些模块有更好的替代方法。例如,仍然是 解析-RecDescent的 自由文本解析的唯一选择或将受到影响的Perl 6 正则表达式文法 在许多情况下它的替代品?

我已经四年没有使用Perl进行有效的HTML,XML或自由文本数据挖掘了,所以我的工具包可能有点过时了。因此,对于与该领域当前CPAN模块最新的人员而言,HTML和DOM操作,链接提取/验证,Web测试(如Mechanize,XML操作和自由文本解析)的任何反馈都将受到欢迎。

我的工具包的一些新增内容:

还在我的工具箱中:


8815
2017-09-27 00:37


起源



答案:


它不太可能会出现第二版“带有Perl的Data Munging”。我担心经济学不会叠加。

但是,你是对的,自2001年以来技术已经走了很长一段路,而且有很多新的和改进的模块覆盖了与本书中讨论的模块大致相同的区域,例如,我不记得最后一个我使用XML :: Parser或XML :: DOM。这些天我似乎使用XML :: LibXML来完成我的大部分XML工作。当然,我对数据库的讨论还不完整,因为它没有提到DBIx :: Class。

也许通过一些帖子更新一些信息是一个有趣的想法 我的Perl博客。我会考虑一下。谢谢你的想法。


7
2017-09-27 07:34



一些细节可能已经改变,但概念是相同的。 :) - brian d foy
戴夫,很高兴有一天在你的博客上阅读这些评论和食谱。 - Pablo Marin-Garcia
是的,我也非常有兴趣阅读这些帖子。如果你最终在你的博客上发布了一些额外的更新,那就是超级。干杯! - blunders


答案:


它不太可能会出现第二版“带有Perl的Data Munging”。我担心经济学不会叠加。

但是,你是对的,自2001年以来技术已经走了很长一段路,而且有很多新的和改进的模块覆盖了与本书中讨论的模块大致相同的区域,例如,我不记得最后一个我使用XML :: Parser或XML :: DOM。这些天我似乎使用XML :: LibXML来完成我的大部分XML工作。当然,我对数据库的讨论还不完整,因为它没有提到DBIx :: Class。

也许通过一些帖子更新一些信息是一个有趣的想法 我的Perl博客。我会考虑一下。谢谢你的想法。


7
2017-09-27 07:34



一些细节可能已经改变,但概念是相同的。 :) - brian d foy
戴夫,很高兴有一天在你的博客上阅读这些评论和食谱。 - Pablo Marin-Garcia
是的,我也非常有兴趣阅读这些帖子。如果你最终在你的博客上发布了一些额外的更新,那就是超级。干杯! - blunders


回覆: Parse::RecDescent <=> Regexp::Grammars

达米安康威 有人引用说 Regexp::Grammars  是接班人  Parse::RecDescent。但即便如此 Parse::RecDescent 仍然为你完成工作然后继续使用它。你熟悉的工具比你不知道的工具更好!

但是,如果性能是一个关键问题而且您运行的是perl 5.10+,那么请考虑一下 Regexp::Grammars

希望戴夫不介意,但这是他的第一个 Parse::RecDescent 例子来自 数据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 /


4
2017-09-27 12:26



noun_phase = noun_phrase? - Mike
@Mike:很烦人,你无法从打印纸复制/粘贴到这里:)我发现了 s/noun_phase/noun_phrase/ - draegtun
当然“戴夫非常生气”并不是一个有效的判决。戴夫从不生气:-) - Dave Cross
@draegtun:+1非常感谢这个例子。我已经没有使用P :: RD 5年了,所以我需要再次阅读pod。因此,如果令牌,生产规则等的概念是相似的,那么从你的答案我认为用R :: G编写我的新解析器更明智,不是吗? - Pablo Marin-Garcia
@Pablo Marin-Garcia:如果我明天开始一个新的解析项目,那么我会选择R :: G.如果项目必须在5.10之前的perl上运行,我只会使用P :: RD。 - draegtun