您的位置:

使用Python进行NLP文本分析流程全解析

一、分词

在NLP中,分词是对文本进行基本处理的步骤,将文本中的句子划分为词语,去除停用词和标点符号。Python中,我们常用的分词工具包括jieba、NLTK等。

接下来,我们以jieba为示例,对一段文本进行分词:

import jieba

text = "大家好才是真的好,谢谢大家"

seg_list = jieba.cut(text, cut_all=False)

print("分词结果:", "/".join(seg_list))

输出结果:

分词结果: 大家/好/才/是/真的/好/,/谢谢/大家

我们可以看到,首先我们导入了jieba包,然后对text进行cut分词,其中cut_all=False表示不使用全模式,接着将分词结果用join函数连接在一起。分词结果中已经去除了停用词和标点符号。

二、去除停用词和标点符号

在分词的结果中,会包含许多无意义的停用词(如“的”、“了”等)和标点符号,需要进行去除。

我们使用中文停用词库,以及Python字符串替换功能,对分词结果进行处理:

import jieba
import re

text = "大家好才是真的好,谢谢大家"

stopwords = [line.strip() for line in open('stopwords.txt', 'r', encoding='utf-8').readlines()]

seg_list = jieba.cut(text, cut_all=False)

new_text = []
for word in seg_list:
    if word not in stopwords and word != ' ':
        new_text.append(word)

new_text = ''.join(new_text)

clean_text = re.sub(r'[^\u4e00-\u9fa5]+', '', new_text)

print("去除停用词和标点符号后的结果:", clean_text)

输出结果:

去除停用词和标点符号后的结果: 大家好才真好谢谢大家

在代码中,我们首先打开停用词文件,并将其读入stopwords列表中。然后使用分词工具jieba进行分词,遍历分词结果,去除stopwords中的词语和空格。接着使用正则表达式去除非中文字符。最后将结果用join函数连接在一起。

三、词性标注

词性标注是指为每个分词结果标注出其在句子中的词性,如名词、动词、形容词等。Python中,我们可以使用jieba或者NLTK包进行词性标注。

我们以jieba为示例:

import jieba.posseg as pseg

text = "大家好才是真的好,谢谢大家"

words = pseg.cut(text)

for word, flag in words:
    print(word, flag)

输出结果:

大家 r
好才是 l
真的 d
好 a
, x
谢谢 v
大家 r

在代码中,我们导入jieba并使用posseg模块,对text进行cut,得到每个词语的词性标注。在输出中,每个词语和其对应的词性之间用空格隔开。

四、词频统计

词频统计是对文本中每个词语出现的频率进行统计,并进行排序。Python中,我们可以使用collections包中的Counter方法进行词频统计。

我们以中文《红楼梦》作为样例,进行词频统计:

from collections import Counter

text = open('hongloumeng.txt', 'r', encoding='utf-8').read()

seg_list = jieba.cut(text, cut_all=False)

new_text = []
for word in seg_list:
    if word not in stopwords and word != ' ':
        new_text.append(word)

word_count = Counter(new_text)

top10 = word_count.most_common(10)

print("前10个出现次数最多的词语:", top10)

输出结果:

前10个出现次数最多的词语: [('黛玉', 2448), ('说', 1497), ('笑', 1321), ('道', 1305), ('宝玉', 1238), ('听', 1184), ('凤姐', 1136), ('老太太', 954), ('自己', 853), ('贾母', 817)]

在代码中,我们首先读入《红楼梦》的文本,然后使用分词工具jieba进行分词,并去除停用词和空格。接着使用Counter方法统计每个词语出现的频率,并使用most_common方法选取出现次数前10的词语。