如何用Python统计文本中同时包含两个集合各至少一个元素的文章占比
实现思路
- 先预定义两个关键词集合,利用集合O(1)的查找特性提升匹配效率
- 读取新闻文本文件,按实际存储的文章分隔规则拆分出单篇文章(默认按每篇占一行处理,如有其他分隔规则可调整拆分逻辑)
- 遍历每篇文章,依次校验两个匹配条件:是否包含Set1的至少一个元素、是否包含Set2的至少一个元素
- 统计同时满足两个条件的文章数量,通过「符合条件数/总文章数*100」计算得到占比百分比
参考代码
# 1. 定义两个关键词集合 set1 = {"apple", "orange", "grape", "banana", "fruit"} set2 = {"doctor", "medicine", "health", "sick"} # 2. 初始化统计变量 total_articles = 0 match_articles = 0 # 3. 读取新闻文件,逐篇校验 # 注意替换下方的news.txt为你实际的新闻文件路径 with open("news.txt", "r", encoding="utf-8") as f: for article in f: # 跳过空行 article = article.strip() if not article: continue total_articles += 1 # 校验是否同时匹配两个集合的关键词 has_set1 = any(keyword in article for keyword in set1) has_set2 = any(keyword in article for keyword in set2) if has_set1 and has_set2: match_articles += 1 # 4. 计算占比 if total_articles == 0: percentage = 0 else: percentage = (match_articles / total_articles) * 100 # 输出结果 print(f"总文章数:{total_articles}") print(f"符合条件的文章数:{match_articles}") print(f"占比:{percentage:.2f}%")
可选调整说明
- 如果需要忽略大小写匹配,可以把校验逻辑改成
any(keyword.lower() in article.lower() for keyword in set1)即可 - 如果你的新闻文件不是每篇占一行,而是用特殊分隔符(比如
---)分隔文章,可以先读取整个文件内容再用对应分隔符拆分得到文章列表
内容的提问来源于stack exchange,提问作者Dan Bachrach
相关产品推荐
相关产品推荐

