如何用Python基于推特词字典生成单词存在性二进制表?
嘿,这事儿不难,我给你两种实现方案,一种是纯Python基础代码,不用额外装库;另一种用pandas,处理大量数据更顺手。
先明确前提
假设你已经有了全局单词列表(就是从所有推文中收集到的所有唯一单词,比如["Word1", "Word2", "Word3"]),另外你有一个文本文件(比如tweets_words.txt),每行对应一个推文的单词,用空格分隔,空行代表该推文没有目标单词。
方案1:纯Python基础实现(无第三方库)
这个方案适合不想装额外库的场景,代码直观易懂:
# 1. 定义全局单词列表(从你的字典里提取,比如 list(your_word_dict.keys())) all_words = ["Word1", "Word2", "Word3"] # 2. 读取推文单词文件 tweets = [] with open("tweets_words.txt", "r", encoding="utf-8") as f: for line in f: # 去除首尾空白,分割成单词列表(空行分割后是[]) tweet_words = line.strip().split() tweets.append(tweet_words) # 3. 生成二进制表 binary_table = [] # 先添加表头 binary_table.append(["推文ID"] + all_words) # 遍历每个推文生成二进制行 for tweet_id, tweet_words in enumerate(tweets, start=1): binary_row = [f"推文{tweet_id}"] for word in all_words: # 存在标1,不存在标0 binary_row.append(1 if word in tweet_words else 0) binary_table.append(binary_row) # 4. 输出结果 # 打印成易读的表格 print("二进制表结果:") for row in binary_table: print("\t".join(map(str, row))) # 保存为CSV文件(方便用Excel打开) import csv with open("binary_table.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(binary_table)
方案2:用Pandas实现(更简洁高效)
如果你的推文数量很多,用pandas处理会更省心,输出的表格也更规整:
import pandas as pd # 1. 全局单词列表 all_words = ["Word1", "Word2", "Word3"] # 2. 读取并处理推文数据 tweets_data = [] with open("tweets_words.txt", "r", encoding="utf-8") as f: for tweet_id, line in enumerate(f, start=1): # 转成集合方便快速判断存在性 tweet_words = set(line.strip().split()) # 生成当前推文的二进制字典 binary_dict = {word: 1 if word in tweet_words else 0 for word in all_words} binary_dict["推文ID"] = f"推文{tweet_id}" tweets_data.append(binary_dict) # 3. 转换成DataFrame并调整列顺序 df = pd.DataFrame(tweets_data) df = df[["推文ID"] + all_words] # 4. 输出结果 print("二进制表结果:") print(df.to_string(index=False)) # 保存为CSV或Excel df.to_csv("binary_table_pandas.csv", index=False, encoding="utf-8") # 如果需要Excel格式,先装openpyxl:pip install openpyxl # df.to_excel("binary_table_pandas.xlsx", index=False)
几个实用小提示
- 如果你的全局单词来自之前的统计字典,直接用
all_words = list(your_word_dict.keys())提取就行,要排序的话加个sorted() - 要是单词大小写不敏感(比如
Word1和word1算同一个),处理时统一转小写:# 全局单词转小写 all_words = [word.lower() for word in your_word_dict.keys()] # 推文单词也转小写 tweet_words = set(line.strip().lower().split()) - 如果你的推文文件格式不是每行一个,比如用特定分隔符(比如
---)分隔推文,只要调整读取逻辑就行~
内容的提问来源于stack exchange,提问作者Ravure
相关产品推荐
相关产品推荐

