You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在文本文件中检索多个词汇并统计各词汇的出现次数

多词汇文本出现次数统计可行方案

下面给出不同场景下的可落地实现,默认所有方案都支持大小写敏感/不敏感自定义、以及整词匹配/子串匹配的调整。

方案1:Python 实现(跨平台,可自定义程度最高)

适合需要集成到其他代码、或者有复杂匹配规则的场景,示例代码如下:

from collections import defaultdict
import re

def count_keywords_in_file(file_path: str, keyword_list: list, case_sensitive: bool = False, whole_word: bool = False) -> dict:
    count_res = defaultdict(int)
    # 构建匹配模式
    flags = 0 if case_sensitive else re.IGNORECASE
    if whole_word:
        pattern = re.compile(r'\b(' + '|'.join(re.escape(k) for k in keyword_list) + r')\b', flags=flags)
    else:
        pattern = re.compile('|'.join(re.escape(k) for k in keyword_list), flags=flags)
    
    with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
        content = f.read()
        matches = pattern.findall(content)
        for match in matches:
            # 大小写不敏感的场景下统一转为小写统计
            key = match if case_sensitive else match.lower()
            count_res[key] += 1
    # 补齐出现次数为0的关键词
    for kw in keyword_list:
        count_key = kw if case_sensitive else kw.lower()
        if count_key not in count_res:
            count_res[kw] = 0
    return count_res

# 调用示例
if __name__ == "__main__":
    target_file = "test.txt"
    keywords = ["苹果", "香蕉", "橙子", "水果"]
    res = count_keywords_in_file(target_file, keywords, case_sensitive=False, whole_word=True)
    for kw, cnt in res.items():
        print(f"关键词「{kw}」出现次数:{cnt}")

注意:如果需要统计中文词汇的整词匹配,原生\b规则不生效,可以把整词匹配的模式换成先对文本做中文分词再匹配,或者调整为前后匹配非中英数字符的规则。

方案2:Shell 命令实现(Linux/macOS 无需额外装环境)

适合服务器上快速统计的场景,一行命令即可出结果:

# 把keyword1、keyword2替换成你要统计的关键词,test.txt替换为目标文件路径
for kw in keyword1 keyword2 keyword3; do echo -n "$kw 出现次数: "; grep -o "$kw" test.txt | wc -l; done
  • 要开启大小写不敏感,把grep -o换成grep -oi
  • 要开启整词匹配,把grep -o换成grep -ow

方案3:PowerShell 实现(Windows 原生支持)

适合Windows系统下不用装额外工具的场景:

# 定义关键词列表和目标文件路径
$keywords = @("关键词1","关键词2","关键词3")
$filePath = "test.txt"
$content = Get-Content $filePath -Raw -Encoding UTF8
foreach($kw in $keywords){
    $count = [regex]::Matches($content, [regex]::Escape($kw)).Count
    Write-Host "关键词「$kw」出现次数:$count"
}
  • 要开启大小写不敏感,把匹配规则改成[regex]::Matches($content, [regex]::Escape($kw), "IgnoreCase")
  • 要开启整词匹配,把匹配规则改成[regex]::Matches($content, "\b" + [regex]::Escape($kw) + "\b")

内容的提问来源于stack exchange,提问作者Shawna Lockard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:15:00