我在这种格式的文件中有文字:
[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 :(得分:0)
这里不需要python,只需要基本的shell工具。
grep -o '\[NP[^]]*]' input.txt | sort | uniq -c | sort -rg
如果你需要检查大括号中间的NP
,你需要稍微调整一下
grep -o '\[[^]]*NP[^]]*]' test.in | sort | uniq -c | sort -rg
答案 1 :(得分:0)
您可以在python中使用re
和Counter
:
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 ]']