自然语言处理的基本预处理(分词,停用词记载,获得高频词语)
记录小白学习之路
自然语言处理的基本预处理(分词,停用词记载,获得高频词语)
-- coding: utf-8 --
#jieba分词示例
#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
#对文本进行预处理 停用词记载 分词 词性标注 以及统计高频词汇
# -*- coding: utf-8 -*-
#jieba分词示例
#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
#对文本进行预处理 停用词记载 分词 词性标注 以及统计高频词汇
import jieba
import jieba.posseg as psg
from gensim import corpora,models
from jieba import analyse
import functools
import math# 停用词表加载方法
def get_stopword_list():# 停用词表存储路径,每一行为一个词,按行读取进行加载# 进行编码转换确保匹配准确率stop_word_path = './停用词.txt'stopword_list = [sw.replace('\n', '') for sw in open(stop_word_path,encoding='utf-8').readlines()]return stopword_list#分词方法
def seg_to_list(sentence,pos=False):if not pos:#不进行词性标注的分词方法seg_list=jieba.cut(sentence)else:#进行词性标注的分词方法seg_list=psg.cut(sentence)return seg_list# 去除干扰词
def word_filter(seg_list, pos=False):stopword_list = get_stopword_list()filter_list = []# 根据POS参数选择是否词性过滤## 不进行词性过滤,则将词性都标记为n,表示全部保留for seg in seg_list:if not pos:word = segflag = 'n'else:word = seg.wordflag = seg.flagif not flag.startswith('n'):continue# 过滤停用词表中的词,以及长度为<2的词if not word in stopword_list and len(word) > 1:filter_list.append(word)return filter_listdef get_content():with open(r'红楼梦.txt',encoding='utf-8') as f:content=' 'for l in f:l=l.strip()content+=lreturn contentif __name__ == '__main__':pos=Trueseg_list = seg_to_list(get_content(), pos)filter_list = word_filter(seg_list, pos)print(filter_list)word_ = {}
for word in filter_list:if word != '\t':if word !='\r\n':if word in word_:word_[word]+=1else:word_[word]=1
#将词汇和词频以元组的形式保存
word_freq = []
for word,freq in word_.items():word_freq.append((word,freq))#进行降序排列
word_freq.sort(key = lambda x:x[1],reverse = True)#查看前200个结果
for i in range(200):word,freq =word_freq[i]print('{0:10}{1:5}'.format(word,freq))
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
