Сравните два файла с английскими и японскими данными - PullRequest
0 голосов
/ 15 апреля 2011

Меня просят сравнить два файла, которые содержат информацию на японском и английском языках. Я использую медленный подход, читаю два файла и помещаю их в два массива, а затем использую цикл 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";
   }
}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

Если вы работаете в Linux, вы можете написать сценарий оболочки, который сортирует файлы, а затем использует программу 'uniq'.Сортировка больших файлов в первую очередь позволяет сравнивать их, не считывая все файлы в память.

0 голосов
/ 15 апреля 2011

Я не понимаю, как хеш-таблица поможет вам в поиске подстрок. Тем не менее, это хорошо для точных совпадений.

Если ваша память не является ограничением, возможно, вы могли бы построить дерево суффиксов из всех записей файла A, что обеспечило бы вам очень быстрое O(N) время поиска для записей файла B.

...