NOTEPAD ++如何计算文本文件列表中的每个单词?

时间:2016-11-15 14:34:42

标签: regex count notepad++

我有一个textfile列表,其示例如下:

ALEX
MIKE
JOSHUA
AMBER
ALEX
ROBERT
CHRIS
ALEX
JOSHUA
MICHAEL
ROOGER
ALEX
AMBER

我想计算每个单词的写入次数。

示例:

alex (4)
MIKE (1)
JOSHUA (2) 
AMBER (2)
etc..

如何在记事本++中做到这一点?

2 个答案:

答案 0 :(得分:2)

没有内置词频率计数器。可用的RegExp操作不允许插入计数变量。

智能突出显示的构建仅显示实际线路的所有出现。查找对话框的count functionallity也是如此(匹配单词的所有实例,将显示count,然后重复)。对于简短的列表,这样的单步可能有效。

除非您要编写新插件或某些外部程序,否则使用网络服务可能是一种快速解决方案(Word Frequency CounterWordCounter)。

在Unix / Linux上,sort file.txt | uniq -c | sort -nr会提供预期的结果。

答案 1 :(得分:1)

虽然我不知道在不使用 Python 脚本或其他插件的情况下在通常的数字系统(例如十进制或二进制)中执行此操作的简单方法,但我认为我可以在 {{3} },我在这个过程中得到了一个免费的条形图:)

对于所有替换,选择“正则表达式”,“.匹配换行符”未选中;根据需要选中或取消选中“Match case”。

  1. 按“Edit -> Line Operations -> Sort Lines Lexicographically Ascending”订购行
  2. 将所有 ^ 替换为 1 以在每行开头加 1
  3. 将所有 1(.+)\R(?=1\1) 替换为 1 以删除重复项,同时保留 1s
  4. 将所有 ^(1*) 替换为 \1 以在计数后添加一个空格
  5. 或者,使用“Edit -> Line Operations -> Sort Lines Lexicographically Descending”按计数排序

我这样写是为了不将 AALEX 和 ALEX 处理为重复项,而且还使 Regex 可以一次性完成,而无需重复点击替换。

如果您的某些词以 1 开头,这显然不起作用;如果是这种情况,只需使用文本中未出现的其他字符作为计数字符即可。

我喜欢这种方法,在行首使用一元数,因为:

  1. 结果实际上是一个条形图
  2. 按照步骤 5 中提到的使用情况,可以轻松地对结果进行排序。
  • 如果您不需要第 1. 点和第 2. 点,并且希望在每行末尾添加数字,就像您的问题一样;将 ^(1*)(.+)$ 替换为 \2 \(\1\)
  • ,而不是上面的步骤 4. 和 5.
  1. 如果您需要查看十进制数而不是一元数(一元数一旦超过 4 或 5 就很难阅读),只需双击该数字,Notepad++ 状态栏就会以十进制显示,因为它显示选定的字符数(例如 Sel : 7
  2. 所有这些步骤都是可宏录制的,因此您可以一次完成并记录下来,然后随时使用快捷方式或从菜单中再次执行

因此,在您的示例中,这将给出:

1111 ALEX
11 JOSHUA
11 AMBER
1 ROOGER
1 ROBERT
1 MIKE
1 MICHAEL
1 CHRIS

或者:

ALEX (1111)
JOSHUA (11)
AMBER (11)
ROOGER (1)
ROBERT (1)
MIKE (1)
MICHAEL (1)
CHRIS (1)