如何为含推文词频的文本文件新增提取时间列?附现有代码
解决方案:给词频文件添加推文提取时间列
我来帮你搞定这个需求!核心是把时间数据和每条推文的词频对应起来,在输出文件的单词行末尾加上时间列名,再给每条推文的词频数据追加对应的提取时间。下面是修改后的完整代码,我会逐步解释关键改动:
修改后的完整代码
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")
关键改动说明
安全读取时间数据:
用with open上下文管理器读取时间文件,确保文件自动关闭;把每行时间存入列表,一定要保证时间文件的行数和推文数据集的行数完全一致,否则时间会和推文不匹配。如果你的时间文件是CSV格式,可以改用pd.read_csv读取后提取时间列。优化词频计算:
原代码中重复调用了count_vect.fit_transform(df.Text),这会重复执行特征提取,浪费资源。现在改成只调用一次,提升代码效率。更可靠的文件写入模式:
原代码用a(追加)模式写入,多次运行会导致文件内容重复。现在改用w(覆盖)模式直接生成新文件,避免冗余内容。添加时间列标题:
在所有单词写完后,追加TweetTime作为时间列的标题,让文件结构更清晰,后续处理也更方便。逐行匹配词频和时间:
遍历词频矩阵的每一行(对应一条推文的词频)和对应的时间,把词频转成字符串后和时间拼接,逐行写入文件,确保每条推文的词频数据后面都跟着正确的提取时间。
内容的提问来源于stack exchange,提问作者kavya sharma
相关产品推荐
相关产品推荐

