Сортировать результаты по словам, встречающимся в массиве из grep(Perl)

Любое простое решение, поддерживаемое Perl, которое может сортировать результаты на основе слов, встречающихся в массиве из grep?

Например, у вас есть база данных, которая получает результаты из массива grep, и вы хотите сначала отобразить результаты с наиболее повторяющимся словом, которое совпадает.

Как поисковая система, которая выдает результаты по релевантности.

Существует ли это в Perl, как в этом выражении:

@array_relevance = grep(/given_term/i, @old_array);

or

@array_relevance = grep{$_ =~ /given_term/i}@old_array;

где @array_relevance сначала показывает результаты, где «данный_термин» встречается чаще всего (например, 5 раз), а затем показывает результаты, где «данный_термин» встречается меньше всего (4,3,2,1 раз) по убыванию.

Я имею в виду, что «@old_array» — это данные, содержащие несколько строк, и это база данных, которая находится в текстовом файле, где есть заголовки, описания, время отправки сообщения и т. д.

Пример @old_array:

@old_array = "Title:Best marketing firm, Description:Check us out, we have many products which are innovative, Time of post:14:05:2015";

Затем @array_relevance с grep выбирает свое содержимое, которое запрошено, сначала показывая результаты, которые содержат наибольшее количество одинаковых терминов по убыванию.

Надеюсь понятно.


person Community    schedule 18.08.2015    source источник
comment
См. Как в Perl сортировать по частоте значения?   -  person Håkon Hægland    schedule 18.08.2015
comment
Похоже, что @old_array в вашем примере содержит только один элемент. Какова тогда цель grepping?   -  person Håkon Hægland    schedule 19.08.2015


Ответы (1)


Без каких-либо данных сложно точно определить, что вам нужно, но попробуйте следующее:

use warnings;
use strict;

my @old = qw(nine one one one two three three);
my @given_terms = qw(one two three);

my %seen;
%seen = map {$_ => ++$seen{$_}} @old;

print "$_\n" for sort {$seen{$b} <=> $seen{$a}} @given_terms;
person stevieb    schedule 18.08.2015
comment
Разве построение %seen без цикла for не имело бы больше смысла, поэтому вы не повторяете @old несколько раз? А потом делать сортировку по @given_terms, а не по keys? - person Sobrique; 18.08.2015
comment
Да, спасибо, Собрик. Я смотрел на проблему с обратной стороны. - person stevieb; 18.08.2015