You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

请求优化Python实现CSV文章标题词频统计的现有代码

优化后的简洁实现方案

嘿,你的代码已经能完美完成需求啦,但我们可以借助Pandas的矢量化特性和更Pythonic的写法,让它变得更简洁高效,可读性也更强。下面是优化后的版本,我会顺便拆解一下核心优化点:

优化后的代码

import pandas as pd

# 读取数据
df = pd.read_csv("Article_titles.csv")
print(df.head(10))

# 配置停用词(转成集合,查找效率更高)和特殊字符正则
stop_words = {"at","of","a","and","in","for","the","to","with","on","using","an","after","from","by","use","review","upper","new","system"}
remove_chars_pattern = r"[.:,-%()[]?']"

# 一步完成标题清洗、分词、过滤停用词
clean_word_series = (
    df["Title"]
    .dropna()  # 处理可能存在的空标题
    .str.lower()
    .str.replace(remove_chars_pattern, "", regex=True)
    .str.split(expand=True)
    .stack()  # 将所有拆分后的单词合并为一个一维序列
    .loc[lambda word: word not in stop_words]
)

# 统计词频并整理成目标格式
word_count_df = clean_word_series.value_counts().reset_index()
word_count_df.columns = ["Keyword", "Count"]

print(word_count_df.head(50))

主要优化点说明

  • 替换循环为矢量化操作:原代码用for循环逐个处理标题,Pandas的str系列方法可以批量处理整列数据,不仅速度更快,代码也更简洁。
  • 停用词用集合存储:集合的成员查找是O(1)时间复杂度,比列表的O(n)快很多,尤其是当停用词数量较多时优势明显。
  • 正则简化特殊字符移除:用正则表达式一次性匹配所有要移除的特殊字符,比translate写法更直观易读,后续修改特殊字符列表也更方便。
  • stack()扁平化分词结果:拆分标题后会得到多列数据,stack()能把这些列的单词全部合并成一个一维序列,省去了手动拼接字符串的步骤。
  • 直接用value_counts()统计:Pandas内置的value_counts()可以直接统计序列中元素的出现次数,省去了手动调用Counter再转DataFrame的繁琐流程。

如果需要更进阶的处理(比如处理连字符单词、复数形式归一化等),还可以结合NLTK或SpaCy的分词工具,但针对你当前的需求,上面的代码已经足够简洁高效啦。

内容的提问来源于stack exchange,提问作者Jesper Mølgaard

火山引擎 最新活动