【发布时间】:2011-07-08 05:17:57
【问题描述】:
我有需要从中删除停用词的文本文件。我将停用词存储在文本文件中。我将“停用词”文本文件加载到我的 Perl 脚本中,并将停用词存储在一个名为“stops”的数组中。
目前我正在加载一组不同的文本文件,并将它们存储在一个单独的数组中,然后进行模式匹配以查看是否有任何单词确实是停用词。 我可以打印停用词并知道文件中出现了哪些停用词,但是如何将它们从文本文件中删除并存储一个新的文本文件以使其没有停用词?
即停用词: 这 一种 到 的 和 进入
文本文件: “女孩开车撞到男人”
结果文件: 女孩开着撞车的男人
我将文件加载到:
$dirtoget = "/Users/j/temp/";
opendir( IMD, $dirtoget ) || die("Cannot open directory");`
@thefiles = readdir(IMD);`
foreach $f (@thefiles) {
if ( $f =~ m/\.txt$/ ) {
open( FILE, "/Users/j/temp/$f" ) or die "Cannot open FILE";
while (<FILE>) {
@file = <FILE>;
这是模式匹配循环:
foreach $word(split) {
foreach $x (@stop) {
if ($x =~ m/\b\Q$word\E\b/) {
$word='';
print $word,"\n";
将$word 设置为空。
或者我可以这样做:
$word = '' if exists $stops{$word};
我只是不确定如何将输出文件设置为不再包含匹配的单词。 将不匹配的单词存储在数组中并将它们输出到文件中是愚蠢的吗?
【问题讨论】:
标签: regex arrays perl split pattern-matching