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