01文本分析---词频统计(基于jieba分词)

基于jiba库分词默认模式分词

一、效果:

1.输出分词和从0开始的一一映射文件

2.输出词频统计文件

3.输出分词文件

二、功能:

1.分词

2.词频统计

3.进行了简单的同义词合并        

三、说明:

1.准备用户自定义词典文件(格式:自定义词+空格+词性符号,每行一个词)

2.准备同义词词典文件(格式:准备转化成的那个词+空格+同义词1+空格+同义词2...,每行词数不限)

3.准备停用词词典(每行一个)

4.我的待分词文件是一个csv,第一列是label第二列是要分词内容,根据自己的文件格式在前几行文件导入那块做一下修改就行了

四、代码如下(pycharm)封装成一个函数了

import jieba
"""
准备:待分词文件,第一列为label(情感标签)逗号分割后面是文本内容
输出:1.根据词频由大到小排序后的词频文件fre.txt
      2.根据词频由大到小排序后词语重新从0映射的文件 word_list.txt
      3.分词后的文字文件cutted.txt 词语间以空格分开

build_vocab函数参数说明:
data_path:数据路径
data_stop_path:停用词典字典
voc_fre_top_n:记录词频排名前n个词
voc_fre_min:记录词的最低词频要求
isprint=False:是否把分词结果存储到out文件中,默认不存储
data_synonym_path:近义词典
data_add_path:自定义词典
"""


def build_vocab(data_path, data_stop_path, data_synonym_path, data_add_path, voc_fre_top_n, voc_fre_min, isprint=False):
    data_list = open(data_path).readlines()[1:]
    stops_word = open(data_stop_path).readlines()
    stops_word = [line.strip() for line in stops_word]
    stops_word.append(' ')
    stops_word.append('\n')
    synonym_words_list = open(data_synonym_path).readlines()

    synonym_dict = {}
    for i in synonym_words_list:
        synonym_dict[i.split()[0]] = i.split()[1:]

    jieba.load_userdict(data_add_path)
    voc_dict = {}
    UNK = '<UNK>'
    PAD = '<PAD>'
    cutted_list = []

    # 分词部分
    for item in data_list[:100]:
        label = item[0]  # 标签列
        content = item[2:].strip()
        seg_list = jieba.cut(content)
        seg_res = []
        for seg_item in seg_list:
            #去停用词
            if seg_item in stops_word:
                continue
            seg_res.append(seg_item)

            for j in synonym_dict.keys():
                if seg_item in synonym_dict[j]:
                    seg_item = j
            # 计算词频
            if seg_item in voc_dict.keys():
                voc_dict[seg_item] += 1
            else:
                voc_dict[seg_item] = 1
        cutted_list.append(seg_res)

    voc_fre = sorted([i for i in voc_dict.items() if i[1] > voc_fre_min], key=lambda x: x[1], reverse=True)[
              :voc_fre_top_n]

    # 构建词或字到索引的映射 从0开始
    voc_dict = {word_count[0]: idx for idx, word_count in enumerate(voc_fre)}
    # 添加未知符和填充符的映射
    voc_dict.update({UNK: len(voc_dict), PAD: len(voc_dict) + 1})

    # 输出部分
    if isprint:
        ff = open('output/word_list.txt', 'w')  # 根据词频由大到小排序后词语重新从0映射的文件 word_list.txt
        for i in voc_dict.keys():
            ff.writelines('{},{}\n'.format(i, voc_dict[i]))

        ff1 = open('output/fre.txt', 'w')  # 根据词频由大到小排序后的词频文件fre.txt
        for i in voc_fre:
            ff1.writelines('{},{}\n'.format(i[0], i[1]))

        ff2 = open('output/cutted.txt', 'w')  # 分词后的文字文件cutted.txt 词语间以空格分开
        for i in cutted_list:
            for j in i:
                ff2.writelines(j + ' ')
            ff2.writelines('\n')

    return voc_dict, synonym_dict


# data_path='###.csv'
# data_stop_path='/stopword_list.txt'
# voc_fre_top_n=1000
# voc_fre_min=1
# data_synonym_path='synonym.txt'
# data_add_path='/add_word_list.txt'
# build_vocab(data_path, data_stop_path, data_synonym_path, data_add_path, voc_fre_top_n, voc_fre_min, isprint=True)

五、补充一下我的文件结构

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值