免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Axin
打印 上一主题 下一主题

如何计算一个单词出现的次数 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-08-31 20:30 |只看该作者

如何计算一个单词出现的次数

awk也可以:
      1 echo "\"Is there a tree? Yeah, there is a tree. How green the tree is.\""
      2 echo "Is there a tree? Yeah, there is a tree. How green the tree is." \
      3 |awk -F" " '
      4 BEGIN{
      5     count=0;
      6 }
      7 {
      8     for(i=0;i<NF;i++){
      9         if($i~/Is/ || $i~/is/){
     10             if(length($i)==2){
     11                 count++;
     12             }else if(length($i==3)){
     13                 if(substr($i,1,1)!~/[a-zA-Z]/ || substr($i,3,1)!~/[a-zA-Z]/){
     14                     count++;
     15                 }
     16             }else{
     17                 continue;
     18             }
     19         }else{
     20             continue;
     21         }
     22     }
     23 }
     24 END{
     25     printf("There are %d \"is\" in this text.\n",count);
     26 }
     27 '

论坛徽章:
0
32 [报告]
发表于 2005-09-01 08:22 |只看该作者

如何计算一个单词出现的次数

原帖由 "yearnx" 发表:
我中午的时候用这个可以做了:

sed 's/ /\n/g' file | grep -c "^is&"


这个显然不行。

“is” 这个单词你肯定抓不住。

有一个问题:什么才是一个单词的标准?比如you're 这个简写有没有匹配you这个单词?

对于Unix本身的处理方式来说,他算是匹配了。

还有one-and-a-half 这个怪物也算匹配了单词and。

我们自己的标准又是?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
33 [报告]
发表于 2005-09-01 09:58 |只看该作者

如何计算一个单词出现的次数

摟主連單詞的判定都沒清楚, 那, 再設計怎麼寫命令, 都是多餘的...

论坛徽章:
0
34 [报告]
发表于 2005-09-01 10:04 |只看该作者

如何计算一个单词出现的次数

[quote]原帖由 "網中人"]摟主連單詞的判定都沒清楚, 那, 再設計怎麼寫命令, 都是多餘的...[/quote 发表:


同意 如果没有确定标准 任何解法都是徒劳 觉得有些时候是方法而不是知识出了问题

论坛徽章:
0
35 [报告]
发表于 2005-09-01 10:05 |只看该作者

如何计算一个单词出现的次数

我贴的sed办法,是针对你给出的文档的。
原帖由 "Axin" 发表:


这个显然不行。

“is” 这个单词你肯定抓不住。

有一个问题:什么才是一个单词的标准?比如you're 这个简写有没有匹配you这个单词?

对于Unix本身的处理方式来说,他算是匹配了。

还有one-and-a-hal..........


不过你提出的问题很对,我觉得解决这种文档的最好办法就是逐个排除特殊字符了。

Axin你有什么好办法么?

论坛徽章:
0
36 [报告]
发表于 2005-09-01 11:38 |只看该作者

如何计算一个单词出现的次数

我没有什么好办法。 

我觉得可能还是用作\bis\b过滤,

如果觉得is-xx这样的不算的话,那就再用grep -v 把这些带"-"的再过滤掉。。

and so on...

论坛徽章:
0
37 [报告]
发表于 2013-02-20 10:21 |只看该作者
刚好我也碰到这个问题,结果挖古董挖到这里。我分析了一下,其实计算单词很简单。正解如下:

Jackyz-MBP:~ jackyz$ echo "This is Chris , that is is-land" | tr ' ' '\n' | grep "^is$"
is
is
Jackyz-MBP:~ jackyz$ echo "This is Chris , that is is-land" | tr ' ' '\n' | grep "^is$" | wc -l
       2
Jackyz-MBP:~ jackyz$ echo "This is Chris , that is is-land" | xargs -n1 | grep "^is$"
is
is
Jackyz-MBP:~ jackyz$ echo "This is Chris , that is is-land" | xargs -n1 | grep "^is$" | wc -l
       2

论坛徽章:
0
38 [报告]
发表于 2013-02-20 10:35 |只看该作者
也许要考虑标点符号的问题,也就是必须以单词开头,以单词结尾或者单词后面加某些标点(例如,号和.号)。修订版本:

Jackyz-MBP:~ jackyz$ echo "This MerryChris is Chris, that Chris and Chris-Mas is Chris." |  tr ' ' '\n' | egrep "^Chris$|^Chris,|^Chris\."
Chris,
Chris
Chris.
Jackyz-MBP:~ jackyz$ echo "This MerryChris is Chris, that Chris and Chris-Mas is Chris." |  tr ' ' '\n' | egrep "^Chris$|^Chris,|^Chris\." | wc -l
       3
Jackyz-MBP:~ jackyz$ echo "This MerryChris is Chris, that Chris and Chris-Mas is Chris." | xargs -n1  | egrep "^Chris$|^Chris,|^Chris\."
Chris,
Chris
Chris.
Jackyz-MBP:~ jackyz$ echo "This MerryChris is Chris, that Chris and Chris-Mas is Chris." | xargs -n1  | egrep "^Chris$|^Chris,|^Chris\." | wc -l
       3

论坛徽章:
0
39 [报告]
发表于 2013-02-20 10:45 |只看该作者
本帖最后由 wwashington 于 2013-02-20 11:35 编辑

分词规则很复杂啊。我在^Chris$的基础上,补充了单词后面有标点、前面有标点、两边有单双引号的。如果-Chris和Chris-
也算,就是把-号当成单词的分隔符处理,用我最后完善的脚本来分析,可以随时修改中括号的标点内容,方便调整统计规则。

Jackyz-MBP:~ jackyz$ echo "This Merry-Chris and Merry-Chris-Eve is Chris, that Chris\'s \'Chris\' and Chris-Mas is Chris." | xargs -n1 | egrep "^Chris$|^Chris[,.']|[,.']Chris$|[\'\"]Chris[\'\"]"
Chris,
Chris's
'Chris'
Chris.
Jackyz-MBP:~ jackyz$ echo "This Merry-Chris and Merry-Chris-Eve is Chris, that Chris\'s \'Chris\' and Chris-Mas is Chris." | xargs -n1 | egrep "^Chris$|^Chris[,.'-]|[,.'-]Chris$|[\'\"-]Chris[\'\"-]"
Merry-Chris
Merry-Chris-Eve
Chris,
Chris's
'Chris'
Chris-Mas
Chris.

论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
40 [报告]
发表于 2013-03-07 09:33 |只看该作者
  1. awk 'BEGIN{RS=" |\n"}{if($0~/^is$/)a++}END{print a}'
复制代码
awk倒不是搞不定,就是放着现成的grep -wo不用没必要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP