3、Python基础回顾:数据类型、字符串操作、列表与字典、函数定义、文件读写
说实话,很多同学一上来就急着搞情感分析模型,结果连Python基础都磕磕绊绊。我见过太多人写代码时被一个列表切片卡住半天。别急,咱们花点时间把地基打牢。
这一章我会带你快速过一遍Python最核心的几个知识点。都是我在实际项目中天天用的东西。你想想看,如果连字符串都不会处理,怎么清洗用户评论?如果连字典都不会用,怎么存储情感得分?
3.1 数据类型:你得知道自己在跟什么打交道
Python里最常用的数据类型就那么几种。我习惯把它们分成两类:不可变类型和可变类型。
| 类型 | 示例 | 是否可变 | 我常用的场景 |
|---|---|---|---|
| int | 42, -1, 0 | 不可变 | 计数、索引 |
| float | 3.14, -0.5 | 不可变 | 情感得分、概率值 |
| str | "你好", 'positive' | 不可变 | 文本数据、标签 |
| list | [1, 2, 3] | 可变 | 批量数据、特征向量 |
| dict | {"name": "张三"} | 可变 | 键值对存储、配置参数 |
| bool | True, False | 不可变 | 条件判断、分类结果 |
type() 函数随时检查变量类型。我在调试时经常这么干,省得猜来猜去。
3.2 字符串操作:处理文本的基本功
情感分析说白了就是跟文本打交道。字符串操作要是不过关,后面寸步难行。
常用操作一览:
text = " 这个电影真好看! "
# 去除空白
clean = text.strip()
print(clean) # "这个电影真好看!"
# 分割
words = "我,喜欢,Python".split(",")
print(words) # ['我', '喜欢', 'Python']
# 拼接
sentence = " ".join(["今天", "天气", "不错"])
print(sentence) # "今天 天气 不错"
# 大小写转换(英文场景常用)
label = "POSITIVE"
print(label.lower()) # "positive"
# 查找与替换
comment = "这个产品太差了"
if "差" in comment:
print("检测到负面词")
重点:字符串是不可变的。你做的任何操作都会返回一个新字符串,原字符串不变。我刚开始学的时候老忘记这点,结果调试了半天。
我在项目中遇到过一个问题:用户评论里夹杂着各种标点符号和空格。直接用 split() 会得到一堆空字符串。后来我养成了习惯,先 strip() 再 split(),干净利落。
3.3 列表与字典:数据结构的左膀右臂
列表和字典是我用得最多的两种数据结构。说白了,列表管顺序,字典管映射。
列表:有序的集合
# 创建
scores = [0.8, 0.2, 0.9, 0.1]
# 索引(从0开始)
print(scores[0]) # 0.8
print(scores[-1]) # 0.1(最后一个)
# 切片
print(scores[1:3]) # [0.2, 0.9]
# 添加
scores.append(0.5)
print(scores) # [0.8, 0.2, 0.9, 0.1, 0.5]
# 列表推导式(我超爱这个)
positive_scores = [s for s in scores if s > 0.5]
print(positive_scores) # [0.8, 0.9]
copy() 才解决。
字典:键值对的天下
字典在情感分析里太重要了。情感词典、配置参数、统计结果,全得靠它。
# 创建情感词典
sentiment_dict = {
"好": 1.0,
"棒": 0.8,
"差": -1.0,
"烂": -0.9
}
# 访问
print(sentiment_dict["好"]) # 1.0
# 安全访问(推荐)
score = sentiment_dict.get("一般", 0.0)
print(score) # 0.0(没有就返回默认值)
# 遍历
for word, score in sentiment_dict.items():
print(f"{word}: {score}")
# 更新
sentiment_dict["赞"] = 0.9
嗯,这里要注意:字典的键必须是不可变类型。字符串和数字没问题,但列表不行。我见过有人用列表当键,直接报错,一脸懵。
3.4 函数定义:把逻辑封装起来
写情感分析系统,你不可能把所有代码都堆在一起。函数就是你的积木块。
def analyze_sentiment(text, lexicon):
"""
分析文本情感
:param text: 输入文本
:param lexicon: 情感词典
:return: 情感得分
"""
words = text.split()
total_score = 0.0
for word in words:
score = lexicon.get(word, 0.0)
total_score += score
return total_score
# 调用
my_lexicon = {"开心": 1.0, "难过": -1.0}
result = analyze_sentiment("我今天很开心", my_lexicon)
print(result) # 1.0
函数参数这块,我建议你掌握三种:位置参数、默认参数、关键字参数。默认参数特别实用,比如给情感分析函数设一个默认词典。
def analyze(text, lexicon=None):
if lexicon is None:
lexicon = {"好": 1.0, "差": -1.0}
# ... 处理逻辑
def func(lst=[]) 这种写法,多次调用会累积数据。我曾经被这个坑过,后来一律用 None 加内部判断。
3.5 文件读写:数据进出的通道
情感分析离不开数据。你得从文件里读训练数据,也得把结果写回文件。
读文件:
# 推荐写法(with语句自动关闭文件)
with open("comments.txt", "r", encoding="utf-8") as f:
content = f.read() # 全部读取
# 或者逐行读取
# for line in f:
# print(line.strip())
写文件:
results = ["正面", "负面", "正面"]
with open("results.txt", "w", encoding="utf-8") as f:
for result in results:
f.write(result + "\n")
| 模式 | 说明 | 我什么时候用 |
|---|---|---|
| "r" | 只读 | 读取训练数据 |
| "w" | 写入(覆盖) | 保存新结果 |
| "a" | 追加 | 日志记录 |
| "r+" | 读写 | 更新配置文件 |
重要提醒:处理中文文件时,一定要指定 encoding="utf-8"。我刚开始做项目时没注意,结果读出来的全是乱码,差点把电脑砸了。
我个人习惯把文件读写封装成函数。比如一个 load_data() 专门读数据,一个 save_results() 专门写结果。这样主逻辑干净,调试也方便。
好了,Python基础就回顾到这里。这些内容看着简单,但都是后面搭建情感分析系统的基石。你想想看,如果连这些都不熟练,后面处理几万条评论数据时,光调试就能把你逼疯。
下一章咱们开始真正动手,用这些基础知识搭建一个简单的情感分析原型。到时候你会发现,原来这些基础操作组合起来,能做出这么酷的东西。