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

Python读取文本行追加情感标签后文件为空问题求助

嘿,别担心,新手遇到这种问题太正常啦!我帮你排查下代码里的几个关键问题,看完你就能解决啦~

问题分析

  1. 文件打开模式错误
    你用open("test.txt", "r")打开文件,这是只读模式,根本没法往里面写入内容!就算强行调用write(),程序会直接报错,更别说修改文件了。而且就算改成读写模式r+,同时读写同一个文件也容易因为指针位置混乱导致内容丢失或错乱。

  2. 情感判断逻辑不符合需求
    你现在是遍历句子里的每个单词,每个单词判断后都往文件里写,但这样会把每个单词的结果堆在一起,完全不是你想要的“每行末尾追加整体情感”的效果。我们应该统计整句话里的正负情感词数量,最终判断整句的倾向。

  3. 未保留原句内容
    你的代码里没有把原句子写入文件,就算能写入情感结果,原句也丢了,最后文件自然是空的(或者只有一堆混乱的情感标签)。

修正后的代码

import nltk.classify.util
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import names

def word_feats(words):
    return dict([(word, True) for word in words])

positive_vocab = ['awesome', 'outstanding', 'fantastic', 'terrific', 'good', 'nice', 'great', ':)']
negative_vocab = ['bad', 'terrible', 'useless', 'hate', ':(']

# 修正特征生成:把单个单词包装成列表,避免字符拆分
positive_features = [(word_feats([pos]), 'pos') for pos in positive_vocab]
negative_features = [(word_feats([neg]), 'neg') for neg in negative_vocab]

train_set = negative_features + positive_features
classifier = NaiveBayesClassifier.train(train_set)

# 先读取所有内容并处理,避免同时读写冲突
processed_lines = []
with open("test.txt", "r") as f:
    for sentence in f.readlines():
        sentence = sentence.strip()  # 去掉换行符和首尾空格
        if not sentence:  # 跳过空行
            continue
        neg_count = 0
        pos_count = 0
        words = sentence.lower().split(' ')
        for word in words:
            classResult = classifier.classify(word_feats([word]))
            if classResult == 'neg':
                neg_count += 1
            elif classResult == 'pos':
                pos_count += 1
        # 判断整句的情感倾向
        if pos_count > neg_count:
            result = "Positive"
        elif neg_count > pos_count:
            result = "Negative"
        else:
            result = "Neutral"  # 新增中性情况,处理正负词数量相等的场景
        # 拼接成目标格式
        processed_lines.append(f"{sentence} - {result}")

# 一次性写入处理后的内容
with open("test.txt", "w") as f:
    f.write('\n'.join(processed_lines) + '\n')

关键改进点

  • 使用with语句自动管理文件,避免忘记关闭文件的问题。
  • 先读取所有内容到内存处理,再一次性写入文件,彻底避免同时读写的冲突。
  • 统计整句的正负情感词数量,判断整体倾向,完全匹配你想要的输出格式。
  • 修复了word_feats的调用逻辑:原来直接传word会把单个字符拆成“单词”(比如"awesome"会被拆成['a','w','e',...]),现在改成传[word]确保整个单词作为判断特征。
  • 增加了空行处理和中性情感的判断,让代码更健壮。

这样运行后,你的test.txt就会变成你期望的格式啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:07