Chinaunix

标题: 求句子各单词的字符串长度 [打印本页]

作者: wpd0508    时间: 2014-06-21 11:12
标题: 求句子各单词的字符串长度
比如“ In statistics, a power lar is a functional relationship between two quantities, where one quantity varies as a power of another" 这句话中,按顺序得到的单词的字母数序列是“ 2 10 1 5 3 2 1 10 12 7 3 10 5 3 8 5 3 8 6 2 1 5 2 7.  
将文件中的每一句话做一次这样的分析后,得到一长串的字数(x1,x2, x3, ... xn), 每一个数字代表一个单词的字母数(n 为文件中单词数),然后求平均值。
作者: zerostudy    时间: 2014-06-21 11:33
  1. awk '{for(i=1;i<=NF;i++){printf("%s ",length($i));sum+=length($i);};print sum/NF;sum=0 }' filename
复制代码

作者: 关阴月飞    时间: 2014-06-21 11:41
о:

  1. awk -F '[, ]+' '{for(i=0;++i<NF;){a=a" "length($i);n+=length($i)}print a,n/NR;a=n=b}' urfile
复制代码

作者: wpd0508    时间: 2014-06-21 11:44
大侠,我还想知道的是在SHELL脚本中怎么将纯文本提取出来然后利用这里的AWK,纯新手求解惑。回复 2# zerostudy


   
作者: 关阴月飞    时间: 2014-06-21 11:49
回复 4# wpd0508


    写文件或直接用管道传过来:

urshell >file && awk xxoo file
urshell |awk xxoo
作者: wpd0508    时间: 2014-06-21 12:11
  大侠,你能帮我处理一下这整个题目吗,对我感觉有很大的难度,谢谢了。
  对一个纯文本,其中的每一句话,你首先需要按顺序地得到这句话中每一个单词的字母数,比如“ In statistics, a power lar is a functional relationship between two quantities, where one quantity varies as a power of another" 这句话中,按顺序得到的单词的字母数序列是“ 2 10 1 5 3 2 1 10 12 7 3 10 5 3 8 5 3 8 6 2 1 5 2 7.
      这文件中的每一句话做一次这样的分析后,你会得到一长串的字数(x1,x2, x3, ... xn), 每一个数字代表一个单词的字母数(n 为文件中单词数)。接下去对这串字数进行进行求平均,得到  xbar.  将原来的数组与xbar做差,得以 ( X1, X2, X3,X4,X5 .... Xn),  其中Xi=xi-xbar.然后对数组[ Xi ] 做累加 得到 [ Y1, Y2, Y3,  ... Yn],  其中 Y1=X1, Y2=X1+X2, Y3=X1+X2+X3, ..., Yi = X1+X2+ ... + Xi.
  对以上得到的数组 [ Yi ]  以L个为单元进行分组, 即第一组为 [  Y1 Y2 Y3 ... YL].    对这L个数字进行最小二乘法拟合,得 Y=a1 x + a0, (这里的x为数组对应的下标数,即1~ L).
计算偏差量  E = sqrt( sum (Yi - (a1*xi +a0) )^2对其他单元进行一样的的计算,得到不同的不同的E_L_i。该尺度L下,统计的波动量 E_bar_L = mean( E_L_i)  用不同的L重复以上计算,得到相应的E_bar_L值。  

作者: Herowinter    时间: 2014-06-21 12:46
回复 6# wpd0508
统计、偏差、拟合。。。
Shell压力很大呀。。。
作者: wpd0508    时间: 2014-06-21 12:52
如果只是第一步怎么完美实现呢回复 7# Herowinter


   
作者: Herowinter    时间: 2014-06-21 13:08
回复 8# wpd0508
这个吗?应该可以做的,求个平均数再累加而已,
应该会有大神帮你做的。
  1. 这文件中的每一句话做一次这样的分析后,你会得到一长串的字数(x1,x2, x3, ... xn), 每一个数字代表一个单词的字母数(n 为文件中单词数)。接下去对这串字数进行进行求平均,得到  xbar.  将原来的数组与xbar做差,得以 ( X1, X2, X3,X4,X5 .... Xn),  其中Xi=xi-xbar.然后对数组[ Xi ] 做累加 得到 [ Y1, Y2, Y3,  ... Yn],  其中 Y1=X1, Y2=X1+X2, Y3=X1+X2+X3, ..., Yi = X1+X2+ ... + Xi.
复制代码

作者: kernel69    时间: 2014-06-21 16:35
  1. $ cat t.sh
  2. #!/bin/bash

  3. while read -a w;do
  4.         for i in ${w[*]};do
  5.                 s=${i//[ , .]/}
  6.                 echo -n "${#s} "
  7.         done
  8. echo
  9. done
  10. $ cat 2
  11. In stat,istics, a power lar is a functional. relationship between two quantities, where one quantity varies as a power of another
  12. In stat,istics, a power lar is a functional. relationship between two quantities, where one quantity varies as a power of another
  13. In stat,istics, a power lar is a functional. relationship between two quantities, where one quantity varies as a power of another
  14. $ ./t.sh < 2
  15. 2 10 1 5 3 2 1 10 12 7 3 10 5 3 8 6 2 1 5 2 7
  16. 2 10 1 5 3 2 1 10 12 7 3 10 5 3 8 6 2 1 5 2 7
  17. 2 10 1 5 3 2 1 10 12 7 3 10 5 3 8 6 2 1 5 2 7
  18. $
复制代码
回复 1# wpd0508


   
作者: ceasarchen    时间: 2014-06-21 17:17
用octave咯~~~~~句子要长长长长长~~~~~
作者: 银风冷月    时间: 2014-06-21 17:39
  1. [len(i.strip(',')) for i in "In statistics, a power lar is a functional relationship between two quantities, where one quantity varies as a power of another".split()]
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2