admin 管理员组

文章数量: 887021

NLP

前言

本文是该专栏的第1篇,后面会持续分享NLP的各种干货知识,值得关注。

一般来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或者应用服务。

举个例子,如Facebook News Feed这种社交网站推送,它的算法知道你的兴趣是自然语言处理,就会推送相关的广告或者帖子;再比如Apple的Sri,它通过语言引擎处理,应对你的问题,给出一些回答内容。

现阶段,自然语言工具包最受欢迎的自然语言处理库是Natural language toolkit (NLTK),其是用python编写的,有着非常强大的社区支持。而且NLTK非常容易上手,主要在于它是最简单的自然语言(NLP)处理库。

以下使用NLTK处理停用词为例,跟着笔者直接往下看。

正文

1. 安装

如果你已安装,请忽略该步骤,直接往下看即可。安装方法如下:

pip install nltk

2. 统计词频

假设,现在需要读取某个txt文本内容,将其内容的词频进行统计,示例代码如下:

import nltk# 读取txt文本内容,写入你的txt文本路径
with open(r'ck.txt', 'r', encoding='utf-8') as f:txt = f.read()f.close()word_list = {}
# 使用nltk.FreqDist统计词频
record = nltk.FreqDist(txt)
for key, value in record.items():# print(f'{key}: {value}')word_list[key] = valueprint(word_list)

注意:由于这里的txt文本是笔者本地的,你可以替换成一个你自己的txt文本即可。

运行上述代码成功之后,结果显示如下:

单独看上面的结果,会显得比较乏味。可以直接使用plot函数(即数据分析三剑客之一的matplotlib)做出频率分布图,matplotlib安装方法如下:

pip install matplotlib

示例代码如下:

import matplotlib
import nltk
import matplotlib as plot# 显示中文
matplotlib.rc("font", family="YouYuan")# 读取txt文本内容
with open(r'ck.txt', 'r', encoding='utf-8') as f:txt = f.read()f.close()word_list = {}
# 使用nltk.FreqDist统计词频
record = nltk.FreqDist(txt)
for key, value in record.items():# print(f'{key}: {value}')word_list[key] = valuerecord.plot(20, cumulative=False)

注意:当你的txt文本是中文的时候,必须加入该代码,否则可视化界面显示不了中文,代码如下:

import matplotlib# 显示中文
matplotlib.rc("font", family="YouYuan")

运行上述代码,结果如下:

像上图中的“的,是,‘,’,‘。’”等等,这些词都属于停用词。而对于出现停用词,应该进行删除,防止它们影响分析结果。

3. 停用词处理 

NLTK,它自带了多种语言的停用词列表。

比如说,你想获取英文停用词表,使用如下代码即可:

from nltk.corpus import stopwordsstopwords.words('english')    # 这里的语言为english

根据对应语言,更改对应的参数即可。但是笔者认为这种停用词表并非一招吃遍天,所以最好是我们自己可以搭建一个停用词表,后期持续更新优化这个停用词表即可。笔者这里有中文停用词表以及英文停用词表,感兴趣的同学可以私信找我要即可。

考虑加入停用词之后,示例代码如下:

import matplotlib
import nltk
import matplotlib as plot# 显示中文
matplotlib.rc("font", family="YouYuan")
# 读取txt文本内容
with open(r'ck.txt', 'r', encoding='utf-8') as f:txt = f.read()f.close()word_list = {}
# 读取停用词
with open(r'中文停用词.txt', 'r', encoding='utf-8') as f:stopword = f.read()f.close()# 使用nltk.FreqDist统计词频
record = nltk.FreqDist(txt)
for key, value in record.items():# print(f'{key}: {value}')if key in stopword:passelse:word_list[key] = valuerecord.plot(20, cumulative=False)

如果还想了解,后面笔者会持续更新NLP的相关干货知识,记得收藏并关注小编,后面的python干货在等着你。

如果喜欢本文或者本文对你有帮助的话,记得关注小编并点个赞哟,有问题和需求欢迎留言私信

本文标签: nlp