微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较两个文件的英文和日文数据

如何解决比较两个文件的英文和日文数据

| 我被要求比较两个包含日语和英语信息的文件。我使用一种慢速的方法,读取两个文件并将它们放入两个数组中,然后使用while循环检查File_B的术语是否在File_A的行内。 File_A: 这是个男孩。 ハンカ 她是个女孩子。 我是男人 这个苹果很大。 那橘子很小。 File_B: 是一个 ハンカ 小 输出: 我是男人 这个苹果很大。 我写的程序效果很好。但是,我正在处理的文件非常大。如果我使用这样的循环,运行时间太慢了。我的朋友告诉我,我可以将文件放入散列中,它将更快地运行。我可以看到使用它的要点,但是我拥有的文件随机的,而且File_B中的术语可以在File_A的任何部分中。以前的一些文章建议我可以使用File_A的行拆分,将行放入哈希并将其与File_B进行比较(也将File_B放在另一个哈希中)。但是,除了使用〜//来检查该行是否得到术语,我不知道该怎么做。
open(A_FILE,\"<\",\"FILE_A.txt\");
my(@a_lines) = <A_FILE>; # read file into list
close(A_FILE);
open(B_FILE,\"FILE_B.txt\");
my(@b_lines) = <B_FILE>; # read file into list
my($b_lines);
close(B_FILE);
open(my $out,\">\",\"Useful.txt\") or die \"Can\'t open Useful.txt: $!\";
$number = @b_lines;

foreach $a_line (@a_lines) # loop thru list
{
   $found = 0;
   my $sentence = $a_line;
   $i = 0;
   chomp($sentence);
   while (($i <= $number-1) and ($found == 0)){
       chomp($b_lines[$i]);
       if ($sentence =~ /$b_lines[$i]/){
           $found = 1;
       }
       $i++;
   }

   if ($found == 1) {
       print $out $sentence.\"\\n\";
   }
}
    

解决方法

我看不到哈希表如何帮助您搜索子字符串。不过,这对于精确匹配很有用。 如果您的内存不是一个限制,那么也许您可以从所有File A条目中构建一个后缀树,这将为您在File B条目上提供非常快的
O(N)
搜索时间。     ,如果您在Linux上运行,则可以编写一个shell脚本对文件进行排序,然后使用\'uniq \'程序。首先对大型文件进行排序,使您可以比较它们,而无需将整个文件读入内存。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。