Дайте мне знать, если мне нужно сделать это более кратким, если у вас нет времени, просто ответьте на вопрос выше и пропустите следующие слова:
Я просто хотел, чтобы вы полностью поняли проблему.ОГРОМНОЕ СПАСИБО.
ПРЕДПОСЫЛКИ: Я делаю поисковую систему (это только небольшая часть кода ... поэтому она может быть чувствительной к изменениям ... не ваша проблема).Поисковая система должна выводить все предложения, соответствующие определенным критериям.Таким образом, если предложение включает правильные термины, оно будет помещено в подзаголовок, который находится под большим заголовком (заглавными буквами).Заголовок шапки отсортирован по алфавиту.Я хочу, чтобы подзаголовки были отсортированы по частоте.
ЦЕЛЬ: Я думал о сортировке по частоте, объединяя все соответствующие совпадения с подзаголовком, и затем каждый элемент подзаголовка с наибольшим идет первым.КАК МНЕ ЭТО СДЕЛАТЬ?(Например, $ array [0] и $ array [1] необходимо объединить)
АПОЛОГИЯ: Я новичок в Perl и на этом сайте, поэтому я не уверен, что этот формат слишком длинный ..Я уверен и сожалею, что мой код сырой, но он работает
ЗДЕСЬ МЫ ИДЕМ:
LEGEND1: $ sortedallgramfunc имеет вид: XCOMP
LEGEND2: $заголовки (подзаголовки) имеют вид: xcomp расходы: ход
LEGEND3: $ sentmatchesимеет форму: MATCH # 1 Отправлено.29 Чтобы приобрести эти органические молекулы, животные должны - потратить - энергию на переместить сами
Если подзаголовок также имеет МАТЧ №2, то он и все связанные с ним предложения должны быть напечатаныперед подзаголовком только с 1 совпадением
foreach my $sortedallgramfunc (@sortedallgramfunc) {
my @sepmatches; ## MOVED DOWN HERE TO TEST, MAYBE MOVE BACK depending on sol'n
print ("\n",uc $sortedallgramfunc,"\n\n");# Which gramfunc is being shown?
for (my $l=0; $l <= @headmatches; $l++) {
if (defined( $headmatches[$l] ) and $headmatches[$l] =~ /$sortedallgramfunc/) {
unless ($seenmatches{ $headmatches[$l] }++) {
push (@sepmatches, $headmatches[$l]);
my $count = 1;
my @allsents; ## use for all sents that go under heading, add to heading to get @allmatches
for (my $m=0; $m <= @sentmatches; $m++) {
if ( defined( $sentmatches[$m]) and $sentmatches[$m] =~ /\s\S\S$firstmatches[$l]\S\S\s/ and $sentmatches[$m] =~ /\s\S\S$secondmatches[$l]\S\S\s/) { ##We know $l and $m are matching
push (@allsents, "MATCH #$count $sentmatches[$m]"); # unless $seens{ $sentmatches[$m] }++);
$count++;
}
}
push (@sepmatches, @allsents);
##$sepmatches[0] is header, [1] is all sentences etc. EVEN - header, ODD - sent
## NOW WANT TO join headers and sentences (0 and 1 etc.) in @allmatches<====
# SO I can us the following line to hopefully sort by frequency of matches under each subheading: @sortedallmatches = sort {length $a cmp length $b } @allmatches;
}
}
}print @sepmatches;
}