2014-02-13 58 views
0

列表“匹配的号码”我有一个文件中的文本格式如下:创建使用python

[NP mr. speaker ] , [NP mr. vice president ] , [NP members ] [PP of ] [NP congress ] [NP my fellow ] [VP americans ] : [NP today ] 

我想获得与显示使用NP的它匹配的数量列表,按降序排列。要清楚,文中可能有很多NP,[NP先生。说话人]可能会在文中出现5次,[NP先生。副主席]可能会在文中出现6次......等等。我想找到所有这些比赛的频率。

输出应该像这样:

6 [NP mr. vice president ] 

5 [NP mr. speaker ] 

任何想法如何去了解呢?我很确定python中的正则表达式会有所帮助,但我迷失于我的表达应该看起来像以及如何将这些匹配放在列表中。

+0

正在使用python的一个要求,或者只是你认为可能会帮助你的东西? –

+0

python不是必需的,shell工具可以工作 – user2951046

回答

0

这里不需要python,基本的shell工具就是你所需要的。

grep -o '\[NP[^]]*]' input.txt | sort | uniq -c | sort -rg 

如果您需要在括号中间检查NP,你需要稍微调整

grep -o '\[[^]]*NP[^]]*]' test.in | sort | uniq -c | sort -rg 
+0

得到这个错误:-bash:%:找不到命令 – user2951046

+0

'%'是命令提示符,你可能会看到'$'。不要包含它。 – Kevin

+0

感谢第一个人的工作,但它没有按照匹配数量的降序给出,从我可以看到其根据字母表的升序排列... – user2951046

0

您可以在Python中使用reCounter

In [150]: from collections import Counter 
    ...: import re 
    ...: s='[NP mr. speaker ] , [NP mr. vice president ] , [NP members ] [PP of ] [NP congress ] [NP my fellow ] [VP americans ] : [NP today ]' 
    ...: c=Counter(re.findall('\[[ .\w]*\]', s)) 
    ...: 

In [152]: c['[NP mr. speaker ]'] 
Out[152]: 1 

要按降序排列按键:

In [156]: sorted(c, key=c.get, reverse=True) 
Out[156]: 
['[NP members ]', 
'[NP mr. speaker ]', 
'[NP congress ]', 
'[PP of ]', 
'[VP americans ]', 
'[NP my fellow ]', 
'[NP mr. vice president ]', 
'[NP today ]']