一、分词
在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的词语。