前面我们已经讲过SnowNLP、VADER和情感词典法。
SnowNLP更适合中文短文本情感分析,VADER更适合英文短文本和社交媒体评论,情感词典法则更适合需要解释规则和判断依据的中文文本分析。
那如果我们手里有一批英文评论,想快速做情感分析,但又不想一开始就训练复杂模型,还可以用什么方法呢?
这篇文章就介绍一个非常适合入门的英文文本处理工具——TextBlob。
TextBlob的特点是简单、直接、上手快。它不仅可以做英文情感分析,还可以做词性标注、名词短语提取、n-gram 分析、文本分类等基础文本处理任务。对于刚开始学习 Python 文本分析的同学来说,它很适合作为入门工具。
简单来说,如果你想快速判断一条英文评论是积极还是消极,或者想知道一段英文文本更像“客观描述”还是“主观评价”,TextBlob就可以派上用场。
一、什么是 TextBlob?
TextBlob是一个 Python 文本处理库,可以理解为一个比较友好的英文 NLP 入门工具。
它把很多常见文本处理功能封装成了比较简单的 API。我们不需要一开始就理解复杂的模型结构,也不需要自己手动写很多底层代码,就可以完成一些基础文本分析任务。
比如,它可以帮助我们做:
其中,最适合我们这个系列的功能,就是英文文本情感分析。
TextBlob做情感分析时,最常用的是两个指标:
- polarity:情感极性,表示文本偏积极还是偏消极。
- subjectivity:主观性,表示文本更像主观观点还是客观事实。
polarity的取值范围通常是-1 到 1。越接近 1,说明文本越偏积极;越接近 -1,说明文本越偏消极;越接近 0,说明文本情感倾向越不明显。
subjectivity的取值范围通常是0 到 1。越接近 1,说明文本越主观;越接近 0,说明文本越客观。
💡对比示例:
- “*This product is amazing!*” —— 这句话明显带有主观评价,而且偏积极。
- “*The package arrived on Monday.*” —— 这句话更像一个事实描述,主观情绪就不明显。
这就是TextBlob比较有意思的地方:它不仅能看积极或消极,还能帮助我们判断文本是不是带有明显主观态度。
二、TextBlob 适合分析什么数据?
TextBlob更适合处理英文文本,尤其是一些比较短、表达比较直接的英文评论。
📌 比如:
如果你的数据是中文,TextBlob并不是最合适的选择。中文文本更建议优先考虑SnowNLP、中文情感词典、BERT 中文情感分类等方法。
如果你的数据是英文,TextBlob就很适合做一个快速入门版分析。比如你只是想先看看评论整体偏积极还是偏消极,或者想在课程作业中完成一个基础英文情感分析案例,TextBlob的门槛会比较低。
不过也要注意:TextBlob更适合基础分析和快速原型。如果你追求更高准确率,或者数据量很大、文本语境很复杂,后续可以考虑VADER、机器学习模型、BERT或其他深度学习方法。
三、TextBlob 和 VADER 有什么区别?
很多同学会问:既然VADER也能做英文情感分析,那TextBlob和VADER有什么区别?
可以简单这样理解:
- VADER更适合英文社交媒体短文本,尤其是推文、评论、带感叹号、表情、程度强调的文本。它对英文短文本中的口语化表达比较友好。
- TextBlob更像是一个综合型英文文本处理工具。它不只做情感分析,还可以做词性标注、名词短语提取、n-gram、文本分类等任务。
所以,如果你只是想专门分析英文短评论的情绪倾向,VADER很合适;如果你还想顺便做一些英文文本处理,比如提取短语、看主观性、做简单分类,那么TextBlob会更方便。
简单来说:
这两个工具并不是谁完全替代谁,而是适合的场景不太一样。
四、安装 TextBlob
首先安装TextBlob:
pip install textblob
有些功能需要下载语料资源,可以继续运行:
python -m textblob.download_corpora
然后在 Python 中导入:
from textblob import TextBlob
如果你只是做基础情感分析,通常这样就可以开始了。
五、用 TextBlob 分析一条英文评论
我们先看一个最简单的例子:
from textblob import TextBlobtext = "This product is amazing. I really love it."blob = TextBlob(text)print(blob.sentiment)print("情感极性 polarity:", blob.sentiment.polarity)print("主观性 subjectivity:", blob.sentiment.subjectivity)
运行后可能会得到类似结果:
Sentiment(polarity=0.65, subjectivity=0.75)情感极性 polarity: 0.65主观性 subjectivity: 0.75
这里的polarity大于 0,说明这句话整体偏积极;subjectivity也比较高,说明这句话带有比较明显的主观评价。
再看一个偏负面的例子:
from textblob import TextBlobtext = "The service was terrible and the room was dirty."blob = TextBlob(text)print("情感极性 polarity:", blob.sentiment.polarity)print("主观性 subjectivity:", blob.sentiment.subjectivity)
如果polarity小于 0,就说明这条评论整体偏消极。
六、如何根据 polarity 划分积极、中性和消极?
TextBlob会给出polarity分数,但实际做论文或项目时,我们通常还需要把文本划分为积极、中性和消极三类。
可以用一个简单规则:
不过实际项目中,为了避免过于敏感,也可以设置一个小阈值。比如:
代码可以这样写:
defclassify_sentiment(polarity):if polarity > 0.05:return"积极"elif polarity < -0.05:return"消极"else:return"中性"
然后测试一下:
text = "The food is good, but the delivery is too slow."blob = TextBlob(text)polarity = blob.sentiment.polaritysentiment = classify_sentiment(polarity)print("polarity:", polarity)print("情感分类:", sentiment)
这样,一条英文评论就可以被转换成情感得分和情感类别。
七、分析 Excel 中的一列英文评论
实际做论文或课程作业时,我们通常不是分析一句话,而是分析一整列评论。
假设你的 Excel 文件里有一列叫做comment,可以这样读取:
import pandas as pdfrom textblob import TextBlobdf = pd.read_excel("英文评论数据.xlsx", engine="openpyxl")df = df.dropna(subset=["comment"])df.head()
定义情感分析函数:
defget_polarity(text): blob = TextBlob(str(text))return blob.sentiment.polaritydefget_subjectivity(text): blob = TextBlob(str(text))return blob.sentiment.subjectivitydefclassify_sentiment(polarity):if polarity > 0.05:return"积极"elif polarity < -0.05:return"消极"else:return"中性"
开始批量分析:
df["polarity"] = df["comment"].apply(get_polarity)df["subjectivity"] = df["comment"].apply(get_subjectivity)df["情感分类"] = df["polarity"].apply(classify_sentiment)df.head()
保存结果:
import osos.makedirs("result", exist_ok=True)df.to_excel("./result/TextBlob情感分析结果.xlsx", index=False, engine="openpyxl")
保存后的表格中,就会多出polarity、subjectivity和情感分类三列。
其中:
- polarity可以用来分析评论是偏积极还是偏消极;
- subjectivity可以用来分析评论是更主观还是更客观;
八、TextBlob 的主观性得分有什么用?
很多情感分析工具只关注积极和消极,但TextBlob还会输出subjectivity,也就是主观性。
这个指标有时候也很有用。
👥比如下面两句话:
- “*The hotel is located near the subway station.*” —— 这句话主要是在描述位置,更像客观事实。
- “*The hotel is wonderful and I really enjoyed my stay.*” —— 这句话明显带有主观评价。
如果我们分析的是用户评论,subjectivity可以帮助我们判断评论是偏事实描述,还是偏个人感受。
📝在论文或报告中,可以这样解释:
subjectivity得分越高,说明评论越带有主观评价色彩;subjectivity得分越低,说明评论更接近事实描述。通过分析主观性得分,可以进一步观察用户评论中情绪表达和事实陈述的比例。
这对于英文酒店评论、英文旅游评论、英文商品评论都比较有用。
九、TextBlob 还能做什么文本处理?
除了情感分析,TextBlob还可以做一些基础文本处理。
1. 提取名词短语:
from textblob import TextBlobtext = "Natural language processing is an important field in artificial intelligence."blob = TextBlob(text)print(blob.noun_phrases)
2. 做词性标注:
from textblob import TextBlobtext = "TextBlob is a simple Python library for text processing."blob = TextBlob(text)print(blob.tags)
3. 提取 n-gram:
from textblob import TextBlobtext = "Python text analysis is useful for social science research."blob = TextBlob(text)print(blob.ngrams(n=2))print(blob.ngrams(n=3))
n-gram可以理解为连续出现的词组。比如二元短语就是两个词一组,三元短语就是三个词一组。
在文本分析中,n-gram可以帮助我们发现一些固定搭配,比如:
这些短语在英文评论分析和英文论文摘要分析中都比较常见。
十、用 TextBlob 做简单文本分类
TextBlob还支持简单的文本分类。比如我们可以自己准备一小部分训练数据,让模型学习哪些评论是积极,哪些评论是消极。
先准备训练数据:
from textblob.classifiers import NaiveBayesClassifiertrain_data = [ ("This product is excellent", "pos"), ("I love this design", "pos"), ("The service is very good", "pos"), ("This is a terrible experience", "neg"), ("The quality is poor", "neg"), ("I hate this product", "neg")]
训练一个朴素贝叶斯分类器:
cl = NaiveBayesClassifier(train_data)
测试一条新评论:
test_text = "The product quality is good"print(cl.classify(test_text))
也可以查看分类概率:
prob_dist = cl.prob_classify(test_text)print("pos 概率:", prob_dist.prob("pos"))print("neg 概率:", prob_dist.prob("neg"))
如果想和TextBlob结合使用,也可以这样写:
from textblob import TextBlobblob = TextBlob("The service is poor but the food is good.", classifier=cl)print(blob.classify())
这个例子只是演示思路。正式研究中,如果要训练分类器,最好准备更多标注数据,并划分训练集和测试集,再用准确率、召回率、F1 值等指标评估模型效果。
十一、TextBlob 情感分析结果怎么可视化?
TextBlob得到polarity、subjectivity和情感分类后,可以做很多图表。
常见的图包括:
比如画情感分类柱状图:
import matplotlib.pyplot as pltimport seaborn as snsplt.rcParams["font.sans-serif"] = ["Songti SC"]plt.rcParams["axes.unicode_minus"] = Falseplt.figure(figsize=(8, 6))sns.countplot(data=df, x="情感分类", color="skyblue")plt.title("TextBlob 情感分类数量对比")plt.xlabel("情感分类")plt.ylabel("数量")plt.grid(axis="y", linestyle="--", alpha=0.7)plt.savefig("./result/TextBlob情感分类数量对比.png", dpi=300, bbox_inches="tight")plt.show()
画polarity 得分分布图:
plt.figure(figsize=(8, 6))sns.histplot(data=df, x="polarity", bins=20, kde=True, color="skyblue")plt.title("TextBlob polarity 情感极性分布")plt.xlabel("polarity 得分")plt.ylabel("频数")plt.grid(axis="y", linestyle="--", alpha=0.7)plt.savefig("./result/TextBlob情感极性分布.png", dpi=300, bbox_inches="tight")plt.show()
画subjectivity 分布图:
plt.figure(figsize=(8, 6))sns.histplot(data=df, x="subjectivity", bins=20, kde=True, color="skyblue")plt.title("TextBlob subjectivity 主观性分布")plt.xlabel("subjectivity 得分")plt.ylabel("频数")plt.grid(axis="y", linestyle="--", alpha=0.7)plt.savefig("./result/TextBlob主观性分布.png", dpi=300, bbox_inches="tight")plt.show()
这些图很适合放在课程论文、研究报告或公众号文章中。相比只展示表格,可视化结果更直观,也更容易解释。
十二、TextBlob 结果怎么写进论文?
很多同学不是不会跑代码,而是不知道怎么把结果写成论文语言。
TextBlob的结果可以围绕两个指标来写:一个是情感极性polarity,一个是主观性subjectivity。
📝 方法部分可以这样写:
本文采用TextBlob工具对英文评论文本进行情感分析。TextBlob可以输出文本的情感极性得分polarity和主观性得分subjectivity。其中,polarity用于衡量文本情感倾向,取值越接近 1 表示越积极,越接近 -1 表示越消极;subjectivity用于衡量文本的主观性,取值越高说明文本越带有主观评价色彩。本文根据polarity得分将评论划分为积极、中性和消极三类,以进一步分析样本评论的整体情感结构。
📝 结果部分可以这样写:
从总体情感分类结果来看,积极评论数量占比较高,说明用户整体评价偏向正面;中性评论主要表现为事实描述或情感态度不明显的反馈;负面评论虽然占比较低,但仍反映出用户在服务体验、产品质量、价格感知等方面存在一定不满。
📝 如果分析 subjectivity,可以这样写:
从主观性得分分布来看,样本评论整体具有较强的主观评价特征,说明用户在评论中不仅描述事实,也表达了较为明确的个人态度和情绪感受。
📝 如果结合主题分析,可以这样写:
进一步将TextBlob情感分析结果与主题识别结果进行交叉分析可以发现,不同主题下的情感倾向存在一定差异。其中,服务体验类主题中负面评论占比较高,说明用户对服务效率、沟通态度等方面较为敏感;而产品质量类主题中积极评论较多,说明用户对核心功能或使用效果认可度较高。
十三、TextBlob 使用中的注意事项
TextBlob很适合入门,但它也不是万能的。
- ❌首先,TextBlob 更适合英文文本。如果你的数据是中文,不建议直接使用TextBlob做情感分析。中文评论更适合SnowNLP、中文情感词典、BERT 中文情感分类等方法。
- ❌其次,TextBlob 适合快速分析和小型项目。如果你的数据量非常大,或者研究对准确率要求很高,可以考虑使用VADER、机器学习模型或BERT等方法进行对比。
- ❌再次,TextBlob 对复杂语境的理解有限。比如讽刺、反语、隐喻、专业表达和复杂上下文,都可能影响判断结果。
- ❌最后,论文写作时最好进行人工抽样验证。可以随机抽取部分文本,人工判断其情感类别,再和TextBlob的结果进行对比。如果判断基本一致,结果解释会更有说服力。
十四、新手推荐选题方向
如果你想用TextBlob做一篇课程论文、实证分析或研究报告,可以从英文评论类数据入手,比如:
这些选题有一个共同特点:数据相对容易收集,文本长度通常不会太长,情绪表达也比较直接,适合用 TextBlob 做入门版分析。
十五、总结:TextBlob 适合谁?
如果你刚开始接触英文文本分析,TextBlob是一个很适合入门的工具。
它的优点是简单、直接、代码少。只需要几行 Python 代码,就可以得到英文文本的polarity和subjectivity得分,并进一步判断文本是积极、中性还是消极。
简单来说:
- BERT 情感分类更适合追求准确率和语义理解的项目。
TextBlob的价值不只是帮我们判断一条英文评论是好评还是差评,它还可以帮助我们快速理解英文文本的情感极性和主观性,为后续的图表分析、主题分析和论文写作提供基础。
对于课程论文、研究报告和英文评论分析任务来说,TextBlob是一个非常适合初学者掌握的 Python 文本分析工具。
🛠️ 技术支持与服务
如果你手里已经有文本数据或者有想收集的数据,但不知道怎么清洗、建模和解释,或者你想做一篇文本挖掘、主题分析、情感分析相关的课程作业、论文实证部分或研究报告,我们可以提供相关技术支持:
除文本分析外,我们也承接中/英文及多语言 Python 文本分析,包括数据采集、文本清洗、LDA、BERTopic、BTM、DTM、TopicGPT、SnowNLP、VADER、TextBlob、情感词典、主题演化分析及语义网络关系图等;同时也可提供深度学习、Matlab、Simulink 仿真建模,以及基于SPSS、R、Mplus等软件的量化分析支持。
量化分析方向包括:z 检验、t 检验、方差分析、回归分析、卡方检验、相关分析、样本量计算、结构方程模型、中介效应与调节效应检验、量表信效度分析、机器学习算法等,具体需求均可根据研究主题和数据情况进行定制。
📬 如果你正好有文本数据、问卷数据想分析,或者目前还没有数据、想先获取公开文本数据,也欢迎通过本公众号后台留言或淘宝搜索数锐研学馆联系我们。
如果你觉得内容对你有帮助,欢迎收藏、点赞并关注本公众号。后续会持续更新数据分析相关内容,也欢迎分享给更多需要的人。无论你想了解哪种统计方法,都可以在评论区留言一起交流。