Sam*_*son 12 language-agnostic code-golf text-parsing rosetta-stone
我已经用PHP为自己设计了这个解决方案,但我很好奇它是如何以不同的方式完成的 - 甚至更好.我最感兴趣的两种语言是PHP和Javascript,但我很想知道今天用其他主要语言(主要是C#,Java等)可以多快地完成这项工作.
额外信用
额外信用额度
*"果蝇在医学研究方面是一件好事.过去对果蝇进行了大量的研究,并取得了许多突破.未来,果蝇将继续研究,但是我们的方法可能会改变."*显然,这里的词是"果蝇",这对我们来说很容易找到.你的search'n'scrape脚本也可以确定吗?
源文:http://sampsonresume.com/labs/c.txt
答案格式
lio*_*ori 11
GNU脚本
sed -e 's/ /\n/g' | grep -v '^ *$' | sort | uniq -c | sort -nr
Run Code Online (Sandbox Code Playgroud)
结果:
7 be
6 to
[...]
1 2.
1 -
Run Code Online (Sandbox Code Playgroud)
出现大于X:
sed -e 's/ /\n/g' | grep -v '^ *$' | sort | uniq -c | awk '$1>X'
Run Code Online (Sandbox Code Playgroud)
只返回长度大于Y的单词(在第二个grep中放置Y + 1个点):
sed -e 's/ /\n/g' | grep -v '^ *$' | grep .... | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)
忽略像"和,是,等等"这样的常用术语(假设常用术语在文件中被"忽略")
sed -e 's/ /\n/g' | grep -v '^ *$' | grep -vf ignored | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)
在处理之前随意删除标点符号(即"John's"变为"John"):
sed -e 's/[,.:"\']//g;s/ /\n/g' | grep -v '^ *$' | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)
返回结果集合/数组:它已经像shell的数组:第一列是count,第二列是word.
perl -MYAML -anE'$_{$_}++for@F;say Dump\%_'
Run Code Online (Sandbox Code Playgroud)
以下是它的一个使用示例:
echo a a a b b c d e aa | perl -MYAML -anE'$_{$_}++for@F;say Dump \%_'
---
a: 3
aa: 1
b: 2
c: 1
d: 1
e: 1
Run Code Online (Sandbox Code Playgroud)
如果只需要列出小写版本,则需要两个以上的字符.
perl -MYAML -anE'$_{lc$_}++for@F;say Dump\%_'
Run Code Online (Sandbox Code Playgroud)
curl http://sampsonresume.com/labs/c.txt |
perl -MYAML -F'\W+' -anE'$_{lc$_}++for@F;END{say Dump\%_}'
Run Code Online (Sandbox Code Playgroud)
real 0m0.679s user 0m0.304s sys 0m0.084s
这是扩展了一下的最后一个例子.
#! perl
use 5.010;
use YAML;
while( my $line = <> ){
for my $elem ( split '\W+', $line ){
$_{ lc $elem }++
}
END{
say Dump \%_;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |