python 词频统计,分词笔记

2023-11-08

Python的中文分词库有很多,常见的有:

参考:https://www.jianshu.com/p/7ad0cd33005e

nltk词频统计

本文使用的包为nltk包,使用pip语句就可以安装,安装后使用 nltk.download()下载扩展部分

首先,我们配置需要使用的包和文本材料

import nltk
import math
import string 
import nltk.stem
from nltk.corpus import stopwords
from collections import Counter


#设置三段文本
text_1 = "In information retrieval, tf–idf or TFIDF, short for term frequency–inverse document frequency, is a numerical statistic that is intended to reflect how important a word is to a document in a collection or corpus. It is often used as a weighting factor in searches of information retrieval, text mining, and user modeling. The tf–idf value increases proportionally to the number of times a word appears in the document and is offset by the number of documents in the corpus that contain the word, which helps to adjust for the fact that some words appear more frequently in general. Tf–idf is one of the most popular term-weighting schemes today; 83% of text-based recommender systems in digital libraries use tf–idf."
text_2 = "Variations of the tf–idf weighting scheme are often used by search engines as a central tool in scoring and ranking a document's relevance given a user query. tf–idf can be successfully used for stop-words filtering in various subject fields, including text summarization and classification."
text_3 = "One of the simplest ranking functions is computed by summing the tf–idf for each query term; many more sophisticated ranking functions are variants of this simple model."

punctuation_map = dict((ord(char), None) for char in string.punctuation)  #引入标点符号,为下步去除标点做准备
s = nltk.stem.SnowballStemmer('english')   #在提取词干时,语言使用英语,使用的语言是英语

在对文本进行提取关键词之前,我们需要对文本进行处理,去除文本的标点符号、去除文本的一些停用词(比如介词in,连词and等)。因为在文章中,in和and的出现频率可能会很高,但是它们没有实际意义,所以我们需要将其去除掉。

def stem_count(text):
    l_text = text.lower()     #全部转化为小写以方便处理 
    without_punctuation = l_text.translate(punctuation_map)    #去除文章标点符号
    tokens = nltk.word_tokenize(without_punctuation)        #将文章进行分词处理,将一段话转变成一个list
    without_stopwords = [w for w in tokens if not w in stopwords.words('english')]    #去除文章的停用词
    cleaned_text = [] 
    for i in range(len(without_stopwords)):
        cleaned_text.append(s.stem(without_stopwords[i]))    #提取词干
    count = Counter(cleaned_text)                 #实现计数功能
    return count

接下来,我们定义TF-IDF的计算过程。

#定义TF-IDF的计算过程
def D_con(word, count_list): 
    D_con = 0
    for count in count_list:
        if word in count:
            D_con += 1
    return D_con
def tf(word, count): 
    return count[word] / sum(count.values())
def idf(word, count_list): 
    return math.log(len(count_list)) / (1 + D_con(word, count_list))
def tfidf(word, count, count_list):
    return tf(word, count) * idf(word, count_list)

最后,我们分析文本

texts = [text_1, text_2, text_3] 
count_list = [] 
for text in texts: 
    count_list.append(stem_count(text))      #填入清洗好后的文本
for i in range(len(count_list)):
    print('For document {}'.format(i+1))
    tf_idf = {}
    for word in count_list[i]:
        tf_idf[word] = tfidf(word, count_list[i], count_list)
    sort = sorted(tf_idf.items(), key = lambda x: x[1], reverse=True) #将集合按照TF-IDF值从大到小排列
    for word, tf_idf in sort[:7]: 
        print("\tWord: {} : {}".format(word, round(tf_idf, 6)))
————————————————
版权声明:本文为CSDN博主「海军上将光之翼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43216017/article/details/86755145

wordcloud库

以下参考:https://zhuanlan.zhihu.com/p/103080917

首先,安装所需的库。(当然,记得先安好python)

可以直接在cmd中(按下win+R,输入 cmd 后点确定)分别输入以下代码进行安装(部分可能已系统内置),也可以用其他方式进行安装。不过个人比较推荐通过cmd进行安装,毕竟cmd安装方便,不费事儿。

pip install re
pip install jieba
pip install collections
pip install numpy
pip install PIL
pip install wordcloud
pip install matplotlib.pyplot

安装完成后,就可以开心的敲代码啦~

在代码的开头,先进行一些定义

在程序的开头进行定义,是为了以后修改代码更加方便。当然,在凭空开始写程序的时候,可能自己也不清楚自己之后都需要定义哪些东西,所以这一步可以在边写代码时边在程序开头进行修改。

另外,在运行程序的时候,记得把程序运行所需文件放在程序的运行目录下

# 主要功能自定义设置
Analysis_text = '分析文档.txt'        # 分析文档
userdict = '用户词典.txt'             # 用户词典
StopWords = '停用词库.txt'            # 停用词库
number = 100                          # 统计个数
Output = '词频.txt'                   # 输出文件
background = '词频背景.jpg'           # 词频背景

然后是导入相关的库

这个没什么好说的,代码的注释中已经解释的很详细了。(我是按用到的库的先后顺序对安装库和导入库的顺序进行排序的哦,这样也许会更好理解一些)

# 导入扩展库
import re                           # 正则表达式库
import jieba                        # 结巴分词
import jieba.posseg                 # 词性获取
import collections                  # 词频统计库
import numpy                        # numpy数据处理库
from PIL import Image               # 图像处理库
import wordcloud                    # 词云展示库
import matplotlib.pyplot as plt     # 图像展示库(这里以plt代表库的全称)

在导入扩展库后,才是程序正文的开始。

工作的开头,当然是对所需分析文档进行读取

读取方式有很多种,这里选择用open这一种比较简洁的方式;在读取完成后,不要忘记close哦,这是一个好————————习惯!(或者用with语句)这里读取的文件“Analysis_text”是前文定义的“Analysis_text = '分析文档.txt'”。

# 读取文件
fn = open(Analysis_text,'r',encoding = 'UTF-8')  # 打开文件
string_data = fn.read()                          # 读出整个文件
fn.close()                                       # 关闭文件

读取完成后,对文本进行一些预处理

# 文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式(空格等)
string_data = re.sub(pattern, '', string_data)     # 将符合模式的字符去除

添加动态调整词典用户词典功能。这两个功能并不是必须的,大家可以根据个人需求决定是否使用。变量“userdict”是开头定义的“userdict = '用户词典.txt'”。

这两个功能的用处,是在自带词库的基础上、 根据动态调整词典/用户词典中的字/词对文档内容进行分词统计。若对程序自带词库的分词效果不尽满意, 可以在动态调整词典/用户词典中单独加入想要统计的词汇,以提高个别词汇识别成功率。格式为每行一个字/词。 比如:想统计“小小花”这个词的出现次数,但程序可能会将其分为“小小”“ 花”这两个词语分别进行统计;或是将“小小花”与前后文字/词一同进行统计,如“小小花朵”。 这时就可以在动态调整词典/用户词典中加入“小小花”一词,以提高识别成功率。

# 动态调整词典
jieba.suggest_freq('小小花', True)     #True表示该词不能被分割,False表示该词能被分割

# 添加用户词典
jieba.load_userdict(userdict)

进行分词

利用jieba词库进行分词。jieba词库在汉语语义分析中运用的十分广泛,上手也相对容易一点。更详细的相关介绍大家可以千度一下,我就不占地儿了。这里采用的是精确模式分词+使用HMM模型,可以将字/词划分的更加准确。

# 文本分词
seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True)    # 精确模式分词+HMM
object_list = []

去除停用词

对于停用词库中出现的词汇,程序不会进行统计。这个功能也不是必须的,大家可以根据个人需求决定是否使用。这里给出的停用词库是前面定义的“StopWords = '停用词库.txt'”,用的是常见的“Chinese stopwords”词库。这个词库在网上不太难找,懒得找的话也可以在我上面给出的链接中进行下载。

# 去除停用词(去掉一些意义不大的词,如标点符号、嗯、啊等)
with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile:
    stopwords = set(meaninglessFile.read().split('\n'))
stopwords.add(' ')
for word in seg_list_exact:         # 循环读出每个分词
    if word not in stopwords:       # 如果不在去除词库中
        object_list.append(word)    # 分词追加到列表

进行词频统计

这里的“number”是前面定义的“number = 100”,具体数值大家也可以自己更改。词频统计也有很多种写法,但个人认为使用Couter进行统计更加简洁。

# 词频统计
word_counts = collections.Counter(object_list)       # 对分词做词频统计
word_counts_top = word_counts.most_common(number)    # 获取前number个最高频的词

然后是添加“英文词性转中文词性字典”

我在这个程序中加入了词性分析的功能,即识别当前字/词是形容词、动词还是名词等等。但jieba自带的词性分析输出结果为英文(a/v/n等),不便于用户直接阅读;因此我就在网上搜罗了一圈,自己花了点时间整理出来了这两个对照词典。

词典分为简洁版和详细版两个版本,大家按需所取。一般来说简洁版的就够用了,所以我在我的程序中使用的也是简洁版的转换。

# 英文词性转中文词性字典:简洁版
En2Cn = {
    'a'    : '形容词',
    'ad'   : '形容词',
    'ag'   : '形容词',
    'al'   : '形容词',
    'an'   : '形容词',
    'b'    : '区别词',
    'bl'   : '区别词',
    'c'    : '连词',
    'cc'   : '连词',
    'd'    : '副词',
    'e'    : '叹词',
    'eng'  : '英文',
    'f'    : '方位词',
    'g'    : '语素',
    'h'    : '前缀',
    'i'    : '成语',
    'j'    : '简称略语',
    'k'    : '后缀',
    'l'    : '习用语',
    'm'    : '数词',
    'mq'   : '数量词',
    'n'    : '名词',
    'ng'   : '名词',
    'nl'   : '名词',
    'nr'   : '名词',
    'nr1'  : '名词',
    'nr2'  : '名词',
    'nrf'  : '名词',
    'nrfg' : '名词',    
    'nrj'  : '名词',
    'ns'   : '名词',
    'nsf'  : '名词',
    'nt'   : '名词',
    'nz'   : '名词',
    'o'    : '拟声词',
    'p'    : '介词',
    'pba'  : '介词',
    'pbei' : '介词',
    'q'    : '量词',
    'qt'   : '量词',
    'qv'   : '量词',
    'r'    : '代词',
    'rg'   : '代词',
    'rr'   : '代词',
    'rz'   : '代词',
    'rzs'  : '代词',
    'rzt'  : '代词',
    'rzv'  : '代词',
    'ry'   : '代词',
    'rys'  : '代词',
    'ryt'  : '代词',
    'ryv'  : '代词',
    's'    : '处所词',
    't'    : '时间词',
    'tg'   : '时间词',
    'u'    : '助词',
    'ude1' : '助词',
    'ude2' : '助词',
    'ude3' : '助词',
    'udeng': '助词',
    'udh'  : '助词',
    'uguo' : '助词',
    'ule'  : '助词',
    'ulian': '助词',
    'uls'  : '助词',
    'usuo' : '助词',
    'uyy'  : '助词',
    'uzhe' : '助词',
    'uzhi' : '助词',
    'v'    : '动词',
    'vd'   : '动词',
    'vf'   : '动词',
    'vg'   : '动词',
    'vi'   : '动词',
    'vl'   : '动词',
    'vn'   : '动词',
    'vshi' : '动词',
    'vx'   : '动词',
    'vyou' : '动词',
    'w'    : '标点符号',
    'wb'   : '标点符号',
    'wd'   : '标点符号',
    'wf'   : '标点符号',
    'wj'   : '标点符号',
    'wh'   : '标点符号',
    'wkz'  : '标点符号',
    'wky'  : '标点符号',
    'wm'   : '标点符号',
    'wn'   : '标点符号',
    'wp'   : '标点符号',
    'ws'   : '标点符号',
    'wt'   : '标点符号',
    'ww'   : '标点符号',
    'wyz'  : '标点符号',
    'wyy'  : '标点符号',
    'x'    : '字符串',
    'xu'   : '字符串',
    'xx'   : '字符串',
    'y'    : '语气词',
    'z'    : '状态词',
    'un'   : '未知词',
}

# 英文词性转中文词性字典:详细版
En2Cn_Pro = {
    'a'    : '形容词',
    'ad'   : '形容词-副形词',
    'ag'   : '形容词-形容词性语素',
    'al'   : '形容词-形容词性惯用语',
    'an'   : '形容词-名形词',
    'b'    : '区别词',
    'bl'   : '区别词-区别词性惯用语',
    'c'    : '连词',
    'cc'   : '连词-并列连词',
    'd'    : '副词',
    'e'    : '叹词',
    'eng'  : '英文',
    'f'    : '方位词',
    'g'    : '语素',
    'h'    : '前缀',
    'i'    : '成语',
    'j'    : '简称略语',
    'k'    : '后缀',
    'l'    : '习用语',
    'm'    : '数词',
    'mq'   : '数量词',
    'n'    : '名词',
    'ng'   : '名词-名词性语素',
    'nl'   : '名词-名词性惯用语',
    'nr'   : '名词-人名',
    'nr1'  : '名词-汉语姓氏',
    'nr2'  : '名词-汉语名字',
    'nrf'  : '名词-音译人名',
    'nrfg' : '名词-人名',    
    'nrj'  : '名词-日语人名',
    'ns'   : '名词-地名',
    'nsf'  : '名词-音译地名',
    'nt'   : '名词-机构团体名',
    'nz'   : '名词-其他专名',
    'o'    : '拟声词',
    'p'    : '介词',
    'pba'  : '介词-“把”',
    'pbei' : '介词-“被”',
    'q'    : '量词',
    'qt'   : '量词-动量词',
    'qv'   : '量词-时量词',
    'r'    : '代词',
    'rg'   : '代词-代词性语素',
    'rr'   : '代词-人称代词',
    'rz'   : '代词-指示代词',
    'rzs'  : '代词-处所指示代词',
    'rzt'  : '代词-时间指示代词',
    'rzv'  : '代词-谓词性指示代词',
    'ry'   : '代词-疑问代词',
    'rys'  : '代词-处所疑问代词',
    'ryt'  : '代词-时间疑问代词',
    'ryv'  : '代词-谓词性疑问代词',
    's'    : '处所词',
    't'    : '时间词',
    'tg'   : '时间词-时间词性语素',
    'u'    : '助词',
    'ude1' : '助词-“的”“底”',
    'ude2' : '助词-“地”',
    'ude3' : '助词-“得”',
    'udeng': '助词-“等”“等等”“云云”',
    'udh'  : '助词-“的话”',
    'uguo' : '助词-“过”',
    'ule'  : '助词-“了”“喽”',
    'ulian': '助词-“连”',
    'uls'  : '助词-“来讲”“来说”“而言”“说来”',
    'usuo' : '助词-“所”',
    'uyy'  : '助词-“一样”“一般”“似的”“般”',
    'uzhe' : '助词-“着”',
    'uzhi' : '助词-“之”',
    'v'    : '动词',
    'vd'   : '动词-副动词',
    'vf'   : '动词-趋向动词',
    'vg'   : '动词-动词性语素',
    'vi'   : '动词-不及物动词(内动词)',
    'vl'   : '动词-动词性惯用语',
    'vn'   : '动词-名动词',
    'vshi' : '动词-“是”',
    'vx'   : '动词-形式动词',
    'vyou' : '动词-“有”',
    'w'    : '标点符号',
    'wb'   : '标点符号-百分号千分号,全角:% ‰ 半角:%',
    'wd'   : '标点符号-逗号,全角:, 半角:,',
    'wf'   : '标点符号-分号,全角:; 半角: ; ',
    'wj'   : '标点符号-句号,全角:。',
    'wh'   : '标点符号-单位符号,全角:¥ $ £ ° ℃ 半角 $',
    'wkz'  : '标点符号-左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <',
    'wky'  : '标点符号-右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >',
    'wm'   : '标点符号-冒号,全角:: 半角: :',
    'wn'   : '标点符号-顿号,全角:、',
    'wp'   : '标点符号-破折号,全角:—— -- ——- 半角:—',
    'ws'   : '标点符号-省略号,全角:…… …',
    'wt'   : '标点符号-叹号,全角:! 半角:!',
    'ww'   : '标点符号-问号,全角:? 半角:?',
    'wyz'  : '标点符号-左引号,全角:“ ‘ 『',
    'wyy'  : '标点符号-右引号,全角:” ’ 』',
    'x'    : '字符串',
    'xu'   : '字符串-网址URL',
    'xx'   : '字符串-非语素字',
    'y'    : '语气词',
    'z'    : '状态词',
    'un'   : '未知词',
}

接下来的这一步最为关键,是把词频分析结果输出至工作台,并导出“词频.txt”文件

为使分析结果便于理解,首先输出/写入“\n词语\t词频\t词性”,并用破折号作为分割线进行划分。利用count计数,进行双重for循环:第一重for循环是获取前number个词语与其词频,第二重for循环是获取前number个词语的词性;若count≠number,则依次输出/写入词语、词频、词性,并将count+1;直到count=number,终止循环。

另外,输出文件“Output”是前文定义的“Output = '词频.txt'”,程序会在运行目录下创建文本文件并进行写入。

# 输出至工作台,并导出“词频.txt”文件
print ('\n词语\t词频\t词性')
print ('——————————')
fileOut = open(Output,'w',encoding='UTF-8')     # 创建文本文件;若已存在,则进行覆盖
fileOut.write('词语\t词频\t词性\n')
fileOut.write('——————————\n')
count = 0
for TopWord,Frequency in word_counts_top:                       # 获取词语和词频
    for POS in jieba.posseg.cut(TopWord):                       # 获取词性
        if count == number:
            break
        print(TopWord + '\t',str(Frequency) + '\t',list(En2Cn.values())[list(En2Cn.keys()).index(POS.flag)])                    # 逐行输出数据
        fileOut.write(TopWord + '\t' + str(Frequency) + '\t' + list(En2Cn.values())[list(En2Cn.keys()).index(POS.flag)] + '\n') # 逐行写入str格式数据
        count += 1
fileOut.close()                                                 # 关闭文件

其实若能实现上面所给出的所有代码,那就已经是一个较为完善的词频分析软件了。但是我觉得还不够,还要再做点什么。

于是加入了制作词云这一功能。

首先,输出“开始制作词云……”,提示用户系统当前运行状态。定义词频的背景,这里的“background”是前面定义的“background = '词频背景.jpg'”。调用wordcloud函数,对部分参数进行调整。最后利用plt函数进行词云的展示。

# 词频展示
print ('\n开始制作词云……')                    # 提示当前状态
mask = numpy.array(Image.open(background))      # 定义词频背景
wc = wordcloud.WordCloud(
    font_path = 'C:/Windows/Fonts/simfang.ttf', # 设置字体(这里选择“仿宋”)
    background_color='white',                   # 背景颜色
    mask = mask,                                # 文字颜色+形状(有mask参数再设定宽高是无效的)
    max_words = number,                         # 显示词数
    max_font_size = 150                         # 最大字号
)

wc.generate_from_frequencies(word_counts)                                        # 从字典生成词云
wc.recolor(color_func=wordcloud.ImageColorGenerator(mask))                       # 将词云颜色设置为背景图方案
plt.figure('词云')                                                               # 弹框名称与大小
plt.subplots_adjust(top=0.99,bottom=0.01,right=0.99,left=0.01,hspace=0,wspace=0) # 调整边距
plt.imshow(wc, cmap=plt.cm.gray, interpolation='bilinear')                       # 处理词云
plt.axis('off')                                                                  # 关闭坐标轴
print ('制作完成!')                                                             # 提示当前状态
print ('\n作者:丨小小花丨')
print ('日期:2020.01.16') 
plt.show()  

至此,一个词频分析的程序就基本完成啦!

最后!是加入一个小小的语句——

# 避免程序运行完成后直接退出
input()

在运行.py文件时,程序在运行完成后常常会“一闪而过”,很多时候是因为程序运行完了没事儿干了就自闭了。其实只要在代码的最后加上这样一句话就可以解决啦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 词频统计,分词笔记 的相关文章

  • 解决docker nginx无法查看日志的问题

    我们知道 Nginx的日志默认存放在 var log nginx access log var log nginx error log 但在使用nginx镜像构建的容器时 出现无法查看日志的问题 用cat命令后无反应 通过如下命令可以看到
  • android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

    转自 http blog csdn net mwq384807683 article details 72529285 源码分析相关面试题 Volley源码分析 注解框架实现原理 okhttp3 0源码分析 onSaveInstanceSt
  • 数据分析之训练数据集处理

    在训练dbnet的时候 需要进行数据分析的一些方法来分割数据集 这里刚好整理一下 coding utf 8 用于解决编码问题 x strip strip 方法删除前导空格和尾随空格 with open as 方法 with open 1 t
  • 外向交货单发货过账BAPI:BAPI_OUT…

    前面说过 可以使用 WS DELIVERY UPDATE 进行外向交货单的发货过账 当然 这个可实现的很多 过账 冲销 删除都可以 但是这个不是bapi 是个函数 则会缺少bapi自带的那些校验 为了更安全 其实建议是使用 BAPI OUT
  • 创建Gravatar头像

    Gravatar Globally Recognized Avatar的缩写 是一项用于提供在全球范围内使用的头像服务 只要你在Gravatar的服务器上上传了你自己的头像 你便可以在其他任何支持Gravatar的博客 论坛等地方使用它 它
  • shared-service.ts

    shared service ts import Observable from rxjs Observable import Injectable from angular core import Subject from rxjs Su
  • npm link

    正文 npm link的用法 假如我们想自己开发一个依赖包 以便在多个项目中使用 一种可行的方法 也是npm给我们提供的标准做法 那就是我们独立开发好这个 依赖包 然后将它直接发布到 npm镜像站 上去 等以后想在其他项目中使用的时候 直接
  • 为什么说测试岗位是巨坑?10年测试人告诉你千万别上当

    每次都有人问我软件测试的前景是什么样的 每年也会有人很多人纷纷涌入测试的岗位上 希望自己能够进入阿里 华为等大厂 但是测试岗位真的那么吃香吗 今天我结合从零基础小白到测试开发的成长经历 来说下这个行业的发展前景 以及要入行的同学应该从哪个地
  • MinIO安装配置访问以及SpringBoot整合MinIO

    MinIO 1 MinIO安装 Minio 是个基于 Golang 编写的开源对象存储服务 存储非结构化数据 如 图片 视频 音乐等 官网地址 https min io 中文地址 http minio org cn 官网文档 中文 地址 h
  • C高级 day4

    1 有m1 txt m2 txt m3 txt m4 txt 分别创建出对应的目录 m1 m2 m3 m4 并把文件移动到对应的目录下 1 sh bin bash touch m1 txt m2 txt m3 txt m4 txt for
  • 【Ant Design】<a-date-picker>只选择今天之前的日期

  • LeetCode-N数之和类问题总结(双指针法)

    两数之和 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那两个整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能重复利用这个数组中同样的元素 示例 给定 nums 2 7 1
  • jsp中编码问题(自认为这个最好)

    在JSP Servlet中主要有以下几个地方可以设置编码 pageEncoding UTF 8 contentType text html charset UTF 8 request setCharacterEncoding UTF 8 和
  • python pdf转word

    转自 https yq aliyun com articles 487610 spm a2c4e 11153940 blogcont493499 12 655a7962KsKW7M 1 安装pdfminer3k模块 安装anaconda后
  • java listnode 合并链表_剑指offer:合并两个排序的链表(Java)

    1 问题描述 输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 2 思路 方法1 非递归方法 根据题目这个很类似排序中的外排过程 两个数组分别排好序 然后再把他们整体进行排序 所以这道题思想很简单
  • Nvidia Jetson 编解码开发(6)Jetpack 4.x版本Multimedia API 硬件编码开发--输入端对接Camera V4L2采集

    1 前言 Nvidia Jetson 编解码开发 2 Jetpack 4 x版本Multimedia API 硬件编码开发 集成encode模块 free xx的博客 CSDN博客 基于上篇继续开发 由于上篇只集成了encode模块 但是编

随机推荐