0

如您所知,Perl 中的Text::Ngrams模块可以对 Ngrams 进行分析。有以下函数来检索 Ngram 和频率数组。

get_ngrams(orderby=>'ngram|frequency|none',onlyfirst=>NUMBER,out=>filename|handle,normalize=>1)

但它只给出最后的 Ngram。例如,以下代码不会同时给出 Uni-Gram 和 Bi-Gram:

my $ng3 = Text::Ngrams->new( windowsize => 2, type=>'byte');
my $text = "test teXT TESTtexT";

$text =~ s/ +/ /g; # replace multiple spaces to single
$text = uc $text; # uppercase all

$ng3->process_text($text);
my @ngramsarray = $ng3->get_ngrams(orderby=>'frequency', onlyfirst=>10, normalize=>0 );
foreach(@ngramsarray)
{
    print "$_\n";
}

输出:

T E
4
E X
2
_ T
2
E S
2
S T
2
X T
2
T _
2
T T
1

但是通过使用该功能

to_string(orderby=>'ngram|frequency|none',onlyfirst=>NUMBER,out=>filename|handle,normalize=>1,spartan=>1)

它显示了两个 Ngram。但只有它显示结果。我需要数组中的结果。

如何通过这个数组同时获取所有 Ngram(Unigram 和 Bigram)?

4

1 回答 1

0

您不能同时获得所有不同大小的 n-gram 但您可以通过多次调用来获得它们get_ngrams。有一个未记录的参数表示您想要列出的 n-gram 的大小nget_ngrams

在您的代码中,如果您说

my @ngramsarray = $ng3->get_ngrams(
  n => 1,
  orderby = >'frequency',
  onlyfirst => 10,
  normalize => 0);

你得到这份清单

('T', 8, 'E', 4, 'X', 2, '_', 2, 'S', 2)
于 2013-05-07T09:44:15.277 回答