ご存じのように、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) を同時に取得するにはどうすればよいですか?