龙空技术网

Python文本数据处理的实例——新闻分类

积极的python程序猿 681

前言:

目前我们对“python分析文本”大致比较重视,小伙伴们都需要学习一些“python分析文本”的相关知识。那么小编在网上网罗了一些关于“python分析文本””的相关内容,希望朋友们能喜欢,你们一起来学习一下吧!

引言

文本数据是我们日常生活中最常见的数据类型之一,它包含了丰富而多样的信息。如何有效地处理和分析文本数据,是数据科学领域的一个重要而有趣的课题。Python作为一门功能强大而易用的编程语言,提供了许多优秀的库和工具来支持文本数据处理,如requests、beautifulsoup、pandas、numpy、scikit-learn、matplotlib等。在本文中,我们将以一个具体的案例来展示如何使用Python对文本数据进行处理和分析。我们选择的案例是新闻分类,即根据新闻内容来判断新闻属于哪个类别。新闻分类是文本分类的一个常见应用场景,它可以帮助我们快速地浏览和筛选感兴趣的新闻,也可以为其他任务如新闻推荐、新闻摘要等提供基础。

图片来源于网络

使用 requests 和 beautifulsoup 库获取网页上的新闻文本数据

为了获取新闻文本数据,我们需要从网页上爬取相关的内容。Python提供了requests和beautifulsoup两个库来方便我们实现这个功能。requests库可以帮助我们发送HTTP请求,获取网页的源代码;beautifulsoup库可以帮助我们解析网页的HTML结构,提取我们需要的数据。下面是使用这两个库获取网页上的新闻文本数据的代码:

# 导入所需的库import requestsfrom bs4 import BeautifulSoupurl = "; # 一个关于新闻分类的文章链接response = requests.get(url)soup = BeautifulSoup(response.text, "html.parser")content = soup.find("div", class_="RichText ztext Post-RichText").text # 提取文章正文内容news_list = content.split("\n\n") # 按空行分割新闻内容news_list = [news for news in news_list if news.startswith("【")] # 只保留以【开头的新闻内容news_list[:5] # 查看前五条新闻

['【国际】美国总统特朗普日在白宫宣布将从叙利亚撤军并称击败了伊斯兰国组织引发美国国内外广泛争议美国国防部长马蒂斯当天递交辞呈并将于明年二月底离职马蒂斯在辞呈中说他与特朗普在对待盟友以及应对全球威胁时存在根本分歧他认为特朗普有权任命与其想法更加一致的国防部长美国有线电视新闻网报道说马蒂斯是特朗普任内第九位离职或被解雇的内阁成员特朗普当天在社交媒体上说他将尽快任命一位新国防部长', '【财经】中国人民银行日发布公告称将于明年月日起下调存款准备金率个百分点同时为了支持中小银行更好地发挥服务实体经济作用人民银行将采取定向降准', '【社会】日上午时许广东省佛山市南海区桂城街道发生一起交通事故一辆大型货车与一辆电动自行车相撞造成电动自行车驾驶员当场死亡事故发生后货车司机逃逸目前警方正在全力追捕', '【体育】北京时间日凌晨欧冠小组赛最后一轮展开争夺皇家马德里客场战平俄罗斯球队莫斯科中央陆军罗马主场不敌捷克球队比尔森胜利皇马和罗马提前出线但都未能赢球结束小组赛', '【娱乐】日晚由华策克顿旗下爱奇艺影业出品改编自网络小说《扶摇皇后》同名电视剧《扶摇》在爱奇艺独播该剧由杨文昊执导杨幂阮经天高伟光刘奕君王劲松等联袂主演讲述了扶摇与长孙无极历经磨难最终归于平凡的传奇故事']

使用 pandas 和 numpy 库对文本数据进行清洗和转换

获取到网页上的新闻文本数据后,我们需要对其进行清洗和转换,使其符合我们分析和建模的要求。Python提供了pandas和numpy两个库来方便我们实现这个功能。pandas库可以帮助我们将数据转换为数据框(DataFrame)结构,方便进行各种操作;numpy库可以帮助我们进行高效的数值计算。下面是使用这两个库对文本数据进行清洗和转换的代码:

# 导入所需的库import pandas as pdimport numpy as npimport reimport jieba# 将新闻列表转换为数据框df = pd.DataFrame(news_list, columns=["raw"])# 提取新闻类别标签df["tag"] = df["raw"].str.extract("【(.*?)】")# 去除新闻类别标签df["content"] = df["raw"].str.replace("【.*?】", "")# 去除中文数字组合df["content"] = df["content"].str.replace("[\u4e00-\u9fa5]+[0-9]+", "")# 去除非中文字符df["content"] = df["content"].str.replace("[^\u4e00-\u9fa5]", "")# 对新闻内容进行分词,并用空格连接成字符串df["words"] = df["content"].apply(lambda x: " ".join(jieba.cut(x)))# 查看数据框前五行df.head()
使用 scikit-learn 库对文本数据进行机器学习建模和分析

对文本数据进行清洗和转换后,我们需要对其进行机器学习建模和分析,以实现新闻分类的目的。Python提供了scikit-learn库来方便我们实现这个功能。scikit-learn库是一个功能强大而易用的机器学习库,它提供了许多常用的机器学习算法和工具,如文本向量化、特征选择、分类模型等。下面是使用这个库对文本数据进行机器学习建模和分析的代码:

# 导入所需的库from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer, TfidfVectorizerfrom sklearn.model_selection import train_test_splitfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 特征变量为分词后的新闻内容X = df["words"]# 目标变量为新闻类别标签y = df["tag"]# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建TF-IDF向量化对象tfidf = TfidfVectorizer()# 对训练集进行TF-IDF向量化处理X_train_tfidf = tfidf.fit_transform(X_train)# 对测试集进行TF-IDF向量化处理X_test_tfidf = tfidf.transform(X_test)# 创建朴素贝叶斯分类器对象model = MultinomialNB()# 用训练集拟合模型model.fit(X_train_tfidf, y_train)# 用测试集预测类别y_pred = model.predict(X_test_tfidf)
使用 matplotlib 库对文本数据的结果进行可视化和展示

对文本数据进行机器学习建模和分析后,我们需要对其结果进行可视化和展示,以便更好地理解和评估我们的模型。Python提供了matplotlib库来方便我们实现这个功能。matplotlib库是一个功能丰富而灵活的绘图库,它提供了许多常用的图形类型和样式,如柱状图、饼图、直方图、词云图等。下面是使用这个库对文本数据的结果进行可视化和展示的代码:

# 导入所需的库import matplotlib.pyplot as pltfrom wordcloud import WordCloud# 类别数量分布柱状图plt.figure(figsize=(10,6))df["tag"].value_counts().plot(kind="bar", color="orange")plt.xlabel("News Category")plt.ylabel("Count")plt.title("News Category Distribution")plt.show()# 词汇统计柱状图(前15个)plt.figure(figsize=(10,6))word_count = pd.Series(" ".join(df["words"]).split()).value_counts()word_count[:15].plot(kind="bar", color="green")plt.xlabel("Word")plt.ylabel("Count")plt.title("Word Count Distribution (Top 15)")plt.show()# 词云图(所有词汇)plt.figure(figsize=(10,6))word_cloud = WordCloud(font_path="simhei.ttf", background_color="white").generate(" ".join(df["words"]))plt.imshow(word_cloud)plt.axis("off")plt.title("Word Cloud of News Content")plt.show()# 词频分布直方图(前100个)plt.figure(figsize=(10,6))word_freq = np.ravel(X_train_tfidf.sum(axis=0)) # 计算每个词的词频(出现在不同文档中的次数)word_freq_df = pd.DataFrame({"term": tfidf.get_feature_names(), "freq": word_freq}) # 创建词频数据框word_freq_df.sort_values(by="freq", ascending=False).head(100).plot(x="term", y="freq", kind="hist", color="purple") # 绘制前100个词的词频直方图plt.xlabel("Term Frequency")plt.ylabel("Count")plt.title("Term Frequency Distribution (Top 100)")plt.show()# 分类准确率饼图plt.figure(figsize=(10,6))accuracy = accuracy_score(y_test, y_pred) # 计算分类准确率labels = ["Correct", "Incorrect"]sizes = [accuracy, 1-accuracy]colors = ["blue", "red"]explode = (0.1, 0) plt.pie(sizes, explode=explode, labels=labels, colors=colors,        autopct="%1.1f%%", shadow=True, startangle=140)plt.axis("equal")plt.title("Classification Accuracy")plt.show()

通过这个案例,我们学习了如何使用Python对文本数据进行处理和分析。我们了解了如何从网页上获取文本数据,如何对文本数据进行清洗和转换,如何对文本数据进行向量化和建模,以及如何对文本数据的结果进行可视化和展示。文本数据处理是一门有趣而实用的技能,它可以帮助我们从海量的文本信息中提取有价值的知识。Python提供了丰富而强大的库和工具来支持文本数据处理,我们可以利用它们来完成各种各样的任务,如情感分析、主题挖掘、自然语言生成等。

如果你想进一步学习Python文本数据处理的知识和技巧,你可以参考以下的资源或‬关注‬我‬,我会‬出‬一系列‬教程‬:

《Python自然语言处理》(Bird等著):一本全面而深入的自然语言处理教程,介绍了使用Python和NLTK库进行自然语言处理的基础知识和实践方法。《用Python玩转数据》(McKinney著):一本涵盖了Python数据分析的各个方面的书籍,包括了使用pandas、numpy、matplotlib等库进行数据获取、清洗、转换、可视化等操作的详细指南。《机器学习实战》(Harrington著):一本介绍了使用Python实现机器学习算法的书籍,包括了分类、回归、聚类、推荐系统等常见的机器学习任务和方法。

希望这篇文章对你有所帮助。如果你喜欢这篇文章,请给我一个赞或者关注我的账号。谢谢!

图片来源于网络

标签: #python分析文本