String 连接字符串

String 连接字符串,string,algorithm,perl,String,Algorithm,Perl,我的算法设计有一个大问题,因为我使用的是大文本文件。 我有一个包含单词序列的文本文件。 乙二醇 我的朋友们 你好,我的朋友们 世界 第二个文件是包含句子的大文件(GB)。 该程序的目标是通过单词(第一个文件)逐字查找,并在第二个文件中连接符号“+” 比如说 “你好,我的世界朋友们”作为输入成为 “你好+我的+朋友们来自这个+世界” 有什么想法吗? 我想用Perl来编程,Perl是用文本执行的 我已经用Perl编写了这个脚本,但速度太慢,因为它多次读取文件..:( 这是Perl程序的一个例子,它可

我的算法设计有一个大问题,因为我使用的是大文本文件。 我有一个包含单词序列的文本文件。 乙二醇

  • 我的朋友们
  • 你好,我的朋友们
  • 世界
  • 第二个文件是包含句子的大文件(GB)。 该程序的目标是通过单词(第一个文件)逐字查找,并在第二个文件中连接符号“+”

    比如说 “你好,我的世界朋友们”作为输入成为 “你好+我的+朋友们来自这个+世界

    有什么想法吗? 我想用Perl来编程,Perl是用文本执行的

    我已经用Perl编写了这个脚本,但速度太慢,因为它多次读取文件..:( 这是Perl程序的一个例子,它可以工作,但是太慢了

    use strict;
    use warnings;
    use utf8;
    use feature qw(:5.10); 
    my ($in, $dico) = @ARGV;
    die "Bad infile $in" if !-r $in;
    die "Bad dicofile $dico" if !-r $dico;
    
    # load dico
    my @dico;
    open(FICHIERNOUVELLES, ">resultat7.txt");
    open my $DICO, "<", $dico or die "Can't open $dico for reading: $!\n";
    # For all lines in the Dico
    foreach my $line (<$DICO>) {
    chomp($line);
    # extract words
     if (my @word = split /\s+/, $line) {
    
     my $re = q{(^\s*|\s+)(}.(join q(\s+), map quotemeta, @word).q{)(\s+|\s*$)};
    
    push @dico, qr/$re/;
    }
    }
    
     open my $IN, "<", $in or die "Can't open $in for reading: $!\n";
     my @word;
    
    foreach my $line (<$IN>) {
    
     foreach my $dico (@dico) {
    
      while (my (undef, $sequence) = $line =~ /$dico/) {
    
      $sequence =~ s/\s+/+/g;
      $line =~ s/$dico/$1$sequence$3/;
      }
     }
    print FICHIERNOUVELLES "$line";
    
     }
    close(FICHIERNOUVELLES);
    
    使用严格;
    使用警告;
    使用utf8;
    使用功能qw(:5.10);
    my($in$dico)=@ARGV;
    死“坏填充$in”如果!-r$in;
    死“坏的迪科菲尔$迪科”如果!-r$迪科;
    #加载dico
    我的@dico;
    打开(FICHIERNOUVELLES,“>resultat7.txt”);
    
    打开我的$DICO,“不多次读取第二个文件的解决方案是先从file1读取单词集,然后存储在数据结构中

    use File::Slurp;
    my @lines = read_file($filename1);
    my %replacements = map { my $c = $_; $c =~ s/ / + /g; ( $_ => $c ) } @lines; 
    
    open (my $file2, "<", $filename2) or die "$!";
    while (<$file2>) {
        chomp;
        foreach my $replacement (keys %replacements) {
            s/$replacement/$replacements{$replacement}/g;
        }
        print $_;
    }
    
    使用File::Slurp;
    my@lines=read_文件($filename1);
    my%replacements=map{my$c=$\uz;$c=~s/+/+/+g;($\u=>$c)}@lines;
    
    打开(我的$file2,"这是我对你问题的理解。第一个文件有一组单词,第二个文件有句子。在第二个文件中出现的每个单词之后,你必须添加+符号。我说的对吗?你能给我们看看你的代码吗?还有两个输入文件的一个简单示例,以及这些输入文件的输出应该是什么样子的?谢谢,我是dit我的postOK,我想我明白了…他想在第二个文件中找到字符串(定义在文件1中),并在第二个文件中用“+”替换该字符串的每个实例。是的,它是,它将单词与“+”合并,我将通过减少长度对%替换进行排序:
    对于每个$replacement(sort{length($b)length($a)}键(%replacements))
    。这样,“你好,我的朋友”将在“我的朋友”之前匹配首先,谢谢你的帮助,我测试了你的脚本,但是有错误uuu./test.pl:ligne 1:use:commande introvable./test.pl:ligne 2:use:commande introvable./test.pl:ligne 3:use:commande introvable./test.pl:ligne 4:Erreur de syntax prèdu symbole inattendu(»./test.pl:ligne 4:`use feature qw(:5.10)“-@user17241:您是否在开始时添加了行
    #!/usr/bin/perl
    (或您拥有的任何perl路径)?您可能没有安装File::Slurp。@user17241-您可以很容易地用
    my@lines;open(my$f)模拟read_文件(如果您不想对File::Slurp进行故障排除)