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

如何统计字符串列表中各目标短语出现次数并识别对应匹配短语?

解决目标短语出现次数的统计问题

你的现有代码只能得到每行的总匹配数,要统计每个目标短语的具体出现次数,可以用以下两种方案实现:

方案1:为每个短语单独统计(支持按行查看次数)

这种方法会为每个目标短语生成一列,记录每行文本中该短语的出现次数,同时可以汇总全局总次数。

import pandas as pd
import re

# 读取文本数据(优化原代码的换行处理)
full_text = []
with open("hindu_texts.txt", encoding='utf-8') as myfile:
    for line in myfile:
        line = line.split("~")
        current = line[1].strip()  # strip()一次性去掉换行和前后空白,比多次replace简洁
        full_text.append(current)

# 读取神的列表(优化空行判断)
list_gods = []
with open("C:/Users/Owner/Documents/Fall_2022/hindu_gods.txt", encoding='utf-8') as myfile:
    for line in myfile:
        stripped_line = line.strip()
        if '~' not in stripped_line and stripped_line:
            list_gods.append(stripped_line)

text_data = pd.DataFrame({'words': full_text})

# 循环统计每个神的出现次数
for god in list_gods:
    # re.escape处理短语中的特殊字符(比如带点、括号的名字),避免正则语法错误
    # \b 确保匹配完整单词(可选,去掉则会匹配子串,比如"Ram"会匹配"Rama")
    # flags=re.IGNORECASE 忽略大小写(可选,根据需求调整)
    text_data[god] = text_data['words'].str.count(
        rf'\b{re.escape(god)}\b', 
        flags=re.IGNORECASE
    )

# 输出每个神的全局总出现次数(按次数降序)
god_total_counts = text_data[list_gods].sum().sort_values(ascending=False)
print(god_total_counts)

# 如果需要查看每行的具体匹配次数,直接输出text_data即可
# print(text_data)

方案2:提取所有匹配短语后统计(快速全局统计)

这种方法先提取每行中所有匹配的短语,再通过展开列表统计每个短语的总次数,同时能看到每行具体匹配了哪些短语。

import pandas as pd
import re

# 读取数据部分同方案1,省略...

# 构建正则模式:包裹每个短语,处理特殊字符,可选添加单词边界
pattern = r'\b(' + '|'.join(re.escape(god) for god in list_gods) + r')\b'

# 提取每行所有匹配的短语,返回列表格式
text_data['matches'] = text_data['words'].str.findall(pattern, flags=re.IGNORECASE)

# 展开匹配列表,统计每个短语的全局出现次数
all_matches = text_data['matches'].explode().dropna()  # 去掉空匹配的行
god_total_counts = all_matches.value_counts()
print(god_total_counts)

# 查看每行的原文本和匹配到的短语
print(text_data[['words', 'matches']])

注意事项

  • 单词边界\b:如果你的目标短语包含空格(比如"Lord Shiva"),\b会失效,此时可以去掉\b,或者用(?<!\S)和(?!\S)来匹配短语的前后空白/字符串边界。
  • 大小写匹配:如果不需要区分大小写,保留flags=re.IGNORECASE;如果严格区分,去掉该参数。
  • 特殊字符处理:re.escape必须保留,否则短语中的正则特殊字符(如.、*)会导致匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:15:29