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

如何为含推文词频的文本文件新增提取时间列?附现有代码

解决方案:给词频文件添加推文提取时间列

我来帮你搞定这个需求!核心是把时间数据和每条推文的词频对应起来,在输出文件的单词行末尾加上时间列名,再给每条推文的词频数据追加对应的提取时间。下面是修改后的完整代码,我会逐步解释关键改动:

修改后的完整代码

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
import operator

# 读取原始推文数据集
df = pd.read_csv('Twidb11.csv', error_bad_lines=False, sep='delimiter', engine='python')

# 读取存储推文提取时间的文件(假设每行对应一条推文的时间,顺序和df完全匹配)
with open('你的时间文件名.txt', 'r', encoding='utf-8') as time_file:
    tweet_times = [line.strip() for line in time_file.readlines()]

# 生成词频矩阵(优化:只执行一次fit_transform,避免重复计算浪费资源)
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(df.Text)
freq_matrix = X_train_counts.todense()

# 获取排序后的单词列表
words = count_vect.vocabulary_
sorted_words = sorted(words.items(), key=operator.itemgetter(1))

# 写入最终的词频+时间文件
with open('Twidb14.txt', 'w', encoding='utf-8') as output_file:
    # 第一步:写入所有单词,末尾追加时间列标题
    for word, _ in sorted_words:
        output_file.write(f"{word} ")
    output_file.write("TweetTime\n")  # 时间列的标题,可根据需求修改

    # 第二步:遍历每条推文的词频和对应时间,逐行写入
    for freq_row, time in zip(freq_matrix, tweet_times):
        # 将当前行的词频数组转换为空格分隔的字符串
        freq_str = ' '.join(map(str, freq_row.tolist()[0]))
        # 拼接词频和时间,写入文件
        output_file.write(f"{freq_str} {time}\n")

关键改动说明

  1. 安全读取时间数据:
    用with open上下文管理器读取时间文件,确保文件自动关闭;把每行时间存入列表,一定要保证时间文件的行数和推文数据集的行数完全一致,否则时间会和推文不匹配。如果你的时间文件是CSV格式,可以改用pd.read_csv读取后提取时间列。

  2. 优化词频计算:
    原代码中重复调用了count_vect.fit_transform(df.Text),这会重复执行特征提取,浪费资源。现在改成只调用一次,提升代码效率。

  3. 更可靠的文件写入模式:
    原代码用a(追加)模式写入,多次运行会导致文件内容重复。现在改用w(覆盖)模式直接生成新文件,避免冗余内容。

  4. 添加时间列标题:
    在所有单词写完后,追加TweetTime作为时间列的标题,让文件结构更清晰,后续处理也更方便。

  5. 逐行匹配词频和时间:
    遍历词频矩阵的每一行(对应一条推文的词频)和对应的时间,把词频转成字符串后和时间拼接,逐行写入文件,确保每条推文的词频数据后面都跟着正确的提取时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:57:36