首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Perl Text::Ngrams中所有ngrams的数组

如何获取Perl Text::Ngrams中所有ngrams的数组
EN

Stack Overflow用户
提问于 2013-05-07 15:37:01
回答 1查看 773关注 0票数 0

如您所知,Perl中的模块Text::Ngrams可以提供Ngram分析。下面的函数用于检索Ngrams和频率数组。

代码语言:javascript
复制
get_ngrams(orderby=>'ngram|frequency|none',onlyfirst=>NUMBER,out=>filename|handle,normalize=>1)

但它只给出了最后一个Ngram。例如,下面的代码没有同时提供Uni-Gram和Bi-Gram:

代码语言:javascript
复制
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";
}

输出:

代码语言:javascript
复制
T E
4
E X
2
_ T
2
E S
2
S T
2
X T
2
T _
2
T T
1

但是,通过使用函数

代码语言:javascript
复制
to_string(orderby=>'ngram|frequency|none',onlyfirst=>NUMBER,out=>filename|handle,normalize=>1,spartan=>1)

它同时显示了Ngram和Ngram。但只有它才能显示结果。我需要数组中的结果。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-07 17:44:15

您不可能同时获得所有不同大小的n元语法,但您可以通过多次调用get_ngrams来获取它们。get_ngrams有一个未记录的参数n,它说明了您想要列出的n元语法的大小。

在你的代码中,如果你说

代码语言:javascript
复制
my @ngramsarray = $ng3->get_ngrams(
  n => 1,
  orderby = >'frequency',
  onlyfirst => 10,
  normalize => 0);

你会得到这个列表

代码语言:javascript
复制
('T', 8, 'E', 4, 'X', 2, '_', 2, 'S', 2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16413679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档