1

我想将多字字符串项(存储在数组中)多次匹配为文本文件中的正则表达式。我还想创建一个哈希,其中匹配的项目作为键,出现次数作为它们的值(理想情况下按值排序)。这是我到目前为止所拥有的:

读入要匹配项目的文本文件:

open(FILE, "<file.txt") or die "cannot open file for reading: $!";
local $/ = undef;
my $inputfile = <FILE>;
close FILE;

遍历多词数组,将每个项目转换为正则表达式,然后匹配正则表达式$inputfile并创建出现的哈希:

foreach my $mwe (@mwelist) {
    my $mweregex = quotemeta($mwe);
    foreach ($inputfile =~ /($mweregex)/g) {
        #print STDOUT "$1\n\n";
        $mweinputfile{$mwe}++;
    }
}

@mwelist是一个包含字符串项的数组,每个字符串项是两个或更多单词。

现在代码不起作用 - 如果我取消注释打印命令,它只会在 shell 中给我空行(只是空行,没有空格)。

感谢任何指针/更正/建议,

这是输入数据的示例行(上面的 file.txt):

Sehr geehrter Herr Geißler, meine sehr geehrten Damen und Herren nicht nur hier im Saal sondern auch an den Bildschirmen!Wir möchte gern die Diskussion über die Schnellfahrstrecke Wendlingen-Ulm – und Herr Geißler, um auch da für Klarheit zu sorgen: Wenn wir von Neubaustrecke oder Schnellfahrstrecke reden, meinen wir dasselbe – diesese Diskussion möchte ich mit einem Überblick beginnen, der inform warum wir diese Schnellfahrstrecke vorsehen, was der verkehrliche Vorteil und der verkehrliche Nutzen ist, und darüber hinaus natürlich soll ein Überblick gegeben werden, warum sie genau so geplant und ausgeführt wird, wie sie hier dargestellt ist.

以下是一些示例@mwelist

...

在 gewissem Sinne

在格维森法伦

gewiß nicht

das weiß ich ganz gewiß

...

4

1 回答 1

1

好的 - 所以我已经改变了一些事情,希望能更好地处理这个问题。

我在原始文件中尝试了要匹配的单词,没有发现出现,所以我在文件中随机穿插了它们以给出一些输出:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

my $file1 =("in gewissem Sinne Herr Geißler, in gewissen Fällen geehrten Damen in gewissen Fällen nicht nur hier im Saal sondern auch an den Bildschirmen! Wir möchte gern die Diskussion über die Schnellfahrstrecke Wendlingen-Ulm – und Herr Geißler, um auch da für Klarheit zu sorgen: Wenn wir in gewissen Fällen oder Schnellfahrstrecke reden, meinen wir dasselbe – diese Diskussion gewiß nicht einem Überblick beginnen, in gewissen Fällen informiert, warum wir diese in gewissen Fällen vorsehen, was der verkehrliche Vorteil und der verkehrliche Nutzen ist, und darüber hinaus natürlich soll ein Überblick gegeben werden, warum sie genau so geplant und ausgeführt wird, wie sie hier gewiß nicht");

# my @input1 = split('\s+', $file1);
# print Dumper \@input1;
my @input2 =('in gewissem Sinne', 'in gewissen Fällen', 'gewiß nicht', 'das weiß ich ganz gewiß');
# my @input2 = split('\s+', $file2);

my %hash;
foreach my $line (@input2){
    while ($file1 =~ m/$line/g){
    $hash{$line}++;
    }       
}

print Dumper \%hash;

输出:

$VAR1 = {
          'gewiß nicht' => 2,
          'in gewissem Sinne' => 1,
          'in gewissen Fällen' => 5
        };
于 2013-10-08T10:19:24.887 回答