首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk n-gram提取不正确

awk n-gram提取不正确
EN

Stack Overflow用户
提问于 2013-03-17 06:54:56
回答 2查看 368关注 0票数 0

我目前正在开发一个awk脚本,它可以从输入文件中提取所有的n-gram。当对一个文件运行awk脚本时,它会打印出每个n元语法(排序后)以及它旁边出现的次数。在对输入文件进行测试时,它会打印出n元语法的正确顺序。只有出现的次数不正确。为了提取n-gram,我有以下代码:

代码语言:javascript
复制
$1=$1   
line=tolower($0)
split(line,chars,"")
begin_len=0 
for (i in chars){
    ngram=""
    for (ind=0;ind<n;ind++){
        ngram=ngram""chars[i+ind]
    }
    if(begin_len == 0){ 
        begin_len=length(ngram)
    }
    if(length(ngram) == begin_len){ 
        counter+=1
        freq_tabel[ngram]+=1
    }
}

(未包含排序功能)我想知道代码中是否有错误。还是有一些我忽略了的方面?

我应该得到的输出如下:

代码语言:javascript
复制
35383
1580    n 
1323    en
1081    e 
940     de
839      v
780     er
716      d
713     an
615     t 

相反,我有以下输出:

代码语言:javascript
复制
34845
1561   n
1302   en
1067   e
930    de
827     v
772    er
711     d
703    an
609    t

如你所见,n-gram是正确的,但出现的次数不正确。

输入文件:http://cl.ly/202j3r0B1342

EN

回答 2

Stack Overflow用户

发布于 2013-03-18 05:42:50

没有答案,但可能会对你有所帮助(假设是n=2)。

您是否碰巧将原始文件(看起来像是UTF-8)转换成了拉丁文-1?我得到了两组数据:

代码语言:javascript
复制
==> sorted.latin1_in_utf8_locale <==
   1566 n 
   1308 en
   1072 e 
    929 de
    836  v

==> sorted.utf8_in_utf8_locale <==
   1579 n 
   1320 en
   1080 e 
    940 de
    838  v

使用拉丁语-1输入,数字与您的更接近。将utf-8转换为预期的值。

然而,两者都不匹配。抓我的头。

顺便说一句,我不是对脚本中的ngram进行排序,而是以适合将它们输出到sort -rn的形式输出。但我想,这应该不会造成不同。

代码语言:javascript
复制
for (ngram in freq_tabel)
    printf "%7i %s\n", freq_tabel[ngram], ngram
票数 1
EN

Stack Overflow用户

发布于 2013-03-17 18:46:53

我在你的班上,所以这里有几个提示:

  • 复制准确的输入文件(使用来自github的克隆,不做原始复制)
  • 重新读取分配,您应该去掉前导空格和尾随空格,并将所有多个制表符/空格替换为一个空格。

另外,上面的$1 = $1的意义是什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15455691

复制
相关文章

相似问题

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