如何自动执行此过程?
它包括重写的.htm改为.txt(输出文件)如何自动执行此过程?
然后用分析器(斯坦福语法分析器)(输出文件)
为目录中的所有文件。
我的问题:我想获取目录中的所有文件,而无需手动执行,并找到一种方法来运行解析器,而无需将它输入到每个文件的终端中。
这里是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use HTML::FormatText;
use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new->parse_file("chpt15Intro.htm");
use HTML::FormatText;
my $formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 1000);
#print $formatter->format($tree); is replaced by push
push (my @files, $formatter->format($tree));
foreach my $files (@files) {
$files =~ s/^\s+//mg;
open MYFILE, ">ch15Intro.txt";
select MYFILE;
print $files;
}
在的终端,让转换后的HTML文件后,我写:
script parsedch15Intro.txt ./lexparser.csh ch15Intro.txt
保存解析器的输出。这一步仍然需要自动化。
我是初学者,所以非常感谢您的任何建议。
我从你的问题中得知,你想要做的就是将这个脚本应用到某个文件夹中的所有(html-)文件,并输出它们的文本版本。
所以一个简单的解决方案是简单地用变量替换硬编码的文件名,并围绕@ARGV
(例如,脚本的参数如下:
for my $file (@ARGV) {
next unless ($file =~ /^(.+).html*$/i);
my $outfile = $1 . ".txt";
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($file); # credit to Phil for this one
my $formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 1000);
foreach my $files ($formatter->format($tree)) {
$files =~ s/^\s+//mg;
open my $fh, '>', $outfile or die $!;
print $fh $files;
}
}
正如你所看到的,我清理了一些它。使用像这样:
> script.pl *.htm
尝试更换6号线(my $tree = HTML::TreeBuilder->new->parse_file("chpt15Intro.htm");
)与此:
my $tree = HTML::TreeBuilder->new;
$tree->parse_file("chpt15Intro.htm");
的CPAN文档的HTML :: TreeBuilder作为不提什么parse_file
返回值,如果有的话,但我怀疑它的而不是该方法被调用的实例。这意味着在通话之后,您的$tree
变量没有任何意义。
非常感谢,我会看看如果这解决了我的一些问题 – Jon 2011-06-01 20:56:09
您可以通过命令行使用globbing传递多个文件,shell将扩展该文件。
./lexparser *.html
在.html结尾的所有文件名都是那么@ARGV
可用。如果您的脚本仅将文件名作为参数,只需循环使用@ARGV
以获取每个输入文件名,即可处理循环体中的输入文件。例如:
for my $in (@ARGV) {
my $out = $in;
$out =~ s/(\.html?)?$/.txt/;
...
}
如果你希望你的脚本来处理这些文件之前采取额外的选项(如设置扩展输出文件,或者设置输出文件的前缀或后缀),过程@ARGV
。您可以编写自己的option processor或使用Getopt
模块之一。
注意:“.csh”的扩展名表示C shell脚本。对于Perl,如果您想使用扩展名(通常没有必要,因为shebang行包含关于脚本类型的信息),请使用'.pl'。
不是一个Perl的解决方案,但你可以做到这一点作为一个班轮这个壳的管道,
假设
你有纯文本浏览器安装山猫(是可在Mac吗?)
-
且有SH您的系统上的外壳:
ls -1 mydir/*。html | xargs的-i SH -c “猞猁突降 '{}'> '{}的.txt'”
这造成在同一目录下一堆* .html.txt文件。和文本可能会根据您的要求
很酷的东西,感谢您的选择。我刚开始学习Perl,现在我也想学习shell脚本,功能强大! – Jon 2011-06-02 13:19:21
UPDATE将未格式化:这里是答案自动分析器:(类似于TLP和outis的解决方案)
#!/usr/bin/perl
use strict;
use warnings;
for my $file (@ARGV) {
next unless ($file =~ /^(.+).txt*$/i); ##file name ends in txt
my $outfile = "parsed$1".".txt";
qx/script -q \/Users\/jon\/Desktop\/stanford-postagger-full-2011-04-20\/$outfile \.\/lexparser.csh $file/;
}
##First in Terminal cd /Users/jon/Downloads/chpt1-8 or whichever directory this perl script and all texfiles and parser files are
##Called in Terminal by ==> perl auto_parse.pl *.txt
##This saves the output to directory spedicifed. The output is the parsed files
##Required: stanford parser files in same directory as this script
你到底想达到什么目的?你有什么困难?当寻求帮助时,说出你想要什么/期望以及你有什么/正在发生什么。除了您遇到的特定问题之外,请务必描述总体目标。阅读[“写完美的问题”](http://tinyurl.com/so-hints)以获取更多指导。 – outis 2011-06-01 19:32:33
@outis:对不起,我还在学习,我已经更新了这个问题,请告知我是否需要更多内容。 – Jon 2011-06-01 19:57:19
“my $ tree = HTML ...”的缩进让我有些失望。假设你没有做任何特别的事情,我很想念你,我会为你解答一些问题。 – Panky 2011-06-01 20:02:20