awk n-gram提取不正确

awk n-gram提取不正确,awk,extraction,Awk,Extraction,我目前正在编写一个awk脚本,它从输入文件中提取所有n-gram。 在一个文件上运行我的awk脚本时,它会打印出每一个n-gram(已排序),旁边有出现的次数。 在输入文件上进行测试时,它会打印出正确的n-gram顺序。只有出现的次数不正确。 对于提取n-grams,我有以下代码: $1=$1 line=tolower($0) split(line,chars,"") begin_len=0 for (i in chars){ ngram="" for (ind=0;in

我目前正在编写一个awk脚本,它从输入文件中提取所有n-gram。 在一个文件上运行我的awk脚本时,它会打印出每一个n-gram(已排序),旁边有出现的次数。 在输入文件上进行测试时,它会打印出正确的n-gram顺序。只有出现的次数不正确。 对于提取n-grams,我有以下代码:

$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
    }
}
相反,我有以下输出:

34845
1561   n
1302   en
1067   e
930    de
827     v
772    er
711     d
703    an
609    t
如您所见,n-gram是正确的,但出现的次数却不正确


输入文件:

我在你们班,这里有几个提示:

  • 复制精确的输入文件(使用github的克隆,不要进行原始复制)
  • 重读作业,你应该去掉前导和尾随空格,用一个空格替换所有多个制表符/空格

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

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

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

==> 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

如果没有输入fileNice代码很难说,但是请不要让我们想象发生了什么。考虑用一些示例输入数据、所需的输出和当前输出来编辑您的帖子,以演示问题。Good luck.input文件现在可用$1=$1解决了您在2)中描述的问题。当我有机会从github克隆时,我看不到进行原始拷贝的意义;-)无论如何,谢谢你的提示。$1=$1是否也能去掉句子中的多个空格/制表符?
==> 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
for (ngram in freq_tabel)
    printf "%7i %s\n", freq_tabel[ngram], ngram