当前位置:   article > 正文

python 词云 wordcloud使用paddle模式 庆余年人物分析--不是特别准,可以看着玩一玩_wordcloud分人名

wordcloud分人名

看完之后你也可以生成自己的词云

提供一个过滤人名的英中词性分析对应,更多的可以去我的码云上看看
https://gitee.com/billion_lines_of_code/learn-wordcloud

# 只过滤人名
En2Cn_name = {

    'nr': '名词-人名',
    'nr1': '名词-汉语姓氏',
    'nr2': '名词-汉语名字',
    'nrf': '名词-音译人名',
    'nrfg': '名词-人名',
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

代码中字符串的位置,大部分是可以替换的,你想要的自己改改偶

# 时间包,为了计算程序耗时
import datetime
# 规则执行 便于正则使用
import re
# 中文分析库
import jieba
# 获取词性
import jieba.posseg
# 多进程包
import multiprocessing
# 词云库
import wordcloud
# 集合包
import collections
# 绘图
import numpy
# 图片处理
from PIL import Image
# 图片处理,字体
import matplotlib.pylab as plt
# 本地的文件,词性模版
import baseresource.EnToCN as EnToCN


def jieba_doing(text_str, dic):
    # 动态调整词典
    jieba.suggest_freq('', True)
    # 可以添加用户的词典
    if dic:
        jieba.load_userdict('')
    # 文本分词 精确分词+HMM
    return jieba.cut(text_str, cut_all=False, HMM=True)


def jieba_doing_paddle(text_str, dic):
    # 动态调整词典
    jieba.suggest_freq('', True)
    # 可以添加用户的词典
    if dic:
        jieba.load_userdict('')
    # 文本分词 精确分词+HMM
    return jieba.cut(text_str, cut_all=False, HMM=True, use_paddle=True)


def main_process():
    # 词云分析文件
    # 分析文档
    analysis_text = '/Users/mac/Downloads/庆余年.txt'
    number = 100
    output_file = '词频.txt'
    text_str = read_text_file(analysis_text)
    # 文本处理
    # 正则表达式过滤
    # 过滤中文符号
    pattern = re.compile(u'[^a-zA-Z0-9\u4e00-\u9fa5]')
    text_str = remove_no_need_words(pattern, text_str)
    # jieba库做的一些事情
    # word_list_analysis = jieba_doing(text_str, '')
    word_list_analysis = jieba_doing_paddle(text_str, '')
    word_list_analysis = list(word_list_analysis)
    # 使用多进程处理,加快处理速度
    object_list = multi_process(word_list_analysis, 4)
    # 词频统计
    word_count = collections.Counter(object_list)

    word_count_top = word_count.most_common(number)
    print('词语\t词频\t词性\n')
    # 只写名词
    file_write(output_file, word_count_top, number, EnToCN.En2Cn_name)
    word_count_top = dict(word_count_top)
    print('\n 开始制作词云')
    mask = numpy.array(Image.open('../photomodel/chinamap.jpeg'))
    do_wordCloud(word_count_top, mask, 5000)


# 制作词云
def do_wordCloud(word_count_top, mask, dpi):
    wc = wordcloud.WordCloud(background_color='white',
                             font_path='../fontmodel/mashanzhengmaobikaishu.ttf', mask=mask,
                             max_font_size=150)

    wc.generate_from_frequencies(word_count_top)
    # print(word_count_top)
    plt.figure('词云')
    plt.imshow(wc)
    plt.axis('off')
    # png = '%s.png' % name
    plt.savefig('庆余年人物.png', dpi=dpi)
    plt.show()
    print('制作完成')

    pass


# 输出文词频分析文件,需要文件,高频词数组,需要词的个数,词性分析的模版数组
def file_write(output_file, word_count_top, number, EnToCNlist):
    # 输出文件
    file_out = open(output_file, 'w', encoding='utf-8')
    file_out.write('词语\t词频\t词性\n')
    file_out.write('--------\n')
    count = 0
    for TopWord, Frequency in word_count_top:  # 获取词语和词频

        for POS in jieba.posseg.cut(TopWord):  # 获取词性
            if count == number:
                break
            if POS.flag in list(EnToCNlist.keys()):
                print(TopWord + '\t', str(Frequency) + '\t',
                      list(EnToCNlist.values())[list(EnToCNlist.keys()).index(POS.flag)])  # 逐行输出数据
                file_out.write(TopWord + '\t' + str(Frequency) + '\t' + list(EnToCNlist.values())[
                    list(EnToCNlist.keys()).index(POS.flag)] + '\n')  # 逐行写入str格式数据
                count += 1
    file_out.close()  # 关闭文件


# 去掉文本的不需要的内容
def remove_no_need_words(pattern, text_str):
    # 去掉符合的符号
    text_str = re.sub(pattern, '', text_str)
    return text_str


# 输入要分析的文档
def read_text_file(analysis_text):
    # 读取文件
    file = open(analysis_text, 'r', encoding='utf-8')
    text_str = file.read()
    file.close()
    return text_str


# 词性过滤方法,词性模版
def filter_method(word_list_analysis):
    object_list = []
    for word in word_list_analysis:
        if len(word) < 2:
            continue
        for speech in jieba.posseg.cut(word):
            if speech.flag in list(EnToCN.En2Cn_name.keys()):
                object_list.append(word)
    return object_list


# 多进程处理,加快速度
def multi_process(word_list_analysis, num):
    object_list = []
    pool = multiprocessing.Pool(num)
    # 将数组拆分为多块
    parts = [word_list_analysis[i:i + num] for i in range(0, len(word_list_analysis), num)]
    results = pool.map(filter_method, parts)
    for result in results:
        object_list.extend(result)
    pool.close()
    return object_list


if __name__ == '__main__':
    start = datetime.datetime.now()
    main_process()
    end = datetime.datetime.now()
    print(end - start)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162

paddlepaddle-tiny error 安装不成功使用下面的命令

 python3 -m pip install paddlepaddle-tiny -i https://mirror.baidu.com/pypi/simple

  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/650798
推荐阅读
相关标签
  

闽ICP备14008679号