繁体   English   中英

perl:多次匹配文本文件中数组中的多词正则表达式项目

[英]perl: match multi-word regex items from array in a text file, multiple times

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

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

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是一个包含字符串项目的数组,每个字符串包含两个或更多个单词。

现在,该代码无法正常工作-如果我取消注释print命令,它只会在shell中给我空行(只是空行,没有空格)。

感谢您的任何指示/更正/建议,

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

Sehr geehrter HerrGeißler,Meine sehr geehrten Damen和Herren nicht nur hier im Saal sondern auch an den Bildschirmen! 威斯康星州的迪斯尼音乐学院,温德林根-乌尔姆–和赫尔·盖斯勒,以及克拉尔海特·祖尔根:温恩·维尔·冯·纽鲍斯特里克·奥德·施耐尔法斯特里克·迪恩Warum wir diese Schnellfahrstrecke vorsehen,是Verthrhrliche Vorteil und der Verkehrliche Nutzen ist,unddarüberhinausnatürlichsoll einüberblickgegeben werden,warum sie genau so geplant und awigeferhrt。

以下是@mwelist的一些示例:

...

在gewissem Sinne中

在gewissenFällen

gewißnicht

dasweißich ganzgewiß

...

好的-因此,我已进行了一些更改,希望可以更好地解决该问题。

我尝试在原始文件中尝试匹配的单词,但未发现任何匹配的单词,因此我将它们随机散布在文件中以提供一些输出:

#!/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
        };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM